基于 TiddlyWiki 的论文笔记本。
{{!!url}}
<<<
This is an example of a thesis notebook powered by TiddlyWiki 5.0.8-beta.
TiddlyWiki is a great piece of software created by Jeremy Ruston. It allows you, among other things, to take notes, organize ideas, store information, and display all your stuff the way you want. It is an incredibly flexible tool you can adapt to fit almost all your needs.
This TiddlyWiki has been customized to serve as a philosophy notebook centered around authors, books and papers, concepts and theories, and personal notes. I use it along with Zotero, which is a dedicated bibliography software. Both are free, open source projects. TiddlyWiki can be downloaded at https://tiddlywiki.com.
<<<
在 Windows 上运行的 TiddlyWiki 的桌面应用进程。
{{!!url}}
<<<
TiddlyWiki for Windows. A unique non-linear notebook for capturing, organising and sharing complex information.
<<<
buggyj 创建了一些有用的插件,包括一个所见即所得的 HTML 编辑器,可配置的日历和可拖动排序的标签列表。
{{!!url}}
Danielo Rodriguez 的客制化与宏的集合。
{{!!url}}
<<<
This is my personal tiddlywiki file for testing.
Here I will post the tools and Macros that I develop for this awesome tool. That way, all the help the comunity gave me can came back to the comunity again.
<<<
任務和授權追蹤、會議和議程項目、專案角色、進度和狀態更新、參考項目,Tickler 日曆、對話日誌、圖書筆記和圖書館等等!
{{!!url}}
<<<
Cardo is a standalone, browser-based tool that can be used as a simple task manager, or as a complex Project Management system (and indeed, I do use it this way in my daily work) as well as a fully Wiki-ized personal knowledge store. It runs completely independently in the browser, even without an Internet connection, making it possible to carry around on a USB stick, or to use on the morning commute.
<<<
一个使 TiddlyWiki 与 [[CouchDB|http://couchdb.apache.org]] 数据库同步变更的适配器。
{{!!url}}
<<<
CouchDB sync adaptor for TiddlyWiki 5. Requires TiddlyWiki >= 5.1.2.
Works in limited testing. Not sure how well it handles conflicts.
<<<
~TiddlyWiki 的深色调色板。
{{!!url}}
<<<
!!! Install manually
Open the Control Panel > Appereance > Palette, scroll down and clone a platte, rename it to Dracula and copy the code from the website.
!!! Activating theme
* Open the Control Panel > Appereance > Palette
* Scroll down and select Dracula
* Boom! It's working
<<<
~TiddlyWiki 的改编版,非常适合用作笔记本系统。
{{!!url}}
<<<
Drift is an adaptation of TiddlyWiki with the goal of helping you Collect. Organize. and Grow. your ideas while keeping tab on how they interconnect together and fluidly Drift from one to another.
The 2 main components of Drift are TWCrosslinks and DailyNotes so you never miss an idea
Drift was inspired by TiddlyBlink / Stroll and adapted to fit my needs.
<<<
一个 Trello&trade 风格的看板式管理的 TiddlyWiki 插件;使用白板、列表和卡片。
{{!!url}}
//''Dynamic Tables''// 是一组允许您创建表格的宏,表格中的列是从条目创建的,行则来自条目的字段;或者是从条目创建的行,列则来自条目的字段。可以即时编辑单个保存格。列表格可以按列排序,而行表格可以按行排序。
{{!!url}}
Danielo Rodriguez 的插件,允许单独加密条目。
{{!!url}}
<<<
Advantages:
* You can specify a different password for each tiddler if you want.
* You don't have to encrypt your whole wiky.
* If you forget your password, you only lose a tiddler.
* It's possible to edit the tiddler content , tags and fields except the encrypt field after encryption.
* [...]
<<<
Mozilla Firefox 的一个附加组件,可以平顺 ~TiddlyWiki 内置的 [[HTML5 备用保存模块|Saving with the HTML5 fallback saver]]的一些摩擦,使其与 ~TiddlyFox 几乎一样易于使用。工作流程旨在无需配置即可使用。
https://github.com/pmario/file-backups 其中包含文档和介绍视频的链接。
一个 chrome 版的扩充功能在计划中!
此维基举了各种[[筛选器|Filters]]和它们在使用[[清单小工具|ListWidget]]示例
{{!!url}}
<<<
This wiki gives examples for various [[filters|Filters]] and their use in the [[list widget|ListWidget]]. A good starting point to understand what filters yield which results also is [[test-filters.js|https://github.com/Jermolene/TiddlyWiki5/blob/master/editions/test/tiddlers/tests/test-filters.js]].
<<<
''Font Awesome 5 Free'' SVG 图像汇集转换成条目 , 您可以很容易地导入 (拖放) 至您的维基 。
{{!!url}}
为 ~TiddlyWiki 改写的 "Ghostwriter" 布景主题。
{{!!url}}
<<<
Ghostwriter is a popular, minimalist and mobile responsive theme for the blogging platform ghost. This is an adaptation for ~TiddlyWiki.
<<<
创建圣经经文的气泡图。
{{!!url}}
<<<
This ~TiddlyWiki, which is still under construction, has several features that together make it lightning fast to find passages, types of passages, themes, people, places and images in the New Testament Gospels. The bubblemaps are color-coded overviews of each Gospel. Each type of passage (miracle story, parable, etc) was assigned a color. Bubblemaps allow you to do three things:
#The ''bubblemaps'' are color-coded overviews of each Gospel. Each type of passage (miracle story, parable, etc) was assigned a color. Bubblemaps allow you to do three things:
##See how the different types of passages are distributed throughout each Gospel.
##Hover over passages to see the verses and titles.
##Click on a passage to open it and see the themes and other data it mentions.
#The ''themes by passage'' indexes are lists of the passages in each Gospel, followed by the themes and other data found in the passage. Clicking on a theme calls up a list of all the passages that mention that theme.
#The ''indexes of themes'' contain lists of links to each theme, person, group, place and image. Clicking on a theme calls up a list of all the passages that mention that theme.
#There is a ''search window'' hidden in the right hand menu. Use the search window to find passages quickly, by typing things like sower or paralytic. Click the arrows in the upper right of the screen to open the menu and search.
<<<
Soren Bjornstad 的这本新教科书强烈推荐用于学习 ~TiddlyWiki。演示和设计也是使用 ~TiddlyWiki 的一流示例。
来自网站:
> Grok ~TiddlyWiki is a textbook that helps you build a deep, lasting understanding of and proficiency with ~TiddlyWiki through a combination of detailed explanations, practical exercises, and spaced-repetition reviews of prompts called takeaways.
{{!!url}}
一个 [[基于 TiddlyWiki 的 GTD ® 系统前身为 MonkeyGTD|http://mgsd.tiddlyspot.com/]] 的 TiddlyWiki 5 改写版。
{{!!url}}
<<<
GSD5 is a Getting-Thing-Done tool for TiddlyWiki5 based off the mGSD classic TiddlyWiki.
<<<
Thomas Elmiger 编写的说明汇集,其中包括 ''tweet button'' 宏、''text-stretch'' 解决方案、''snippet extraction'' 宏和一个通过拖放安装 ''scroll-to-top button'' 的条目。
{{!!url}}
<<<
Quick Extensions for ~TiddlyWiki 5 – […] As I take from the community, I am happy if I can give back. You can use my stuff to do whatever you like, but remember to save a back-up first.
<<< Thomas
广泛收集来自 Jed Carty 的提示和技巧。
{{!!url}}
<<<
I made this so that some of my friends with absolutely no coding experience could use some of the better features of TW5 without having to learn much. I am hopefully going to continue updating it as I learn new things. There isn't really anything here that isn't available in plenty of other places, but I figured that since I spent a while putting it together and people keep saying that TW needs more documentation I would post it here.
<<<
在 ~CentOS 虚拟主机上运行 TiddlyWiki 的一个逐步指南。
{{!!url}}
<<<
In this tutorial we will guide you through the steps of installing and running TiddlyWiki on a ~CentOS 6 VPS.
We will also install and configure Nginx as a reverse proxy, so you can run TiddlyWiki behind Nginx.
<<<
[[JD|http://j.d.tiddlyspot.com]] 的一个提高 TiddlyWiki 在智能型手机上可用性的插件:
{{!!url}}
JD 的一些调色板。
{{!!url}}
<<<
You can install any or all of these by dragging any of the below links into your Tiddlywiki:
* Brown One
* C8 Dark
* Cool Mint
* Neonize
* Spartan Day
* Spartan Night
<<<
一个以 ~TiddlyWiki 制作的完整的在线商店!
{{!!url}}
[[@malgam|https://github.com/malgam]] 的扩充插件搜集
{{!!url}}
<<<
The "loadnew" plugin provides the JavaScript module $:/plugins/malgam/loadnew/loadnew.js that implements an incremental load command for Tiddlywiki 5.
The javascript code is based on the built-in module $:/core/modules/commands/load.js that loads tiddlers from a Tiddlywiki file into a node.js Tiddlywiki instance. This command loads all non-system tiddlers, irrespective of whether they have been modified since last loaded. As a result, all tiddlers in the node.js tiddlers folder will end up with a new modification date.
In contrast, the loadnew command only loads tiddlers that either don't already exist in the tiddlers folder, or have a newer modified date than the existing tiddler.
With a backup strategy that uses a file system snapshot process to preserve historical versions of tiddlers, the loadnew command minimises the sizes of the resulting snapshots.
<<<
Mathcell 允许完全包含于 TiddlyWiki 的类似试算表的功能。
{{!!url}}
<<<
Mathcell allows spreadsheet-like abilities in a completely contained TiddlyWiki. Additional abilities allow it work as a general math engine.
<<<
在 android 系统上使用 TiddlyWiki 的西班牙文指南。
{{!!url}}
<<<
Tiddlywiki software is prodigious based on javascript which is capable of holding a notepad that can be edited with Internet Explorer or function as a full blog, contained in a single file.
<<<
//Translation by Google Translate//
JD 的此布景主题具有左侧栏、搜索栏的高级功能以及内置的大量可自定义性。
{{!!url}}
一个了不起的演示,拖放, 平移和变焦, 和其他复杂的触摸效果。Stuehler 的基于 [[muuri 的插件|Plugins by Uwe Stuehler]]。
{{!!url}}
Notebook 是 ~TiddlyWiki 的干净整洁的布景主题。
{{!!url}}
<<<
Notebook is a clean, uncluttered theme for TiddlyWiki.
* The theme is responsive and comes with mobile support through the included notebook-mobile plugin.
* Notebook comes with 3 default colour palettes, a grey, beige and dark one. To switch between colour palettes, click the color palette switch button in the top bar.
* Notebook uses a custom left sidebar, with another sticky bar at the top of the page (or at the bottom on mobile).
<<<
~NoteSelf 是您個人、私人、可定制、類似 Evernote 的經驗。
您想要雲端嗎?很好!您不想要?也很好!它全是您的,它是您的決定!
為什麼不是有點自私?
{{!!url}}
<<<
~NoteSelf is the perfect place to store your ideas, notes, thoughts, tips, tricks, recipes...
whatever you want to put into it! ~NoteSelf will store, index, and make it easily
searchable, so you will find it instantly whenever you need it!
You already know and love Evernote, we know it. It is comfortable, it syncs, has search capabilities...
Wow, it's almost perfect, but what about:
* Privacy - Everything is stored on the Evernote's servers!
* Customization - If you don't like the interface of Evernote, there's nothing you can do
~NoteSelf is built on top of ~TiddlyWiki, a powerful, free, highly customizable and open-source personal wiki.
We took the best of it, it's powerful customization system, and mixed it with one of the best
embedded databases available, [[PouchDb|http://www.pouchdb.com]], for bringing the synchronization capabilities you need.
<<<
Michael Sonntag 的使用 TiddlyWiki 快速指南(用德语写的)
{{!!url}}
<<<
Those using multiple different computer platforms (if only PC and Android) knows for certain: You would like to sync notes across computers and thereby be independent of any apps or services. I am concerned at any rate so and so I am constantly looking for the perfect solution.
With TiddlyWiki I found it mostly. As the name suggests, it TiddlyWiki is a Wikisystem. In contrast to all other wikis, TiddlyWiki is a single HTML file that runs in the browser and thus can be used on all modern operating systems. And because there is only one file, it can be very easily via the well-known cloud services (Dropbox, Google Drive, ownCloud) or synchronized with FTP or used on a USB stick.
<<<
(上述引言系使用谷歌翻译从德语翻译为英文)
[[Commodore PET|http://en.wikipedia.org/wiki/Commodore_PET]] 的快速 Forth 解释器,以 6502 汇编语言编写。包含程序文档的 TiddlyWiki 是从源代码自动生成的:请参阅 https://github.com/chitselb/pettil。
{{!!url}}
<<<
Objectives of the project are, in no particular order:
* make a Forth that runs on my Commodore PET 2001
* have fun
* improve my "6502 assembly golf" skills
* find other people who are interested in this project
<<<
在你的 [[TiddlyWiki]] 中嵌入 [[Reveal.js|https://revealjs.com]] 演示文稿。
{{!!url}}
<<<
reveal.js enables you to create beautiful interactive slide decks using HTML.
With the power of TiddlyWiki and Reveal.js one can…
* …make an interactive tiddler with fancy animations
* …Make it go full screen for professional keynote
* …Distribute the slideshow with examples and additional resources in one HTML file
<<<
Google Chrome 和 Mozilla Firefox 的附加组件,可以平顺 TiddlyWiki 内置的 [[HTML5 备用保存模块|Saving with the HTML5 fallback saver]]的一些摩擦,正确设置后,与使用 TiddlyFox 一样简单。
{{!!url}}
在 OS X 上设置 [[TiddlyWiki on Node.js]] 的详细的描述。
{{!!url}}
<<<
For a new job, I decided to set up a personal wiki to keep notes. I wanted to keep it simple, meeting these requirements:
* All the data is in a Dropbox folder (so it can be automatically synced between machines)
* It must support Markdown syntax
After looking at the options, I settled on TiddlyWiki. I've used "classic TiddlyWiki" before, and liked its simplicity, but I was always a little annoyed with the weird steps you have to go through to save changes. The new version of TiddlyWiki includes support for running it as a real HTTP server, so you can use it just like an online wiki.
But it took me a couple of hours to figure out how to set that up. The TiddlyWiki documentation is not clear ("not clear" is a euphemistic way of saying "terrible"). So, I've written up these instructions in the hope it will spare somebody else all the frustration I had.
<<<
Stephen Kimmel 的插件搜集,包括大量额外的编辑器工具栏按钮。
{{!!url}}
<<<
In keeping with the general spirit of the TiddlyWiki community, ie, you develop something useful and/or potentially interesting you share it with others, I'm sharing some of the plugins I've developed to go with the new Editor Toolbar. You'll find them and a more extensive discussion of what each does at http://skplugins.tiddlyspot.com/
<<<
"Slides and Stories" 是一个存储库的,为科学研究且呈现和发布结果的 TW 优化工具的存储库。
{{!!url}}
<<<
!~SlidesnStories
...is a tool to save and reload sets of Tiddlers. This is already working, The aim is to develop a mechanism to transform these into instant slideshows.
!~MetaTabs
is a tool which gives you the possibility to attach and show specific information in tabs at the bottom of each Tiddler: ideas, notes, tasks, stories and presentations, comments, annotations and footnotes. <br>
It is inspired by ~MagicTabs and Tiddlyscholar by Alberto Molina Pérez, which are very elaborated tools that alas do not seem to be in active development any more.
I wanted to change the behaviour in some ways. For example I wanted show tabs only if they have content.
!...furthermore there is
* an export-plugin,
* a footnote-plugin,
* and a plugin to rearrange Tiddlers in the ~StoryRiver
<<<
~TiddlyWiki 的改编版,非常适合用作笔记本系统。
{{!!url}}
<<<
Stroll is a TiddlyWiki adaptation imitating certain features of Roam to help users easily see connections between their notes and navigate between them. Features include:
* bi-directional links,
* autocompletion when linking,
* renaming of links upon changing tiddler titles,
* side-by-side editing of multiple notes.
<<<
由 Tobias Beer 精心策划的一系列精美的技巧汇集。它实际上是一些网站的集合,其中子网站专用主题于诸如筛选器 (http://tobibeer.github.io/tw/filters/)。
{{!!url}}
<<<
A collection of references and sandbox for testing concepts around TiddlyWiki 5...
<<<
具有熟悉的外观和感觉的 TiddlyWiki 的看板实现(见[[演示|https://ibnishak.github.io/Tesseract/projects/tekan/]])。
{{!!url}}
<<<
This is Tekan, a TW based kanban. The easiest way to know tekan is to use it. So let us begin, shall we?
<<<
~TiddlyWiki 的改编版,非常适合用作笔记本系统。
{{!!url}}
<<<
Tiddly Research is a free and local note-taking environment based on TiddlyWiki
Core Features:
* Bidirectional note linking on multiple levels
* Tags
* Linked references
* Unlinked references
* Transclusions
* Bullet point based hierarchical note taking structure
* Integration with the spaced repetition flashcards tool Anki
* TODOs
* and more
<<<
TiddlyServer 是一个特殊用途桌面应用程序,旨在便于管理多个 TiddlyWiki 的实例运行为服务器。它不需要接入互联网访问维基。
{{!!url}}
<<<
TiddlyServer can import both TiddlyWiki files and TiddlyFolder wikis. For each wiki, you specify a prefix to serve it with and the source to import from. It will copy the wikis to its own internal store and begin serving them up at http://localhost:8080/{prefix}/. The export button for each wiki will convert it to a single file wiki.
<<<
由 TiddlyWiki 的中文译者 Bram Chen 翻译的 tiddlywiki.com 简体中文版文档。
{{!!url}}
由 TiddlyWiki 的中文译者 Bram Chen 翻译的 tiddlywiki.com 正体中文版文档。
{{!!url}}
一个为严谨的、学术性笔记的定制版的 TiddlyWiki 早期版本。
{{!!url}}
<<<
TiddlyWiki for Scholars is a personal customization of TiddlyWiki 5.0.13-beta I made for note-taking from readings, but it can be useful for other purposes. The idea behind this adaptation is to show and to allow creating relevant data related to the current tiddler without leaving the tiddler.
<<<
关于 ~TiddlyWiki 的知识网络。
{{!!url}}
<<<
Interconnected with the visual taxonomy at every node:
http://debategraph.org/Stream.aspx?nid=457381&vt=bubble&dc=focus
TWKN will be transferred into TWederation/~TiddlyMap format as soon as I am convinced in reliable and secure versioning and multi-user operation in TW format.
Your assistance and support would be highly appreciated.
<<<
开发人员编写 TiddlyWiki 插件的说明和技巧 - 包括 [[TWExe|https://github.com/welford/twexe]],这是一种用于运行 Windows 脚本和可运行档的小工具。
{{!!url}}
一系列文章,涵盖与 Fargo、Font Awesome 和 Google Calendar 的集成,以及管理任务列表的技巧。
{{!!url}}
<<<
I have become a regular user of TiddlyWiki and have become so accustomed to using Font Awesome icons in Fargo that I wanted to incorporate the icons into my wikis as well.
<<<
一个 ~TiddlyWiki 的已知插件、教学、布景主题,以及其他有用工具的主题索引。
{{!!url}}
目前为止索引的一些主题包括:
* Background images and background colors
* Breadcrumbs
* Business - examples
* CSS / Styles, general
* Calendars, dates and timelines
* Checklists
* Collaboration
* Color palettes
* Colors
* Data visualizations
* Developer / advanced tools
* Diplay tiddlers horizontally
* Dropdowns
* Educational
* External files
* Fields
* Fonts
* Fun and games
* Home and lifestyle
* IFrames and embedding media
* Image galleries, modals and lightboxes
* Images, icons, emojis
* Importing and exporting between TiddlyWiki files
* Includes scaffolding within a tiddler, dragging to reorder tiddlers, choosing the number of columns
* Interfacing with, importing and exporting to and from other formats
* Knowledge bases, dictionaries and glossaries
* Layout/UI
* Lightboxes
* Links, linking
* Lists and filters
* Maps and geography
* Masonry, scaffolding
* Math
* ~MindMapping
* Mobile tools
* Music and sound
* Navigation
* node.js
* Note-taking
* Open the "filter" tab
* Partially hidden tiddlers
* Personal websites (examples)
* Presentations and slideshows
* Printing
* Project management
* Publishing and hosting TiddlyWikis on the web
* Searching tools
* Security and backup tools
* Social media, sharing, comments
* Spreadsheets and math
* Startup
* Sticky titles
* Story and screenplay creation
* Table of contents
* Tables, charts and graphs (cf data visualizations)
* Tabs
* Tags, tagging
* Task management and productivity - to do lists
* Themes
* Understanding TiddlyWiki
* Writing and editing
一个在 Reddit 上的 TiddlyWiki5 论坛。
{{!!url}}
<<<
A ~TiddlyWiki5 forum on Reddit. As of 2016, it claims to have the most up-to-date list of plugins available for TW5.
<<<
Ton Gerner 收集了大量的客制化和调整。
{{!!url}}
<<<
I am a longtime user of TiddlyWiki Classic and still use it daily since you can't do everything in TiddlyWiki 5 (yet) ;)
I started experimenting with TW5 at the end of September 2013 (alpha10).
Since I missed a few things in the layout I got used to in TiddlyWiki Classic 1, I started with modifying the layout of TW5.
To share my knowledge, I made a few guides about these 'modifications'.
The guides started as a non-linear personal web notebook (yeah, the subtitle of TiddlyWiki!). I started experimenting with layout things and used TW5 to document my experiments.
<<<
关于使用 [[TiddlyWiki on Node.js]] 的丰富提示、技巧和注意事项:
{{!!url}}
<<<
TiddlyWiki is different from other wikis because of its principle of dynamically customizeable "storyline" based on tiddlers as basic units of information. That is, the user "composes" their own version of the webpage by clicking on tiddler links, which add tiddlers to the page in order to compose a storyline.
The Node.js implementation in TiddlyWiki5 adds all the advantages of flat-file markup language based type of site. This makes TiddlyWiki an excellent alternative to flat-file based CMS/webpage/blog authoring systems for the web.
Also very cool is the treatment of tags as menus everywhere.
<<<
> ~TiddlyWiki 的大量图标集合。
{{!!url}}
Stephan Hradek 持续添加的技巧、教学和其他资源的目录。Stephan 还开发了几个插件和宏,你可以在 http://tiddlystuff.tiddlyspot.com/ 找到。
{{!!url}}
<<<
Some things in TiddlyWiki seem like Magic. As my preferred nick is Skeeve, I felt that TW5 Magick is a proper name for this collection of some of the "magic" tricks one can do with TiddlyWiki.
<<<
TiddlyWiki5 的一个 LaTeX 替代插件,比 [[KaTeX|KaTeX Plugin]] 支持更广泛的 LaTeX 命令,虽然不若 MathJax 那么广泛。
{{!!url}}
<<<
This plugin provides LaTeX support in TiddlyWiki5, using the [[TeXZilla|https://github.com/fred-wang/TeXZilla]] latex parser to generate MathML.
Only Firefox and Safari support MathML at the moment, so the plugin is only useful if you're using one of these browsers. It might be possible to combine this plugin with MathJax to convert MathML to something that other browsers can understand, e.g. HTML+CSS, but I haven't tried this.
<<<
在 [[BiblioBox|http://bibliobox.net/]] ([[PirateBox|http://daviddarts.com/piratebox/]] 移动通信与文件分享系统的变形) 使用 TiddlyWiki 的法语指南。
{{!!url}}
<<<
I've known TiddlyWiki since its beginning in 2004. For personal or professional needs, I used it regularly for notepad staff in 2007 and 2012. But I admit I ignored the tool during the past two years. And then I said yesterday: but why not put TiddlyWiki on a BiblioBox? Because it is a single HTML file with javascript. In addition I knew the existence of a server version for saving online amendments.
<<<
//Hand optimised from a translation by Google Translate//
利用元素之间的空白的漂亮布景主题。
{{!!url}}
关于 ~TiddlyWiki 5 的测试概念的参考搜集...
{{!!url}}
<<<
This is PMario's playground with ramblings about ~TiddlyWiki and related stuff.
It basically is a "jump off" page to various ~TiddlyWiki sites, that show editions, themes and plugins.
<<<
Matabele 的时尚且纯净的个人工作管理系统。
{{!!url}}
<<<
This is my work in progress version of TW5, incorporating various features and ideas as and when they intrigue me. To grab any feature you may wish to try, drag the listed tiddlers across to the dropzone of an empty TiddlyWiki 5.0.10-beta
<<<
[[Jamal Wills|http://zemox.tiddlyspot.com]] 在 TiddlyWiki 中嵌入交互式 3D 图形的一个实验,是一个基于 [[X3DOM|https://www.x3dom.org]] 的开源 JavaScript 程序库。
{{!!url}}
\define tw-card-template(bordercolor:"")
<div class="tc-card" style="border-top: 5px solid $bordercolor$;">
<$link>
<div class="tc-card-title"><$transclude field="caption"><$view field="title"/></$transclude></div>
<div class="tc-card-author"> <$list filter="[is[current]has[community-author]]">by {{!!community-author}}</$list></div>
<p><$view field="description"/></p>
</$link>
</div>
\end
<$macrocall $name="tw-card-template" bordercolor={{!!color}}/>
\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock
.tc-double-spaced-list li {
padding-bottom: .5em;
padding-top: .5em;
}
.tc-link-info-item {
border: 1px solid #ebefcd;
padding: 5px 10px;
margin-bottom: 10px;
background: <<colour code-background>>;
font-size: 0.8em;
line-height: 1.2;
}
.tc-link-info-item h1 {
font-weight: 500;
font-size: 16px;
}
.tc-scrollable-demo {
border: 1px solid <<colour message-border>>;
background-color: <<colour message-background>>;
padding: 1em;
height: 400px;
position: relative;
overflow: auto;
}
.tc-improvement-banner {
font-size: 0.7em;
background: #fcc;
padding-left: 5px;
margin-top: 6px;
margin-bottom: 12px;
<<box-shadow "2px 2px 2px rgba(0,0,0,0.4)">>
}
@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {
.tc-improvement-banner {
}
}
@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {
.tc-improvement-banner {
margin-right: -53px;
margin-left: -53px;
}
.tc-improvement-banner:before {
display: block;
position: absolute;
width: 0;
height: 0;
content: " ";
margin-left: -5px;
margin-top: -10px;
border-top: 5px solid transparent;
border-left: 5px solid transparent;
border-right: 5px solid #C07E7E;
border-bottom: 5px solid #C07E7E;
}
}
.tc-improvement-banner svg {
width: 1em;
height: 1em;
}
.tc-wrapper-flex {
display: flex;
}
.tc-saving-sidebar {
margin: 0;
padding: 0;
min-width: 200px;
overflow: auto;
}
.tc-saving-sidebar a {
display: block;
}
@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {
.tc-wrapper-flex {
flex-direction: column;
}
.tc-saving-sidebar {
width: 100%;
height: auto;
}
.tc-saving-sidebar a {
float: left;
}
}
.tc-saving-sidebar-category {
margin-bottom: 10px;
}
.tc-saving-sidebar-category-title {
font-weight: bold;
margin-bottom: 5px;
font-size: 16px;
}
.tc-saving-sidebar-category-item {
margin-left: 10px;
}
.tc-card {
margin: 15px;
padding: 10px 20px;
border-radius: 10px;
border-top: 5px solid #45D3D3;
box-shadow: 0 8px 17px -8px #A3A5AE;
background-color: #FFF;
width: 200px;
transition: box-shadow 0.3s ease-in-out;
font-size: 13px;
line-height: 18px;
}
.tc-card:hover {
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
}
.tc-card:hover .tc-card-title {
color: #1462ff;
}
.tc-card-title {
text-align: center;
font-size: 1.2em;
font-weight: 600;
transition: color 0.2s ease-in-out;
padding: 10px 0;
}
.tc-card-author {
text-align: right;
}
.tc-card p {
height: 67px;
overflow: hidden;
margin: 0;
padding: 13px 0;
}
.tc-card a {
color: #222;
}
.tc-card a:hover {
text-decoration:none;
}
.tc-card a:active, .tc-card a:focus, .tc-btn-download:active, .tc-btn-download:focus{
outline: none;
}
div.content {
padding: 1px 16px;
display: flex;
flex-wrap: wrap;
}
.tc-btn-download {
width: 180px;
padding: 10px;
border-radius: 5px;
background: #1462ff;
border-radius: 5px;
border: none;
box-shadow: 0 2px 2px 0 #4a74c9;
overflow: hidden;
cursor: pointer;
font-size: 1.2em;
line-height: 1.4em;
color: #fff;
fill: #fff;
}
.tc-btn-download:active {
background: #1475ff;
}
|>| 内核构建信息 |h
|!源码库 |https://github.com/BramChen/TiddlyWiki5.git |
|!分支 |[[master|https://github.com/BramChen/TiddlyWiki5/tree/master]] |
|!提交 |[[056e654|https://github.com/BramChen/TiddlyWiki5/commit/056e6541a1e4e96b8ab03def25300a1891311e37]] |
|!提交时间 |2021年06月03日 周四, 04:47:28 (+0800) |
{{$:/language/OfficialPluginLibrary/Hint}}
{"$:/favicon.ico":"zh-Hans/system/favicon.ico","Motovun Jack.jpg":"images/Motovun Jack.jpg","Motovun Jack.svg":"images/Motovun Jack.svg","New Release Banner":"images/New Release Banner.png","$:/language/Docs/Types/text/x-markdown":"languages/zh-Hant/docs_type_markdown.tid","$:/languages/zh-Hans/zh-Hans/readme":"languages/zh-Hans/readme.zh-Hans.tid","$:/languages/zh-Hans/zh-Hant/readme":"languages/zh-Hans/readme.zh-Hant.tid","$:/languages/zh-Hant/zh-Hans/readme":"languages/zh-Hant/readme.zh-Hans.tid","$:/languages/zh-Hant/zh-Hant/readme":"languages/zh-Hant/readme.zh-Hant.tid","$:/plugins/tiddlywiki/bibtex/zh-Hans/readme":"Plugins.zh-Hans/bibtex/doc/readme.tid","$:/plugins/tiddlywiki/browser-sniff/zh-Hans/readme":"Plugins.zh-Hans/browser-sniff/readme.tid","$:/plugins/tiddlywiki/browser-sniff/zh-Hans/usage":"Plugins.zh-Hans/browser-sniff/usage.tid","config":"Plugins.zh-Hans/config.tid","$:/config/plugins/tiddlywiki/consent-banner/zh-Hans/greeting-message":"Plugins.zh-Hans/consent-banner/greeting-message.tid","contents":"Plugins.zh-Hans/contents.tid","docs":"Plugins.zh-Hans/docs.tid","$:/plugins/tiddlywiki/evernote/zh-Hans/docs":"Plugins.zh-Hans/evernote/docs.tid","$:/plugins/tiddlywiki/evernote/zh-Hans/readme":"Plugins.zh-Hans/evernote/readme.tid","example":"Plugins.zh-Hans/example.tid","examples":"Plugins.zh-Hans/examples.tid","history":"Plugins.zh-Hans/history.tid","$:/plugins/tiddlywiki/innerwiki/template":"Plugins.zh-Hans/innerwiki/template.tid","license":"Plugins.zh-Hans/license.tid","$:/plugins/tiddlywiki/menubar/zh-Hans/config":"Plugins.zh-Hans/menubar/config.tid","$:/plugins/tiddlywiki/menubar/items/contents":"Plugins.zh-Hans/menubar/items/contents.tid","$:/plugins/tiddlywiki/menubar/items/hamburger":"Plugins.zh-Hans/menubar/items/hamburger.tid","$:/plugins/tiddlywiki/menubar/items/pagecontrols":"Plugins.zh-Hans/menubar/items/pagecontrols.tid","$:/plugins/tiddlywiki/menubar/items/search":"Plugins.zh-Hans/menubar/items/search.tid","$:/plugins/tiddlywiki/menubar/items/server":"Plugins.zh-Hans/menubar/items/server.tid","$:/plugins/tiddlywiki/menubar/items/sidebar":"Plugins.zh-Hans/menubar/items/sidebar.tid","$:/plugins/tiddlywiki/menubar/items/topleftbar":"Plugins.zh-Hans/menubar/items/topleftbar.tid","$:/plugins/tiddlywiki/menubar/items/toprightbar":"Plugins.zh-Hans/menubar/items/toprightbar.tid","$:/plugins/tiddlywiki/qrcode/zh-Hans/readme":"Plugins.zh-Hans/qrcode/doc/readme.tid","$:/plugins/tiddlywiki/qrcode/zh-Hans/usage":"Plugins.zh-Hans/qrcode/doc/usage.tid","$:/plugins/tiddlywiki/qrcode/zh-Hans/MakeContactQR":"Plugins.zh-Hans/qrcode/MakeContactQR.tid","$:/plugins/tiddlywiki/qrcode/zh-Hans/MakeGenericQR":"Plugins.zh-Hans/qrcode/MakeGenericQR.tid","$:/plugins/tiddlywiki/qrcode/zh-Hans/MakeWifiQR":"Plugins.zh-Hans/qrcode/MakeWifiQR.tid","$:/plugins/tiddlywiki/railroad/zh-Hans/example-source":"Plugins.zh-Hans/railroad/doc/example-source.tid","$:/plugins/tiddlywiki/railroad/zh-Hans/example":"Plugins.zh-Hans/railroad/doc/example.tid","$:/plugins/tiddlywiki/railroad/zh-Hans/readme":"Plugins.zh-Hans/railroad/doc/readme.tid","$:/plugins/tiddlywiki/railroad/zh-Hans/syntax-string":"Plugins.zh-Hans/railroad/doc/syntax-string.tid","$:/plugins/tiddlywiki/railroad/zh-Hans/syntax":"Plugins.zh-Hans/railroad/doc/syntax.tid","$:/plugins/tiddlywiki/railroad/zh-Hans/usage":"Plugins.zh-Hans/railroad/doc/usage.tid","readme":"Plugins.zh-Hans/readme.tid","$:/plugins/tiddlywiki/savetrail/zh-Hans/readme":"Plugins.zh-Hans/savetrail/readme.tid","$:/plugins/tiddlywiki/savetrail/zh-Hans/settings":"Plugins.zh-Hans/savetrail/settings.tid","settings":"Plugins.zh-Hans/settings.tid","syntax":"Plugins.zh-Hans/syntax.tid","usage":"Plugins.zh-Hans/usage.tid","$:/config/plugins/tiddlywiki/consent-banner/zh-Hant/greeting-message":"Plugins.zh-Hant/consent-banner/greeting-message.tid","$:/key-test":"zh-Hans/$__key-test.tid","$:/key-test/action":"zh-Hans/$__key-test_action.tid","About":"zh-Hans/about/About.tid","Acknowledgements":"zh-Hans/about/Acknowledgements.tid","Contributors":"zh-Hans/about/Contributors.tid","Developers":"zh-Hans/about/Developers.tid","History of TiddlyWiki":"zh-Hans/about/History of TiddlyWiki.tid","Philosophy of Tiddlers":"zh-Hans/about/Philosophy of Tiddlers.tid","WikiBuildInfo":"zh-Hans/about/WikiBuildInfo.tid","AllTiddlers":"zh-Hans/AllTiddlers.tid","BuildCommand":"zh-Hans/commands/BuildCommand.tid","ClearPasswordCommand":"zh-Hans/commands/ClearPasswordCommand.tid","Commands":"zh-Hans/commands/Commands.tid","DeleteTiddlersCommand":"zh-Hans/commands/DeleteTiddlersCommand.tid","EditionsCommand":"zh-Hans/commands/EditionsCommand.tid","FetchCommand":"zh-Hans/commands/FetchCommand.tid","HelpCommand":"zh-Hans/commands/HelpCommand.tid","ImportCommand":"zh-Hans/commands/ImportCommand.tid","InitCommand":"zh-Hans/commands/InitCommand.tid","ListenCommand":"zh-Hans/commands/ListenCommand.tid","LoadCommand":"zh-Hans/commands/LoadCommand.tid","MakeLibraryCommand":"zh-Hans/commands/MakeLibraryCommand.tid","NamedCommandParameters":"zh-Hans/commands/NamedCommandParameters.tid","OutputCommand":"zh-Hans/commands/OutputCommand.tid","PasswordCommand":"zh-Hans/commands/PasswordCommand.tid","RenderCommand":"zh-Hans/commands/RenderCommand.tid","RenderTiddlerCommand":"zh-Hans/commands/RenderTiddlerCommand.tid","RenderTiddlersCommand":"zh-Hans/commands/RenderTiddlersCommand.tid","SaveCommand":"zh-Hans/commands/SaveCommand.tid","SaveTiddlerCommand":"zh-Hans/commands/SaveTiddlerCommand.tid","SaveTiddlersCommand":"zh-Hans/commands/SaveTiddlersCommand.tid","SaveWikiFolderCommand":"zh-Hans/commands/SaveWikiFolderCommand.tid","ServerCommand":"zh-Hans/commands/ServerCommand.tid","SetFieldCommand":"zh-Hans/commands/SetFieldCommand.tid","UnpackPluginCommand":"zh-Hans/commands/UnpackPluginCommand.tid","VerboseCommand":"zh-Hans/commands/VerboseCommand.tid","VersionCommand":"zh-Hans/commands/VersionCommand.tid","\"Notizen mit TiddlyWiki systemübergreifend nutzen\" by Michael Sonntag":"zh-Hans/community/articles/_Notizen mit TiddlyWiki systemubergreifend nutzen_ by Michael Sonntag.tid","\"Setting Up a Personal TiddlyWiki Server on OS X\" by Kris Johnson":"zh-Hans/community/articles/_Setting Up a Personal TiddlyWiki Server on OS X_ by Kris Johnson.tid","Articles":"zh-Hans/community/Articles.tid","Community Editions":"zh-Hans/community/Community Editions.tid","Community Links Aggregator":"zh-Hans/community/Community Links Aggregator.tid","Community Palettes":"zh-Hans/community/Community Palettes.tid","Community Plugins":"zh-Hans/community/Community Plugins.tid","Community Themes":"zh-Hans/community/Community Themes.tid","Community":"zh-Hans/community/Community.tid","Contributing":"zh-Hans/community/Contributing.tid","Contributor License Agreement":"zh-Hans/community/Contributor License Agreement.tid","\"Drift - Collect, Organise, Grow.\" by Tony K":"zh-Hans/community/editions/Drift by Tony K.tid","\"Stroll - a Roam-like experience\" by David Gifford":"zh-Hans/community/editions/Stroll by David Gifford.tid","\"TiddlyResearch\" by Kebi":"zh-Hans/community/editions/TiddlyResearch by Kebi.tid","\"Cardo - Task and Project Management Wiki\" by David Szego":"zh-Hans/community/editions/_Cardo-A Task and Project Management Wiki_ by David_Szego.tid","\"Noteself\" by Danielo Rodríguez":"zh-Hans/community/editions/_Noteself_ by Danielo Rodriguez.tid","\"A Thesis Notebook\" by Alberto Molina":"zh-Hans/community/examples/A Thesis Notebook.tid","Interactive Git Documentation by Devin Weaver":"zh-Hans/community/examples/GitFixUm.tid","Obadiah TOC":"zh-Hans/community/examples/Obadiah.tid","PESpot Lesson Planner by Patrick Detzner":"zh-Hans/community/examples/PESpot Lesson Planner by Patrick Detzner.tid","\"PETTIL - Forth for the Commodore PET\" by Charlie Hitselberger":"zh-Hans/community/examples/PETTIL.tid","\"Reveal.js\" by Devin Weaver":"zh-Hans/community/examples/Reveal.js by Devin Weaver.tid","Simple Zork-like Game by Jed Carty":"zh-Hans/community/examples/Simple Zork like Game.tid","TriTarget.org by Devin Weaver":"zh-Hans/community/examples/TriTarget.org by Devin Weaver.tid","\"Lucky Sushi\" online shop by sini-Kit":"zh-Hans/community/examples/_Lucky Sushi_ online shop by sini-Kit.tid","Examples":"zh-Hans/community/Examples.tid","Forums":"zh-Hans/community/Forums.tid","HelpingTiddlyWiki":"zh-Hans/community/HelpingTiddlyWiki.tid","Improving TiddlyWiki Documentation":"zh-Hans/community/Improving TiddlyWiki Documentation.tid","Latest":"zh-Hans/community/Latest.tid","Meetups":"zh-Hans/community/Meetups.tid","Other Resources":"zh-Hans/community/Other Resources.tid","OXTWIG":"zh-Hans/community/OXTWIG.tid","\"Dracula - a dark palette for TiddlyWiki\" by SlyBouhafs & zenorocha":"zh-Hans/community/palettes/Dracula for tiddlywiki.tid","\"JD's palettes\" by JD":"zh-Hans/community/palettes/palletes by JD.tid","Ace Editor Plugin by Joerg Plewe":"zh-Hans/community/plugins/Ace Editor Plugin by Joerg Plewe.tid","\"BJTools\" by buggyj":"zh-Hans/community/plugins/BJHacks.tid","datepicker plugin based on Pikaday, by kixam":"zh-Hans/community/plugins/datepicker based on Pikaday.tid","Disqus comments plugin by bimlas":"zh-Hans/community/plugins/Disqus comments plugin by bimlas.tid","\"Encrypt single tiddler plugin\" by Danielo Rodriguez":"zh-Hans/community/plugins/Encrypt single tiddler plugin.tid","Favorites by Mohammad":"zh-Hans/community/plugins/Favorites by Mohammad.tid","Full Text Search Plugin by Rob Hoelz":"zh-Hans/community/plugins/Full Text Search Plugin by Rob Hoelz.tid","\"GSD5\" by Roma Hicks":"zh-Hans/community/plugins/GSD5.tid","IndexedDB Plugin by Andreas Abeck":"zh-Hans/community/plugins/IndexedDB Plugin by Andreas Abeck.tid","Json Mangler plugin by Joshua Fontany":"zh-Hans/community/plugins/Json Mangler plugin by Joshua Fontany.tid","Kin filter operator by bimlas":"zh-Hans/community/plugins/Kin filter operator by bimlas.tid","Kookma Plugin Library by Mohammad":"zh-Hans/community/plugins/Kookma Plugin Library by Mohammad.tid","Leaflet maps plugin by Sylvain Comte":"zh-Hans/community/plugins/Leaflet_maps_plugin_by_Sylvain_Comte.tid","Locator plugin by bimlas":"zh-Hans/community/plugins/Locator plugin by bimlas.tid","MathJax Plugin by Martin Kantor":"zh-Hans/community/plugins/MathJax Plugin by Martin Kantor.tid","Plugins by TheDiveO":"zh-Hans/community/plugins/Plugins by TheDiveO.tid","rboue's plugins for TiddlyWiki":"zh-Hans/community/plugins/rboue's plugins for TiddlyWiki.tid","Refnotes by Mohammad":"zh-Hans/community/plugins/Refnotes by Mohammad.tid","Searchwikis by Mohammad":"zh-Hans/community/plugins/Searchwikis by Mohammad.tid","Shiraz by Mohammad":"zh-Hans/community/plugins/Shiraz by Mohammad.tid","Slider by Mohammad":"zh-Hans/community/plugins/Slider by Mohammad.tid","Tiddler Commander by Mohammad":"zh-Hans/community/plugins/Tiddler Commander by Mohammad.tid","TiddlyClip by buggyjay":"zh-Hans/community/plugins/TiddlyClip by buggyjay.tid","TiddlyMap Plugin by Felix Küppers":"zh-Hans/community/plugins/TiddlyMap by Felix Kuppers.tid","Tiddlyshow by Mohammad":"zh-Hans/community/plugins/Tiddlyshow by Mohammad.tid","\"TiddlyWiki for Scholars\" by Alberto Molina":"zh-Hans/community/plugins/TiddlyWiki for Scholars.tid","Timelines by Mohammad":"zh-Hans/community/plugins/Timelines by Mohammad.tid","Tinka by Andreas Hahn":"zh-Hans/community/plugins/Tinka by Andreas Hahn.tid","Todolist by Mohammad":"zh-Hans/community/plugins/Todolist by Mohammad.tid","Trashbin by Mohammad":"zh-Hans/community/plugins/Trashbin by Mohammad.tid","Utility by Mohammad":"zh-Hans/community/plugins/Utility by Mohammad.tid","vis.js Timeline by emkay, revived by kixam":"zh-Hans/community/plugins/vis.js Timeline.tid","\"JD Mobile Layout plugin\" by JD":"zh-Hans/community/plugins/_JD Mobile Layout plugin_ by JD.tid","\"Mal's Sandbox\" by Mal":"zh-Hans/community/plugins/_Mal's Sandbox_ by Mal.tid","\"SK Plugins\" by Stephen Kimmel":"zh-Hans/community/plugins/_SK_Plugins_ by Stephen Kimmel.tid","\"Slides and Stories\" by Jan":"zh-Hans/community/plugins/_Slides and Stories_ by Jan.tid","\"Tekan: Kanban that stays with you\" by Riz":"zh-Hans/community/plugins/_Tekan_ Kanban that stays with you_ by Riz.tid","\"TW5-TeXZilla\" plugin by Joe Renes":"zh-Hans/community/plugins/_TW5-TeXZilla_ plugin by Joe Renes.tid","\"BrainTest - tools for a digital brain\" by Danielo Rodriguez":"zh-Hans/community/resources/BrainTest.tid","Code styles and auto format settings for IDEs":"zh-Hans/community/resources/Code styles and auto format settings for IDEs.tid","\"CouchDB Adaptor\" by William Shallum":"zh-Hans/community/resources/CouchDB Adaptor.tid","\"Filter Examples\" by Tobias Beer":"zh-Hans/community/resources/Filter Examples by Tobias Beer.tid","\"Font Awesome 5 Free SVGs for TiddlyWiki\" by morosanuae":"zh-Hans/community/resources/Font Awesome 5 Free SVGs for TiddlyWiki by morosanuae.tid","\"Gospel Bubbles\" by Rev. David Gifford":"zh-Hans/community/resources/Gospel_Bubbles_by_Rev_David_Gifford.tid","\"Grok TiddlyWiki\" by Soren Bjornstad":"zh-Hans/community/resources/Grok TiddlyWiki by Soren Bjornstad.tid","Projectify by Nicolas Petton":"zh-Hans/community/resources/Projectify by Nicolas Petton.tid","RegExp in Tiddlywiki by Mohammad":"zh-Hans/community/resources/RegExp in Tiddlywiki by Mohammad.tid","Semantic Colors by Mohammad":"zh-Hans/community/resources/Semantic Colors by Mohammad.tid","\"TB5 - a pocket full of tips\" by Tobias Beer":"zh-Hans/community/resources/TB5 a pocket full of tips by Tobias Beer.tid","TiddlyChrome by Arlen Beiler":"zh-Hans/community/resources/TiddlyChrome by Arlen Beiler.tid","TiddlyDrive Add-on for Google Drive by Joshua Stubbs":"zh-Hans/community/resources/TiddlyDrive Add-on for Google Drive by Joshua Stubbs.tid","TiddlyServer by Arlen Beiler":"zh-Hans/community/resources/TiddlyServer by Arlen Beiler.tid","TiddlyWiki extensions for Sublime Text 3 by roma0104":"zh-Hans/community/resources/TiddlyWiki extensions for Sublime Text 3 by roma0104.tid","TiddlyWiki extensions for ViM":"zh-Hans/community/resources/TiddlyWiki extensions for ViM.tid","\"TiddlyWiki Notes\" by James Anderson":"zh-Hans/community/resources/TiddlyWiki Notes.tid","\"TiddlyWiki Posts\" by Jeffrey Kishner":"zh-Hans/community/resources/TiddlyWiki Posts.tid","TiddlyWiki Video Tutorials by Francis Meetze":"zh-Hans/community/resources/TiddlyWiki Video Tutorials by Francis Meetze.tid","\"TiddlyWiki 舞 (简体中文)\" by Bram Chen":"zh-Hans/community/resources/TiddlyWiki-zh-hans.tid","\"TiddlyWiki 舞\" by Bram Chen":"zh-Hans/community/resources/TiddlyWiki-zh.tid","\"TiddlyWiki5 Playground\" by Ton Gerner":"zh-Hans/community/resources/TiddlyWiki5 Playground.tid","\"TiddlyWiki5^2 documenting while learning TiddlyWiki5\" by Iannis Zannos":"zh-Hans/community/resources/TiddlyWiki5 Squared by Iannis Zannos.tid","\"TW Icons\" by morosanuae":"zh-Hans/community/TW Icons by morosanuae.tid","TW-Scripts by Mohammad":"zh-Hans/community/resources/TW-Scripts by Mohammad.tid","\"TW5 Magick\" by Stephan Hradek":"zh-Hans/community/resources/TW5 Magick.tid","TW5-firebase: TiddlyWiki5 for Google Firebase by Peter Neumark":"zh-Hans/community/resources/TW5-firebase TiddlyWiki5 for Google Firebase by Peter Neumark.tid","TW5-SingleExecutable by Jed Carty":"zh-Hans/community/resources/TW5-SingleExecutable_by_Jed_Carty.tid","TWaddle by Matias Goldman":"zh-Hans/community/resources/TWaddle by Matias Goldman.tid","TWCommunitySearch":"zh-Hans/community/resources/TWCommunitySearch.tid","Twexe: Single File Tiddlywiki5 executable":"zh-Hans/saving/Twexe_ Single File Tiddlywiki5 executable.tid","twproxy by Steve Gattuso":"zh-Hans/community/resources/twproxy by Steve Gattuso.tid","Widdly by Opennota":"zh-Hans/community/resources/Widdly by Opennota.tid","\"Wikilabs\" by PMario":"zh-Hans/community/resources/Wikilabs by PMario.tid","\"Wills Q&D gTD\" by Matabele":"zh-Hans/community/resources/Wills QnD gTD.tid","\"ATWiki\" by Lamusia Project":"zh-Hans/community/resources/_ATWiki_ by Lamusia Project.tid","\"Dropboard\" by Reid Gould":"zh-Hans/community/resources/_Dropboard_ by Reid Gould.tid","\"Dynamic Tables\" by Jed Carty":"zh-Hans/community/resources/_Dynamic Tables_ by Jed Carty.tid","\"file-backups\" Extension for Firefox by pmario":"zh-Hans/community/resources/_file-backups_ Extension Firefox by pmario.tid","\"Hacks\" by Thomas Elmiger":"zh-Hans/community/resources/_Hacks_ by Thomas Elmiger.tid","\"In My Socks\" by Jed Carty":"zh-Hans/community/resources/_In My Socks_ by Jed Carty.tid","\"MathCell\" by Stephen Kimmel":"zh-Hans/community/resources/_MathCell_ by Ste Wilson.tid","\"muritest\" by Simon Huber":"zh-Hans/community/resources/_muritest_ by Simon Huber.tid","\"savetiddlers\" Extension for Chrome and Firefox by buggyj":"zh-Hans/community/resources/_savetiddlers_ Extension for Chrome and Firefox by buggyj.tid","\"TiddlyServer\" by Matt Lauber":"zh-Hans/community/resources/_TiddlyServer_ by Matt Lauber.tid","\"TiddlyWiki Knowledge Network\" by Dmitry Sokolov":"zh-Hans/community/resources/_TiddlyWiki Knowledge Network_ by Dmitry Sokolov.tid","\"TiddlyWiki Toolmap\" by David Gifford":"zh-Hans/community/resources/_TiddlyWiki Toolmap_ by David Gifford.tid","\"TiddlyWiki5 Forum on Reddit\" by Riz":"zh-Hans/community/resources/_TiddlyWiki5 Forum on Reddit_ by Riz.tid","Timimi 为 Riz 开发的浏览器附加组件和本机伺服程序":"zh-Hans/community/resources/_Timimi_ Extension and executable by Riz.tid","\"X3DOM for TiddlyWiki 5\" by Jamal Wills":"zh-Hans/community/resources/_X3DOM for TiddlyWiki 5_ by Jamal Wills.tid","Resources":"zh-Hans/community/Resources.tid","Signing the Contributor License Agreement":"zh-Hans/community/Signing the Contributor License Agreement.tid","\"Mono theme\" by JD":"zh-Hans/community/themes/Mono theme by JD.tid","\"Notebook theme\" by Nicolas Petton":"zh-Hans/community/themes/Notebook theme by Nicolas Petton.tid","\"Whitespace, a negative-spacious, webapp-nostalgic theme\" by JD":"zh-Hans/community/themes/Whitespace a negative-spacious webapp-nostalgic theme by JD.tid","\"Ghostwriter theme by Rory Gibson\" adapted for TW5 by Riz":"zh-Hans/community/themes/_Ghostwriter theme by Rory Gibson_ by Riz.tid","TiddlyWiki Camp Paris":"zh-Hans/community/TiddlyWiki Camp Paris.tid","TiddlyWiki Hangouts":"zh-Hans/community/TiddlyWiki Hangouts.tid","TiddlyWiki European Meetup 2016":"zh-Hans/community/TiddlyWiki_European_Meetup_2016.tid","TiddlyWiki European Meetup 2017":"zh-Hans/community/TiddlyWiki_European_Meetup_2017.tid","Translate TiddlyWiki into your language":"zh-Hans/community/Translate TiddlyWiki into your language.tid","GitHub Saver Tutorial by Mohammad":"zh-Hans/community/tutorials/GitHub Saver Tutorial by Mohammad.tid","\"Install and run TiddlyWiki on a CentOS 6 VPS using Nginx\" from RoseHosting":"zh-Hans/community/tutorials/Install and run TiddlyWiki on a CentOS 6 VPS using Nginx.tid","\"Microblogging con Tiddlywiki\" by Juan":"zh-Hans/community/tutorials/Microblogging con TiddlyWiki.tid","\"Un wiki sur votre BiblioBox avec TiddlyWiki\" from A Penguin in Redmond":"zh-Hans/community/tutorials/Un wiki sur votre BiblioBox avec TiddlyWiki.tid","Tutorials":"zh-Hans/community/Tutorials.tid","Absolute Operators":"zh-Hans/concepts/AbsoluteOperators.tid","ColourPalettes":"zh-Hans/concepts/ColourPalettes.tid","Concepts":"zh-Hans/concepts/Concepts.tid","Current Tiddler":"zh-Hans/concepts/Current Tiddler.tid","DataTiddlers":"zh-Hans/concepts/DataTiddlers.tid","Date Fields":"zh-Hans/concepts/Date Fields.tid","DefaultTiddlers":"zh-Hans/concepts/DefaultTiddlers.tid","DictionaryTiddlers":"zh-Hans/concepts/DictionaryTiddlers.tid","Dominant Append":"zh-Hans/concepts/Dominant Append.tid","ExternalImages":"zh-Hans/concepts/ExternalImages.tid","Filters":"zh-Hans/concepts/Filters.tid","Hard and Soft Links":"zh-Hans/concepts/Hard and Soft Links.tid","InfoPanel":"zh-Hans/concepts/InfoPanel.tid","JSONTiddlers":"zh-Hans/concepts/JSONTiddlers.tid","Keyboard Shortcut Tiddler":"zh-Hans/concepts/KeyboardShortcutTiddler.tid","Macros":"zh-Hans/concepts/Macros.tid","Messages":"zh-Hans/concepts/Messages.tid","Modules":"zh-Hans/concepts/Modules.tid","ModuleType":"zh-Hans/concepts/ModuleType.tid","Order of Tagged Tiddlers":"zh-Hans/concepts/Order of Tagged Tiddlers.tid","PermaLinks":"zh-Hans/concepts/PermaLinks.tid","Pragma":"zh-Hans/concepts/Pragma.tid","Railroad Diagrams":"zh-Hans/concepts/Railroad Diagrams.tid","Selection Constructors":"zh-Hans/concepts/Selection Constructors.tid","ShadowTiddlers":"zh-Hans/concepts/ShadowTiddlers.tid","Story River":"zh-Hans/concepts/Story River.tid","SystemTags":"zh-Hans/concepts/SystemTags.tid","SystemTiddlers":"zh-Hans/concepts/SystemTiddlers.tid","TagTiddlers":"zh-Hans/concepts/TagTiddlers.tid","TemplateTiddlers":"zh-Hans/concepts/TemplateTiddlers.tid","TextReference":"zh-Hans/concepts/TextReference.tid","TiddlerFields":"zh-Hans/concepts/TiddlerFields.tid","Tiddlers":"zh-Hans/concepts/Tiddlers.tid","TiddlyWiki":"zh-Hans/concepts/TiddlyWiki.tid","TiddlyWiki5":"zh-Hans/concepts/TiddlyWiki5.tid","TiddlyWikiFolders":"zh-Hans/concepts/TiddlyWikiFolders.tid","Title List":"zh-Hans/concepts/Title List.tid","Title Selection":"zh-Hans/concepts/Title Selection.tid","Transclusion":"zh-Hans/concepts/Transclusion.tid","WikiText":"zh-Hans/concepts/WikiText.tid","$:/core/modules/savers/upload.js":"zh-Hans/core/modules/savers/upload.js","$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete":"zh-Hans/core/ui/AdvancedSearch/FilterButtons/delete.tid","InField":"zh-Hans/core/ui/AdvancedSearch/SearchInField.tid","$:/core/ui/Components/tag-link":"zh-Hans/core/ui/Components/tag-link.tid","$:/core/ui/EditorToolbar/help-dropdown":"zh-Hans/core/ui/EditorToolbar/help-dropdown.tid","$:/core/ui/EditorToolbar/help":"zh-Hans/core/ui/EditorToolbar/help.tid","$:/plugins/tiddlywiki/markdown/EditorToolbar/help-dropdown":"zh-Hans/core/ui/EditorToolbar/markdown-help-dropdown.tid","$:/plugins/tiddlywiki/markdown/EditorToolbar/help":"zh-Hans/core/ui/EditorToolbar/markdown-help.tid","$:/config/shortcuts/help":"zh-Hans/core/ui/EditorToolbar/shortcuts.multids","$:/config/shortcuts/markdown-help":"zh-Hans/core/ui/EditorToolbar/shortcuts.multids","$:/core/ui/EditTemplate/tags":"zh-Hans/core/ui/EditTemplate/tags.tid","$:/core/ui/ListItemTemplate":"zh-Hans/core/ui/ListItemTemplate.tid","$:/core/ui/SideBar/Open":"zh-Hans/core/ui/SideBar/Open.tid","$:/core/ui/SideBar/Tools":"zh-Hans/core/ui/SideBar/Tools.tid","$:/core/ui/ViewTemplate/title":"zh-Hans/core/ui/ViewTemplate/title.tid","$:/config/SaveTrailPlugin/enable":"zh-Hans/core/wiki/config/$__config_SaveTrailPlugin_enable.tid","$:/config/Toolbar/ButtonClass":"zh-Hans/core/wiki/config/$__config_Toolbar_ButtonClass.tid","$:/palette":"zh-Hans/core/wiki/config/$__palette.tid","$:/state/editpreviewtype":"zh-Hans/core/wiki/config/$__state_editpreviewtype.tid","$:/state/toc/SelectedAbout":"zh-Hans/core/wiki/config/$__state_toc_SelectedAbout.tid","$:/theme":"zh-Hans/core/wiki/config/$__theme.tid","$:/config/AutoSave":"zh-Hans/core/wiki/config/AutoSave.tid","$:/config/DefaultSidebarTab":"zh-Hans/core/wiki/config/DefaultSidebarTab.tid","$:/config/OfficialPluginLibrary":"zh-Hans/core/wiki/config/OfficialPluginLibrary.tid","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions":"zh-Hans/core/wiki/config/PageControlButtons.multids","$:/config/PrereleaseLocalPluginLibrary":"zh-Hans/core/wiki/config/PrereleaseLocalPluginLibrary.tid","$:/config/PrereleaseOfficialPluginLibrary":"zh-Hans/core/wiki/config/PrereleaseOfficialPluginLibrary.tid","$:/config/Tiddlers/TitleLinks":"zh-Hans/core/wiki/config/TitleLinks.tid","$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize":"zh-Hans/core/wiki/config/vanilla/metrics.multids","$:/themes/tiddlywiki/vanilla/metrics/fontsize":"zh-Hans/core/wiki/config/vanilla/metrics.multids","$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth":"zh-Hans/core/wiki/config/vanilla/metrics.multids","$:/themes/tiddlywiki/vanilla/options/sidebarlayout":"zh-Hans/core/wiki/config/vanilla/options.multids","$:/core/macros/list":"zh-Hans/core/wiki/macros/list.tid","$:/core/macros/tag":"zh-Hans/core/wiki/macros/tag.tid","$:/core/macros/timeline-title":"zh-Hans/core/wiki/macros/timeline-title.tid","$:/core/macros/timeline":"zh-Hans/core/wiki/macros/timeline.tid","Alternative page layouts":"zh-Hans/customising/Alternative page layouts.tid","Configuring startup tiddlers":"zh-Hans/customising/Configuring startup tiddlers.tid","Customise TiddlyWiki":"zh-Hans/customising/Customise TiddlyWiki.tid","Customising search results":"zh-Hans/customising/Customising search results.tid","Page and tiddler layout customisation":"zh-Hans/customising/Page and tiddler layout customisation.tid","Base64":"zh-Hans/definitions/Base64.tid","BT":"zh-Hans/definitions/BT.tid","Cascading Style Sheets":"zh-Hans/definitions/Cascading Style Sheets.tid","Comma-Separated Values":"zh-Hans/definitions/Comma Separated Values.tid","ContentType":"zh-Hans/definitions/ContentType.tid","Data URI":"zh-Hans/definitions/Data URI.tid","Definitions":"zh-Hans/definitions/Definitions.tid","Document Object Model":"zh-Hans/definitions/Document Object Model.tid","Federatial":"zh-Hans/definitions/Federatial.tid","GitHub":"zh-Hans/definitions/GitHub.tid","HyperText Markup Language":"zh-Hans/definitions/HyperText Markup Language.tid","JeremyRuston":"zh-Hans/definitions/JeremyRuston.tid","Jermolene":"zh-Hans/definitions/Jermolene.tid","Keyboard Shortcut Descriptor":"zh-Hans/definitions/KeyboardShortcutDescriptor.tid","NW.js":"zh-Hans/definitions/NW.js.tid","OpenSource":"zh-Hans/definitions/OpenSource.tid","Osmosoft":"zh-Hans/definitions/Osmosoft.tid","Percent Encoding":"zh-Hans/definitions/Percent Encoding.tid","Quine":"zh-Hans/definitions/Quine.tid","Stanford JavaScript Crypto Library":"zh-Hans/definitions/Stanford JavaScript Crypto Library.tid","TiddlyDesktop":"zh-Hans/definitions/TiddlyDesktop.tid","TiddlyFox":"zh-Hans/definitions/TiddlyFox.tid","TiddlyIE":"zh-Hans/definitions/TiddlyIE.tid","TiddlySpace":"zh-Hans/definitions/TiddlySpace.tid","TiddlyWeb":"zh-Hans/definitions/TiddlyWeb.tid","TiddlyWikiClassic":"zh-Hans/definitions/TiddlyWikiClassic.tid","URI":"zh-Hans/definitions/URI.tid","Web Developer Tools":"zh-Hans/definitions/Web Developer Tools.tid","Alice in Wonderland":"zh-Hans/demonstrations/Alice in Wonderland.tid","Apple":"zh-Hans/demonstrations/Apple.tid","Caruso - Ave Maria":"zh-Hans/demonstrations/Caruso - Ave Maria.tid","GroupedLists":"zh-Hans/demonstrations/GroupedLists.tid","ImageGallery Example":"zh-Hans/demonstrations/ImageGallery Example.tid","Demonstration: keyboard-driven-input Macro":"zh-Hans/demonstrations/KeyboardDrivenInput/Demonstration_ keyboard-driven-input Macro.tid","kdi-demo-configtid":"zh-Hans/demonstrations/KeyboardDrivenInput/kdi-demo-configtid.tid","SampleAlert":"zh-Hans/demonstrations/SampleAlert.tid","SampleNotification":"zh-Hans/demonstrations/SampleNotification.tid","SampleTabFour":"zh-Hans/demonstrations/SampleTabFour.tid","SampleTabOne":"zh-Hans/demonstrations/SampleTabOne.tid","SampleTabThree":"zh-Hans/demonstrations/SampleTabThree.tid","SampleTabTwo":"zh-Hans/demonstrations/SampleTabTwo.tid","sampletag1":"zh-Hans/demonstrations/sampletag1.tid","sampletag2":"zh-Hans/demonstrations/sampletag2.tid","SampleTiddlerFirst":"zh-Hans/demonstrations/SampleTiddlerFirst.tid","SampleTiddlerSecond":"zh-Hans/demonstrations/SampleTiddlerSecond.tid","SampleTiddlerThird":"zh-Hans/demonstrations/SampleTiddlerThird.tid","SampleWizard":"zh-Hans/demonstrations/SampleWizard.tid","SampleWizard2":"zh-Hans/demonstrations/SampleWizard2.tid","TabbedExampleType":"zh-Hans/demonstrations/TabbedExampleType.tid","Contents":"zh-Hans/demonstrations/TableOfContents/Contents.tid","First":"zh-Hans/demonstrations/TableOfContents/First.tid","FirstOne":"zh-Hans/demonstrations/TableOfContents/FirstOne.tid","FirstThree":"zh-Hans/demonstrations/TableOfContents/FirstThree.tid","FirstTwo":"zh-Hans/demonstrations/TableOfContents/FirstTwo.tid","Fourth":"zh-Hans/demonstrations/TableOfContents/Fourth.tid","Second":"zh-Hans/demonstrations/TableOfContents/Second.tid","SecondOne":"zh-Hans/demonstrations/TableOfContents/SecondOne.tid","SecondThree":"zh-Hans/demonstrations/TableOfContents/SecondThree.tid","SecondThreeOne":"zh-Hans/demonstrations/TableOfContents/SecondThreeOne.tid","SecondThreeThree":"zh-Hans/demonstrations/TableOfContents/SecondThreeThree.tid","SecondThreeTwo":"zh-Hans/demonstrations/TableOfContents/SecondThreeTwo.tid","SecondTwo":"zh-Hans/demonstrations/TableOfContents/SecondTwo.tid","Third":"zh-Hans/demonstrations/TableOfContents/Third.tid","ThirdOne":"zh-Hans/demonstrations/TableOfContents/ThirdOne.tid","ThirdThree":"zh-Hans/demonstrations/TableOfContents/ThirdThree.tid","ThirdTwo":"zh-Hans/demonstrations/TableOfContents/ThirdTwo.tid","Example Table of Contents: Expandable":"zh-Hans/demonstrations/TableOfContentsMacro Expandable Example.tid","Example Table of Contents: Selectively Expandable":"zh-Hans/demonstrations/TableOfContentsMacro Selective Expandable Example.tid","Example Table of Contents: Simple":"zh-Hans/demonstrations/TableOfContentsMacro Simple Example.tid","Example Table of Contents: Sorted Expandable":"zh-Hans/demonstrations/TableOfContentsMacro Sorted Expandable Example.tid","Example Table of Contents: Tabbed Internal":"zh-Hans/demonstrations/TableOfContentsMacro Tabbed Example.tid","Example Table of Contents: Tabbed External":"zh-Hans/demonstrations/TableOfContentsMacro Tabbed External Example.tid","Example for tag Macro":"zh-Hans/demonstrations/Tagged with TagMacro.tid","Compose ballad":"zh-Hans/demonstrations/Tasks/Compose ballad.tid","done":"zh-Hans/demonstrations/Tasks/done.tid","Get the Ring":"zh-Hans/demonstrations/Tasks/Get the Ring.tid","Go to Mordor":"zh-Hans/demonstrations/Tasks/Go to Mordor.tid","Kill the Dragon":"zh-Hans/demonstrations/Tasks/Kill the Dragon.tid","Make the beds":"zh-Hans/demonstrations/Tasks/Make the beds.tid","task":"zh-Hans/demonstrations/Tasks/task.tid","TaskManagementExample":"zh-Hans/demonstrations/Tasks/TaskManagementExample.tid","TaskManagementExample (Draggable)":"zh-Hans/demonstrations/Tasks/TaskManagementExampleDraggable.tid","TaskManagementExampleDraggableTemplate":"zh-Hans/demonstrations/Tasks/TaskManagementExampleDraggableTemplate.tid","TiddlyWiki.mp3":"zh-Hans/demonstrations/TiddlyWiki.mp3","Days of the Week":"zh-Hans/demonstrations/Weekdays/Days of the Week.tid","Friday":"zh-Hans/demonstrations/Weekdays/Friday.tid","Monday":"zh-Hans/demonstrations/Weekdays/Monday.tid","Saturday":"zh-Hans/demonstrations/Weekdays/Saturday.tid","Sunday":"zh-Hans/demonstrations/Weekdays/Sunday.tid","Thursday":"zh-Hans/demonstrations/Weekdays/Thursday.tid","Tuesday":"zh-Hans/demonstrations/Weekdays/Tuesday.tid","Wednesday":"zh-Hans/demonstrations/Weekdays/Wednesday.tid","Adding Babel Polyfill to TiddlyWiki":"zh-Hans/dev/new/Adding Babel Polyfill to TiddlyWiki.tid","Using ES2016 for Writing Plugins":"zh-Hans/dev/new/Using ES2016 for Writing Plugins.tid","TiddlyWiki Architecture":"zh-Hans/dev/TiddlyWiki Architecture.tid","TiddlyWiki for Developers":"zh-Hans/dev/TiddlyWiki for Developers.tid","Blog Edition":"zh-Hans/editions/Blog Edition.tid","Editions":"zh-Hans/editions/Editions.tid","Empty Edition":"zh-Hans/editions/Empty Edition.tid","Full Edition":"zh-Hans/editions/Full Edition.tid","Résumé Builder Edition":"zh-Hans/editions/Resume Builder Edition.tid","Text-Slicer Edition":"zh-Hans/editions/Text Slicer Edition.tid","XLSX Utilities Edition":"zh-Hans/editions/XLSX Utilities Edition.tid","Emergency Tiddler Export":"zh-Hans/saving/Emergency Tiddler Export.tid","AutoSave":"zh-Hans/features/AutoSave.tid","DateFormat":"zh-Hans/features/DateFormat.tid","Drag and Drop":"zh-Hans/features/Drag and Drop.tid","Features":"zh-Hans/features/Features.tid","Future Proof":"zh-Hans/features/Future Proof.tid","Importing Tiddlers":"zh-Hans/features/Importing Tiddlers.tid","LazyLoading":"zh-Hans/features/LazyLoading.tid","Modals":"zh-Hans/features/Modals.tid","Notifications":"zh-Hans/features/Notifications.tid","Performance Instrumentation":"zh-Hans/features/Performance Instrumentation.tid","SafeMode":"zh-Hans/features/SafeMode.tid","Scalability":"zh-Hans/features/Scalability.tid","Searching":"zh-Hans/features/Searching in TiddlyWiki.tid","StartupActions":"zh-Hans/features/StartupActions.tid","ListField":"zh-Hans/fields/ListField.tid","MultiTiddlerFiles":"zh-Hans/fileformats/MultiTiddlerFiles.tid","MultiTiddlerFileSyntax":"zh-Hans/fileformats/MultiTiddlerFileSyntax.tid","TiddlerFiles":"zh-Hans/fileformats/TiddlerFiles.tid","abs Operator":"zh-Hans/filters/abs Operator.tid","add Operator":"zh-Hans/filters/add.tid","addprefix Operator":"zh-Hans/filters/addprefix.tid","addsuffix Operator":"zh-Hans/filters/addsuffix.tid","after Operator":"zh-Hans/filters/after.tid","all Operator":"zh-Hans/filters/all.tid","allafter Operator":"zh-Hans/filters/allafter.tid","allbefore Operator":"zh-Hans/filters/allbefore.tid","append Operator":"zh-Hans/filters/append.tid","average Operator":"zh-Hans/filters/average.tid","backlinks Operator":"zh-Hans/filters/backlinks.tid","before Operator":"zh-Hans/filters/before.tid","bf Operator":"zh-Hans/filters/bf.tid","butfirst Operator":"zh-Hans/filters/butfirst.tid","butlast Operator":"zh-Hans/filters/butlast.tid","ceil Operator":"zh-Hans/filters/ceil Operator.tid","commands Operator":"zh-Hans/filters/commands.tid","compare Operator":"zh-Hans/filters/compare Operator.tid","Conditional Operators":"zh-Hans/filters/Conditional Operators.tid","contains Operator":"zh-Hans/filters/contains Operator.tid","count Operator":"zh-Hans/filters/count_Operator.tid","cycle Operator":"zh-Hans/filters/cycle Operator.tid","days Operator":"zh-Hans/filters/days.tid","decodehtml Operator":"zh-Hans/filters/decodehtml_Operator.tid","decodeuricomponent Operator":"zh-Hans/filters/decodeuricomponent_Operator.tid","decodeuri Operator":"zh-Hans/filters/decodeuri_Operator.tid","deserializers Operator":"zh-Hans/filters/deserializers Operator.tid","divide Operator":"zh-Hans/filters/divide Operator.tid","duplicateslugs Operator":"zh-Hans/filters/duplicateslugs Operator.tid","each Operator":"zh-Hans/filters/each.tid","eachday Operator":"zh-Hans/filters/eachday.tid","editiondescription Operator":"zh-Hans/filters/editiondescription.tid","editions Operator":"zh-Hans/filters/editions.tid","else Operator":"zh-Hans/filters/else Operator.tid","encodehtml Operator":"zh-Hans/filters/encodehtml_Operator.tid","encodeuricomponent Operator":"zh-Hans/filters/encodeuricomponent_Operator.tid","encodeuri Operator":"zh-Hans/filters/encodeuri_Operator.tid","enlist Operator":"zh-Hans/filters/enlist Operator.tid","enlist-input Operator":"zh-Hans/filters/enlist-input Operator.tid","escapecss Operator":"zh-Hans/filters/escapecss_Operator.tid","escaperegexp Operator":"zh-Hans/filters/escaperegexp_Operator.tid","abs Operator (Examples)":"zh-Hans/filters/examples/abs Operator (Examples).tid","add Operator (Examples)":"zh-Hans/filters/examples/add Operator (Examples).tid","addprefix Operator (Examples)":"zh-Hans/filters/examples/addprefix.tid","addsuffix Operator (Examples)":"zh-Hans/filters/examples/addsuffix.tid","after Operator (Examples)":"zh-Hans/filters/examples/after.tid","all Operator (Examples)":"zh-Hans/filters/examples/all.tid","allafter Operator (Examples)":"zh-Hans/filters/examples/allafter.tid","allbefore Operator (Examples)":"zh-Hans/filters/examples/allbefore.tid","append Operator (Examples)":"zh-Hans/filters/examples/append.tid","average Operator (Examples)":"zh-Hans/filters/examples/average Operator (Examples).tid","backlinks Operator (Examples)":"zh-Hans/filters/examples/backlinks.tid","before Operator (Examples)":"zh-Hans/filters/examples/before.tid","Brownies":"zh-Hans/filters/examples/Brownies.tid","butlast Operator (Examples)":"zh-Hans/filters/examples/butlast.tid","ceil Operator (Examples)":"zh-Hans/filters/examples/ceil Operator (Examples).tid","Chick Peas":"zh-Hans/filters/examples/Chick Peas.tid","commands Operator (Examples)":"zh-Hans/filters/examples/commands.tid","compare Operator (Examples)":"zh-Hans/filters/examples/compare Operator (Examples).tid","contains Operator (Examples)":"zh-Hans/filters/examples/contains Operator (Examples).tid","count Operator (Examples)":"zh-Hans/filters/examples/count_Operator_(Examples).tid","cycle Operator (Examples)":"zh-Hans/filters/examples/cycle Operator (Examples).tid","days Operator (Examples)":"zh-Hans/filters/examples/days.tid","decodehtml Operator (Examples)":"zh-Hans/filters/examples/decodehtml_Operator_(Examples).tid","decodeuricomponent Operator (Examples)":"zh-Hans/filters/examples/decodeuricomponent_Operator_(Examples).tid","decodeuri Operator (Examples)":"zh-Hans/filters/examples/decodeuri_Operator_(Examples).tid","deserializers Operator (Examples)":"zh-Hans/filters/examples/deserializers Operator (Examples).tid","divide Operator (Examples)":"zh-Hans/filters/examples/divide Operator (Examples).tid","each Operator (Examples)":"zh-Hans/filters/examples/each.tid","eachday Operator (Examples)":"zh-Hans/filters/examples/eachday.tid","else Operator (Examples)":"zh-Hans/filters/examples/else Operator (Examples).tid","encodehtml Operator (Examples)":"zh-Hans/filters/examples/encodehtml_Operator_(Examples).tid","encodeuricomponent Operator (Examples)":"zh-Hans/filters/examples/encodeuricomponent_Operator_(Examples).tid","encodeuri Operator (Examples)":"zh-Hans/filters/examples/encodeuri_Operator_(Examples).tid","enlist Operator (Examples)":"zh-Hans/filters/examples/enlist Operator (Examples).tid","enlist-input Operator (Examples)":"zh-Hans/filters/examples/enlist-input Operator (Examples).tid","escapecss Operator (Examples)":"zh-Hans/filters/examples/escapecss Operator (Examples).tid","escaperegexp Operator (Examples)":"zh-Hans/filters/examples/escaperegexp_Operator_(Examples).tid","exponential Operator (Examples)":"zh-Hans/filters/examples/exponential Operator (Examples).tid","field Operator (Examples)":"zh-Hans/filters/examples/field.tid","fields Operator (Examples)":"zh-Hans/filters/examples/fields.tid","filter Operator (Examples)":"zh-Hans/filters/examples/filter Operator (Examples).tid","first Operator (Examples)":"zh-Hans/filters/examples/first.tid","fixed Operator (Examples)":"zh-Hans/filters/examples/fixed Operator (Examples).tid","floor Operator (Examples)":"zh-Hans/filters/examples/floor Operator (Examples).tid","format Operator (Examples)":"zh-Hans/filters/examples/format Operator (Examples).tid","get Operator (Examples)":"zh-Hans/filters/examples/get.tid","getindex Operator (Examples)":"zh-Hans/filters/examples/getindex.tid","getvariable Operator (Examples)":"zh-Hans/filters/examples/getvariable.tid","has Operator (Examples)":"zh-Hans/filters/examples/has.tid","How to remove stop words":"zh-Hans/filters/examples/How to remove stop words.tid","indexes Operator (Examples)":"zh-Hans/filters/examples/indexes.tid","is Operator (Examples)":"zh-Hans/filters/examples/is.tid","join Operator (Examples)":"zh-Hans/filters/examples/join Operator (Examples).tid","jsonstringify Operator (Examples)":"zh-Hans/filters/examples/jsonstringify Operator (Examples).tid","last Operator (Examples)":"zh-Hans/filters/examples/last.tid","length Operator (Examples)":"zh-Hans/filters/examples/length Operator (Examples).tid","limit Operator (Examples)":"zh-Hans/filters/examples/limit.tid","links Operator (Examples)":"zh-Hans/filters/examples/links.tid","list Operator (Examples)":"zh-Hans/filters/examples/list.tid","listed Operator (Examples)":"zh-Hans/filters/examples/listed.tid","log Operator (Examples)":"zh-Hans/filters/examples/log Operator (Examples).tid","lookup Operator (Examples)":"zh-Hans/filters/examples/lookup Operator (Examples).tid","lowercase Operator (Examples)":"zh-Hans/filters/examples/lowercase Operator (Examples).tid","match Operator (Examples)":"zh-Hans/filters/examples/match Operator (Examples).tid","max Operator (Examples)":"zh-Hans/filters/examples/max Operator (Examples).tid","maxall Operator (Examples)":"zh-Hans/filters/examples/maxall Operator (Examples).tid","median Operator (Examples)":"zh-Hans/filters/examples/median Operator (Examples).tid","Milk":"zh-Hans/filters/examples/Milk.tid","min Operator (Examples)":"zh-Hans/filters/examples/min Operator (Examples).tid","minall Operator (Examples)":"zh-Hans/filters/examples/minall Operator (Examples).tid","minlength Operator (Examples)":"zh-Hans/filters/examples/minlength.tid","modules Operator (Examples)":"zh-Hans/filters/examples/modules.tid","moduletypes Operator (Examples)":"zh-Hans/filters/examples/moduletypes.tid","move Operator (Examples)":"zh-Hans/filters/examples/move.tid","multiply Operator (Examples)":"zh-Hans/filters/examples/multiply Operator (Examples).tid","negate Operator (Examples)":"zh-Hans/filters/examples/negate Operator (Examples).tid","next Operator (Examples)":"zh-Hans/filters/examples/next.tid","nsort Operator (Examples)":"zh-Hans/filters/examples/nsort.tid","nsortcs Operator (Examples)":"zh-Hans/filters/examples/nsortcs.tid","nth Operator (Examples)":"zh-Hans/filters/examples/nth.tid","pad Operator (Examples)":"zh-Hans/filters/examples/pad Operator (Examples).tid","plugintiddlers Operator (Examples)":"zh-Hans/filters/examples/plugintiddlers.tid","power Operator (Examples)":"zh-Hans/filters/examples/power Operator (Examples).tid","precision Operator (Examples)":"zh-Hans/filters/examples/precision Operator (Examples).tid","prefix Operator (Examples)":"zh-Hans/filters/examples/prefix.tid","prepend Operator (Examples)":"zh-Hans/filters/examples/prepend.tid","previous Operator (Examples)":"zh-Hans/filters/examples/previous.tid","product Operator (Examples)":"zh-Hans/filters/examples/product Operator (Examples).tid","putafter Operator (Examples)":"zh-Hans/filters/examples/putafter.tid","putbefore Operator (Examples)":"zh-Hans/filters/examples/putbefore.tid","putfirst Operator (Examples)":"zh-Hans/filters/examples/putfirst.tid","putlast Operator (Examples)":"zh-Hans/filters/examples/putlast.tid","reduce Operator (Examples)":"zh-Hans/filters/examples/reduce Operator (Examples).tid","regexp Operator (Examples)":"zh-Hans/filters/examples/regexp.tid","remainder Operator (Examples)":"zh-Hans/filters/examples/remainder Operator (Examples).tid","remove Operator (Examples)":"zh-Hans/filters/examples/remove.tid","removeprefix Operator (Examples)":"zh-Hans/filters/examples/removeprefix.tid","removesuffix Operator (Examples)":"zh-Hans/filters/examples/removesuffix.tid","replace Operator (Examples)":"zh-Hans/filters/examples/replace.tid","rest Operator (Examples)":"zh-Hans/filters/examples/rest.tid","reverse Operator (Examples)":"zh-Hans/filters/examples/reverse.tid","Rice Pudding":"zh-Hans/filters/examples/Rice Pudding.tid","round Operator (Examples)":"zh-Hans/filters/examples/round Operator (Examples).tid","sameday Operator (Examples)":"zh-Hans/filters/examples/sameday.tid","search-replace Operator (Examples)":"zh-Hans/filters/examples/search-replace Operator (Examples).tid","search Operator (Examples)":"zh-Hans/filters/examples/search.tid","sentencecase Operator (Examples)":"zh-Hans/filters/examples/sentencecase Operator (Examples).tid","shadowsource Operator (Examples)":"zh-Hans/filters/examples/shadowsource.tid","sign Operator (Examples)":"zh-Hans/filters/examples/sign Operator (Examples).tid","sort Operator (Examples)":"zh-Hans/filters/examples/sort.tid","sortan Operator (Examples)":"zh-Hans/filters/examples/sortan.tid","sortby Operator (Examples)":"zh-Hans/filters/examples/sortby.tid","sortcs Operator (Examples)":"zh-Hans/filters/examples/sortcs.tid","sortsub Operator (Examples)":"zh-Hans/filters/examples/sortsub Operator (Examples).tid","split Operator (Examples)":"zh-Hans/filters/examples/split Operator (Examples).tid","splitbefore Operator (Examples)":"zh-Hans/filters/examples/splitbefore.tid","splitregexp Operator (Examples)":"zh-Hans/filters/examples/splitregexp Operator (Examples).tid","standard-deviation Operator (Examples)":"zh-Hans/filters/examples/standard-deviation Operator (Examples).tid","storyviews Operator (Examples)":"zh-Hans/filters/examples/storyviews.tid","stringify Operator (Examples)":"zh-Hans/filters/examples/stringify_Operator_(Examples).tid","subfilter Operator (Examples)":"zh-Hans/filters/examples/subfilter Operator (Examples).tid","subtiddlerfields Operator (Examples)":"zh-Hans/filters/examples/subtiddlerfields Operator (Examples).tid","subtract Operator (Examples)":"zh-Hans/filters/examples/subtract Operator (Examples).tid","suffix Operator (Examples)":"zh-Hans/filters/examples/suffix.tid","sum Operator (Examples)":"zh-Hans/filters/examples/sum Operator (Examples).tid","tag Operator (Examples)":"zh-Hans/filters/examples/tag.tid","tagging Operator (Examples)":"zh-Hans/filters/examples/tagging.tid","tags Operator (Examples)":"zh-Hans/filters/examples/tags.tid","then Operator (Examples)":"zh-Hans/filters/examples/then Operator (Examples).tid","title Operator (Examples)":"zh-Hans/filters/examples/title.tid","titlecase Operator (Examples)":"zh-Hans/filters/examples/titlecase Operator (Examples).tid","toggle Operator (Examples)":"zh-Hans/filters/examples/toggle Operator (Examples).tid","trim Operator (Examples)":"zh-Hans/filters/examples/trim Operator (Examples).tid","trunc Operator (Examples)":"zh-Hans/filters/examples/trunc Operator (Examples).tid","unique Operator (Examples)":"zh-Hans/filters/examples/unique Operator (Examples).tid","untagged Operator (Examples)":"zh-Hans/filters/examples/untagged.tid","untrunc Operator (Examples)":"zh-Hans/filters/examples/untrunc Operator (Examples).tid","uppercase Operator (Examples)":"zh-Hans/filters/examples/uppercase Operator (Examples).tid","variables Operator (Examples)":"zh-Hans/filters/examples/variables.tid","variance Operator (Examples)":"zh-Hans/filters/examples/variance Operator (Examples).tid","exponential Operator":"zh-Hans/filters/exponential Operator.tid","field Operator":"zh-Hans/filters/field.tid","fields Operator":"zh-Hans/filters/fields.tid","Filter Operators":"zh-Hans/filters/Filter Operators.tid","filter Operator":"zh-Hans/filters/filter.tid","first Operator":"zh-Hans/filters/first.tid","fixed Operator":"zh-Hans/filters/fixed Operator.tid","floor Operator":"zh-Hans/filters/floor Operator.tid","format Operator":"zh-Hans/filters/format.tid","get Operator":"zh-Hans/filters/get.tid","getindex Operator":"zh-Hans/filters/getindex.tid","getvariable Operator":"zh-Hans/filters/getvariable.tid","has Operator":"zh-Hans/filters/has.tid","haschanged Operator":"zh-Hans/filters/haschanged.tid","indexes Operator":"zh-Hans/filters/indexes.tid","insertbefore Operator":"zh-Hans/filters/insertbefore Operator.tid","Introduction to filter notation":"zh-Hans/filters/Introduction to filter notation.tid","is Operator":"zh-Hans/filters/is.tid","join Operator":"zh-Hans/filters/join Operator.tid","jsonstringify Operator":"zh-Hans/filters/jsonstringify Operator.tid","last Operator":"zh-Hans/filters/last.tid","length Operator":"zh-Hans/filters/length Operator.tid","limit Operator":"zh-Hans/filters/limit.tid","links Operator":"zh-Hans/filters/links.tid","list Operator":"zh-Hans/filters/list.tid","listed Operator":"zh-Hans/filters/listed.tid","log Operator":"zh-Hans/filters/log Operator.tid","lookup Operator":"zh-Hans/filters/lookup Operator.tid","lowercase Operator":"zh-Hans/filters/lowercase Operator.tid","match Operator":"zh-Hans/filters/match Operator.tid","Mathematics Operators":"zh-Hans/filters/Mathematics Operators.tid","max Operator":"zh-Hans/filters/max Operator.tid","maxall Operator":"zh-Hans/filters/maxall Operator.tid","median Operator":"zh-Hans/filters/median.tid","min Operator":"zh-Hans/filters/min Operator.tid","minall Operator":"zh-Hans/filters/minall Operator.tid","minlength Operator":"zh-Hans/filters/minlength.tid","modules Operator":"zh-Hans/filters/modules.tid","moduletypes Operator":"zh-Hans/filters/moduletypes.tid","move Operator":"zh-Hans/filters/move.tid","multiply Operator":"zh-Hans/filters/multiply Operator.tid","negate Operator":"zh-Hans/filters/negate Operator.tid","next Operator":"zh-Hans/filters/next.tid","nsort Operator":"zh-Hans/filters/nsort.tid","nsortcs Operator":"zh-Hans/filters/nsortcs.tid","nth Operator":"zh-Hans/filters/nth.tid","order Operator":"zh-Hans/filters/order_Operator.tid","pad Operator":"zh-Hans/filters/pad Operator.tid","plugintiddlers Operator":"zh-Hans/filters/plugintiddlers.tid","power Operator":"zh-Hans/filters/power Operator.tid","precision Operator":"zh-Hans/filters/precision Operator.tid","prefix Operator":"zh-Hans/filters/prefix.tid","prepend Operator":"zh-Hans/filters/prepend.tid","previous Operator":"zh-Hans/filters/previous.tid","product Operator":"zh-Hans/filters/product Operator.tid","putafter Operator":"zh-Hans/filters/putafter.tid","putbefore Operator":"zh-Hans/filters/putbefore.tid","putfirst Operator":"zh-Hans/filters/putfirst.tid","putlast Operator":"zh-Hans/filters/putlast.tid","range Operator":"zh-Hans/filters/range.tid","reduce Operator":"zh-Hans/filters/reduce.tid","regexp Operator":"zh-Hans/filters/regexp.tid","remainder Operator":"zh-Hans/filters/remainder Operator.tid","remove Operator":"zh-Hans/filters/remove.tid","removeprefix Operator":"zh-Hans/filters/removeprefix.tid","removesuffix Operator":"zh-Hans/filters/removesuffix.tid","replace Operator":"zh-Hans/filters/replace.tid","rest Operator":"zh-Hans/filters/rest.tid","reverse Operator":"zh-Hans/filters/reverse.tid","round Operator":"zh-Hans/filters/round Operator.tid","sameday Operator":"zh-Hans/filters/sameday.tid","search-replace Operator":"zh-Hans/filters/search-replace Operator.tid","search Operator":"zh-Hans/filters/search.tid","sentencecase Operator":"zh-Hans/filters/sentencecase Operator.tid","shadowsource Operator":"zh-Hans/filters/shadowsource.tid","sign Operator":"zh-Hans/filters/sign Operator.tid","slugify Operator":"zh-Hans/filters/slugify Operator.tid","sort Operator":"zh-Hans/filters/sort.tid","sortan Operator":"zh-Hans/filters/sortan.tid","sortby Operator":"zh-Hans/filters/sortby.tid","sortcs Operator":"zh-Hans/filters/sortcs.tid","sortsub Operator":"zh-Hans/filters/sortsub Operator.tid","split Operator":"zh-Hans/filters/split Operator.tid","splitbefore Operator":"zh-Hans/filters/splitbefore.tid","splitregexp Operator":"zh-Hans/filters/splitregexp Operator.tid","standard-deviation Operator":"zh-Hans/filters/standard-deviation Operator.tid","storyviews Operator":"zh-Hans/filters/storyviews.tid","stringify Operator":"zh-Hans/filters/stringify_Operator.tid","subfilter Operator":"zh-Hans/filters/subfilter Operator.tid","subtiddlerfields Operator":"zh-Hans/filters/subtiddlerfields Operator.tid","subtract Operator":"zh-Hans/filters/subtract Operator.tid","suffix Operator":"zh-Hans/filters/suffix.tid","sum Operator":"zh-Hans/filters/sum Operator.tid","Filter Expression":"zh-Hans/filters/syntax/Filter Expression.tid","Filter Parameter":"zh-Hans/filters/syntax/Filter Parameter.tid","Filter Run Prefix (Examples)":"zh-Hans/filters/syntax/Filter Run Prefix (Examples).tid","Filter Run":"zh-Hans/filters/syntax/Filter Run.tid","Filter Step":"zh-Hans/filters/syntax/Filter Step.tid","Filter Syntax":"zh-Hans/filters/syntax/Filter Syntax.tid","Filter Whitespace":"zh-Hans/filters/syntax/Filter Whitespace.tid","Named Filter Run Prefix":"zh-Hans/filters/syntax/Named Filter Run Prefix.tid","Sort Filter Run Prefix (Examples)":"zh-Hans/filters/syntax/Sort Filter Run Prefix (Examples).tid","Sort Filter Run Prefix":"zh-Hans/filters/syntax/Sort Filter Run Prefix.tid","tag Operator":"zh-Hans/filters/tag.tid","tagging Operator":"zh-Hans/filters/tagging.tid","tags Operator":"zh-Hans/filters/tags.tid","then Operator":"zh-Hans/filters/then Operator.tid","title Operator":"zh-Hans/filters/title.tid","titlecase Operator":"zh-Hans/filters/titlecase Operator.tid","toggle Operator":"zh-Hans/filters/toggle Operator.tid","trim Operator":"zh-Hans/filters/trim Operator.tid","trunc Operator":"zh-Hans/filters/trunc Operator.tid","unique Operator":"zh-Hans/filters/unique.tid","untagged Operator":"zh-Hans/filters/untagged.tid","untrunc Operator":"zh-Hans/filters/untrunc Operator.tid","uppercase Operator":"zh-Hans/filters/uppercase Operator.tid","variables Operator":"zh-Hans/filters/variables.tid","variance Operator":"zh-Hans/filters/variance Operator.tid","GettingStarted - Android":"zh-Hans/gettingstarted/GettingStarted - Android.tid","GettingStarted - Chrome":"zh-Hans/gettingstarted/GettingStarted - Chrome.tid","GettingStarted - Firefox":"zh-Hans/gettingstarted/GettingStarted - Firefox.tid","GettingStarted - Internet Explorer":"zh-Hans/gettingstarted/GettingStarted - Internet Explorer.tid","GettingStarted - iOS":"zh-Hans/gettingstarted/GettingStarted - iOS.tid","GettingStarted - Node.js":"zh-Hans/gettingstarted/GettingStarted - Node.js.tid","GettingStarted - Online":"zh-Hans/gettingstarted/GettingStarted - Online.tid","GettingStarted - Safari":"zh-Hans/gettingstarted/GettingStarted - Safari.tid","GettingStarted":"zh-Hans/gettingstarted/GettingStarted.tid","A Gentle Guide to TiddlyWiki":"zh-Hans/hellothere/A Gentle Guide to TiddlyWiki.tid","Discover TiddlyWiki":"zh-Hans/hellothere/Discover TiddlyWiki.tid","HelloThere":"zh-Hans/hellothere/HelloThere.tid","HelloThumbnail":"zh-Hans/hellothere/HelloThumbnail.tid","Some of the things you can do with TiddlyWiki":"zh-Hans/hellothere/Some of the things you can do with TiddlyWiki.tid","Ten reasons to switch to TiddlyWiki":"zh-Hans/hellothere/Ten reasons to switch to TiddlyWiki.tid","HelloThumbnail - Classic":"zh-Hans/hellothere/thumbnails/HelloThumbnail - Classic.tid","HelloThumbnail - Developers":"zh-Hans/hellothere/thumbnails/HelloThumbnail - Developers.tid","HelloThumbnail - Gentle Guide":"zh-Hans/hellothere/thumbnails/HelloThumbnail - Gentle Guide.tid","HelloThumbnail - Grok TiddlyWiki":"zh-Hans/hellothere/thumbnails/HelloThumbnail - Grok TiddlyWiki.tid","HelloThumbnail - HelpingTiddlyWiki":"zh-Hans/hellothere/thumbnails/HelloThumbnail - HelpingTiddlyWiki.tid","HelloThumbnail - Introduction Video":"zh-Hans/hellothere/thumbnails/HelloThumbnail - Introduction Video.tid","HelloThumbnail - Latest Version":"zh-Hans/hellothere/thumbnails/HelloThumbnail - Latest Version.tid","HelloThumbnail - TiddlyMap":"zh-Hans/hellothere/thumbnails/HelloThumbnail - TiddlyMap.tid","HelloThumbnail - TiddlyWikiLinks":"zh-Hans/hellothere/thumbnails/HelloThumbnail - TiddlyWikiLinks.tid","HelloThumbnail - TWEUM2017":"zh-Hans/hellothere/thumbnails/HelloThumbnail - TWEUM2017.tid","What happened to the original TiddlyWiki?":"zh-Hans/hellothere/What happened to the original TiddlyWiki.tid","Hidden Setting: Default Tiddler Icon":"zh-Hans/hiddensettings/Hidden Setting Default Tiddler Icon.tid","Hidden Setting: Tab Index for Edit-Inputs":"zh-Hans/hiddensettings/Hidden Setting EditTabIndex.tid","Hidden Setting: HTML Parser Sandbox":"zh-Hans/hiddensettings/Hidden Setting HtmlParserDisableSandbox.tid","Hidden Setting: New-Image Type":"zh-Hans/hiddensettings/Hidden Setting NewImageType.tid","Hidden Setting: Filename for Save Wiki Button":"zh-Hans/hiddensettings/Hidden Setting SaveWikiButton Filename.tid","Hidden Setting: Template for Save Wiki Button":"zh-Hans/hiddensettings/Hidden Setting SaveWikiButton Template.tid","Hidden Setting: Navigate on Enter":"zh-Hans/hiddensettings/Hidden Setting Search-NavigateOnEnter.tid","Hidden Setting: Search Minimum Length":"zh-Hans/hiddensettings/Hidden Setting SearchMinLength.tid","Hidden Setting: Sync Polling Interval":"zh-Hans/hiddensettings/Hidden Setting SyncPollingInterval.tid","Hidden Setting: Tags Minimum Length":"zh-Hans/hiddensettings/Hidden Setting TagsMinLength.tid","Hidden Setting: ViewTemplate and EditTemplate":"zh-Hans/hiddensettings/Hidden Setting ViewTemplate and EditTemplate.tid","Hidden Settings":"zh-Hans/hiddensettings/Hidden Settings.tid","Hidden Settings: Import Content Types for Editor":"zh-Hans/hiddensettings/Hidden Settings_ Import Content Types for Editor.tid","Hidden Setting: Disable Drag and Drop":"zh-Hans/hiddensettings/Hidden Setting_ Disable Drag and Drop.tid","Hidden Setting: Disable Lazy Loading":"zh-Hans/hiddensettings/Hidden Setting_ Disable Lazy Loading.tid","Hidden Setting: Enable File Import in Editor":"zh-Hans/hiddensettings/Hidden Setting_ Enable File Import in Editor_1.tid","Hidden Setting: Scroll Top Adjustment":"zh-Hans/hiddensettings/Hidden Setting_ Scroll Top Adjustment.tid","Hidden Setting: Search AutoFocus":"zh-Hans/hiddensettings/Hidden Setting_ Search_AutoFocus.tid","Hidden Setting: Typing Refresh Delay":"zh-Hans/hiddensettings/Hidden Setting_ Typing Refresh Delay.tid","Adding a table of contents to the sidebar":"zh-Hans/howtos/Adding a table of contents to the sidebar.tid","Adding a Twitter Follow button":"zh-Hans/howtos/Adding a Twitter Follow button.tid","Adopt a Titles Policy":"zh-Hans/howtos/Adopt a Titles Policy.tid","Concatenating text and variables using macro substitution":"zh-Hans/howtos/Concatenating text and variables using macro substitution.tid","Configuring the default TiddlerInfo tab":"zh-Hans/howtos/Configuring the default TiddlerInfo tab.tid","Creating a custom export format":"zh-Hans/howtos/Creating a custom export format.tid","Creating a splash screen":"zh-Hans/howtos/Creating a splash screen.tid","Custom styles by data-tiddler-title":"zh-Hans/howtos/Custom Styles by data-tiddler-title.tid","Custom styles by user-class":"zh-Hans/howtos/Custom Styles by userClass.tid","Attribute Selectors":"zh-Hans/howtos/Custom_Attribute_Selectors.tid","Custom data-styles":"zh-Hans/howtos/Custom_data-styles.tid","Custom styles by data-tags":"zh-Hans/howtos/Custom_styles_by_data-tags.tid","Custom Styles FAQ":"zh-Hans/howtos/Custom_Styles_FAQ.tid","Editing Tiddlers with Vim":"zh-Hans/howtos/Editing Tiddlers with Vim.tid","Editor toolbar":"zh-Hans/howtos/Editor toolbar.tid","Q: Is there a way to create dynamic stylesheets?":"zh-Hans/howtos/faq/csFAQ_dynamic_stylesheet.tid","Q: How can I use a custom field to style a tiddler?":"zh-Hans/howtos/faq/csFAQ_how_can_i_use_custom_field.tid","Q: What if a tiddler has no tags?":"zh-Hans/howtos/faq/csFAQ_what_if_tiddler_has_no_tags.tid","Q: How can I style a tiddler if it has \"this\" AND \"that\" tag?":"zh-Hans/howtos/faq/csFAQ_what_this_and_that_tag.tid","Q: How can I style a tiddler if it has \"this\" OR \"that\" tag?":"zh-Hans/howtos/faq/csFAQ_what_this_or_that_tag.tid","Formatting List Results as Tables with CSS - Specified Columns Methods":"zh-Hans/howtos/Formatting List Results as Tables with CSS - Specified Columns Methods.tid","Formatting List Results as Tables with CSS - Variable Column Method":"zh-Hans/howtos/Formatting List Results as Tables with CSS - Variable Column Method.tid","Formatting List Results as Tables (no CSS)":"zh-Hans/howtos/Formatting_List_Results_as_Tables_(no_CSS).tid","Generating Static Sites with TiddlyWiki":"zh-Hans/howtos/Generating Static Sites with TiddlyWiki.tid","Hard Linebreaks with CSS":"zh-Hans/howtos/Hard_Linebreaks_with_CSS.tid","Hard Linebreaks with CSS - Example":"zh-Hans/howtos/Hard_Linebreaks_with_CSS_-_Example.tid","Height of text editor":"zh-Hans/howtos/Height of text editor.tid","How to add a banner for GitHub contributions":"zh-Hans/howtos/How to add a banner for GitHub contributions.tid","How to add a new tab to the sidebar":"zh-Hans/howtos/How to add a new tab to the sidebar.tid","How to apply custom style classes by tag":"zh-Hans/howtos/How to apply custom styles by tag.tid","How to apply custom styles":"zh-Hans/howtos/How to apply custom styles.tid","How to build a TiddlyWiki5 from individual tiddlers":"zh-Hans/howtos/How to build a TiddlyWiki5 from individual tiddlers.tid","How to change the sort order of sub-branches in a TOC macro":"zh-Hans/howtos/How to change the sort order of sub-branches in a TOC macro.tid","How to create a translation for TiddlyWiki":"zh-Hans/howtos/How to create a translation for TiddlyWiki.tid","How to create dynamic editor toolbar buttons":"zh-Hans/howtos/How to create dynamic editor toolbar buttons.tid","How to create keyboard shortcuts":"zh-Hans/howtos/How to create keyboard shortcuts.tid","How to Customize TiddlyDesktop":"zh-Hans/howtos/How to customize TiddlyDesktop.tid","How to embed PDF and other documents":"zh-Hans/howtos/How to embed PDF and other documents.tid","How to export tiddlers":"zh-Hans/howtos/How to export tiddlers.tid","How to hide the author's and other fields with CSS":"zh-Hans/howtos/How to hide the authors and other fields with CSS.tid","How to put the last modification date in a banner":"zh-Hans/howtos/How to put the last modification date in a banner.tid","How to turn off camel case linking":"zh-Hans/howtos/How to turn off camel case linking.tid","How to widen tiddlers (aka storyriver)":"zh-Hans/howtos/How to widen tiddlers (aka story river).tid","Insert link":"zh-Hans/howtos/Insert link.tid","Insert picture":"zh-Hans/howtos/Insert picture.tid","KeyboardShortcuts":"zh-Hans/howtos/KeyboardShortcuts.tid","Making a custom journal button":"zh-Hans/howtos/Making a custom journal button.tid","Making curved text with SVG":"zh-Hans/howtos/Making curved text with SVG.tid","More actions":"zh-Hans/howtos/More actions.tid","Preserving open tiddlers at startup":"zh-Hans/howtos/Preserving open tiddlers at startup.tid","Setting a favicon":"zh-Hans/howtos/Setting a favicon.tid","Setting a page background image":"zh-Hans/howtos/Setting a page background image.tid","Sharing a TiddlyWiki on Dropbox":"zh-Hans/howtos/Sharing a TiddlyWiki on Dropbox.tid","Simple ways to write protect tiddlers":"zh-Hans/howtos/Simple ways to write protect tiddlers.tid","Structuring TiddlyWiki":"zh-Hans/howtos/Structuring TiddlyWiki.tid","$:/SVGExampleRadius":"zh-Hans/howtos/SVGExampleRadius.tid","Tagging":"zh-Hans/howtos/Tagging.tid","Text preview":"zh-Hans/howtos/Text preview.tid","The First Rule of Using TiddlyWiki":"zh-Hans/howtos/The First Rule of Using TiddlyWiki.tid","Upgrading":"zh-Hans/howtos/Upgrading.tid","Using a custom path prefix with the client-server edition":"zh-Hans/howtos/Using a custom path prefix with the client-server edition.tid","Using Excise":"zh-Hans/howtos/Using Excise.tid","Using Stamp":"zh-Hans/howtos/Using Stamp.tid","Using Stylesheets":"zh-Hans/howtos/Using Stylesheets.tid","UsingSVG":"zh-Hans/howtos/Using SVG.tid","Windows HTA Hack":"zh-Hans/howtos/Windows HTA Hack.tid","Dev Thumbnail.jpg":"zh-Hans/images/Dev Thumbnail.jpg.tid","Grok TiddlyWiki Banner":"zh-Hans/images/Grok TiddlyWiki.png","Introduction Video Thumbnail.jpg":"zh-Hans/images/Introduction Video Thumbnail.jpg.tid","Pinstripe.gif":"zh-Hans/images/Pinstripe.gif","Startup Modules.svg":"zh-Hans/images/Startup Modules.svg","Tiddler Fishes.svg":"zh-Hans/images/Tiddler Fishes.min.svg","Tiddler Poster.png":"zh-Hans/images/Tiddler Poster.png.tid","TiddlyFox Apocalypse.png":"zh-Hans/images/TiddlyFox Apocalypse.png.tid","TiddlyMap.png":"zh-Hans/images/TiddlyMap.png.tid","TiddlyWiki Architecture.svg":"zh-Hans/images/TiddlyWiki Architecture.svg","TiddlyWiki Classic.png":"zh-Hans/images/TiddlyWiki Classic.png.tid","TiddlyWikiLinks":"zh-Hans/images/TiddlyWikiLinks.png.tid","TWEUM Thumbnail.jpg":"zh-Hans/images/TWEUM Thumbnail.jpg.tid","Key Codes (Example 1)":"zh-Hans/Key Codes (Example 1).tid","Key Codes (Example)":"zh-Hans/Key Codes (Example).tid","Keyboard Codes (Macros)":"zh-Hans/Keyboard Codes (Macros).tid","Keyboard Codes":"zh-Hans/Keyboard Codes.tid","Edición en Castellano":"zh-Hans/languages/Castellano (Espana) Edition.tid","Chinese (Simplified) Edition":"zh-Hans/languages/Chinese (Simplified) Edition.tid","Chinese (Traditional) Edition":"zh-Hans/languages/Chinese (Traditional) Edition.tid","French (France) Edition":"zh-Hans/languages/French (France) Edition.tid","German (Austria) Edition":"zh-Hans/languages/German (Austria) Edition.tid","German (Germany) Edition":"zh-Hans/languages/German (Germany) Edition.tid","Japanese (Japan) Edition":"zh-Hans/languages/Japanese (Japan) Edition.tid","Korean (Korea Republic) Edition":"zh-Hans/languages/Korean (Korea Republic) Edition.tid","LanguageGallery":"zh-Hans/languages/LanguageGallery.tid","Languages":"zh-Hans/languages/Languages.tid","Copying tiddlers between TiddlyWiki files":"zh-Hans/learning/Copying tiddlers between TiddlyWiki files.tid","Introduction to Lists":"zh-Hans/learning/Introduction to Lists.tid","Learning":"zh-Hans/learning/Learning.tid","License":"zh-Hans/License.tid","changecount Macro":"zh-Hans/macros/ChangeCountMacro.tid","colour-picker Macro":"zh-Hans/macros/colour-picker Macro.tid","colour Macro":"zh-Hans/macros/ColourMacro.tid","contrastcolour Macro":"zh-Hans/macros/ContrastColourMacro.tid","copy-to-clipboard Macro":"zh-Hans/macros/copy-to-clipboard Macro.tid","Core Macros":"zh-Hans/macros/CoreMacros.tid","csvtiddlers Macro":"zh-Hans/macros/CsvTiddlersMacro.tid","datauri Macro":"zh-Hans/macros/DataUriMacro.tid","dumpvariables Macro":"zh-Hans/macros/DumpVariablesMacro.tid","changecount Macro (Examples)":"zh-Hans/macros/examples/changecount.tid","colour-picker Macro (Example 1)":"zh-Hans/macros/examples/colour-picker Macro (Example 1).tid","colour-picker Macro (Examples)":"zh-Hans/macros/examples/colour-picker Macro (Examples).tid","colour Macro (Examples)":"zh-Hans/macros/examples/colour.tid","copy-to-clipboard Macro (Examples)":"zh-Hans/macros/examples/copy-to-clipboard Macro (Examples).tid","datauri Macro (Examples)":"zh-Hans/macros/examples/datauri.tid","dumpvariables Macro (Examples)":"zh-Hans/macros/examples/dumpvariables.tid","image-picker Macro (Example 1)":"zh-Hans/macros/examples/image-picker Macro (Example 1).tid","image-picker Macro (Example 2)":"zh-Hans/macros/examples/image-picker Macro (Example 2).tid","image-picker Macro (Examples)":"zh-Hans/macros/examples/image-picker Macro (Examples).tid","lingo Macro (Examples)":"zh-Hans/macros/examples/lingo.tid","list-links-draggable Macro (Examples)":"zh-Hans/macros/examples/list-links-draggable Macro (Examples).tid","list-links Macro (Examples)":"zh-Hans/macros/examples/list-links.tid","list-tagged-draggable Macro (Examples)":"zh-Hans/macros/examples/list-tagged-draggable Macro (Examples).tid","list-thumbnails Macro (Examples)":"zh-Hans/macros/examples/list-thumbnails Macro (Examples).tid","Macro Calls in WikiText (Examples)":"zh-Hans/macros/examples/Macro Calls.tid","makedatauri Macro (Examples)":"zh-Hans/macros/examples/makedatauri.tid","now Macro (Examples)":"zh-Hans/macros/examples/now.tid","$:/editions/tw5.com/macro-examples/qualify-transcluded":"zh-Hans/macros/examples/qualify-transcluded.tid","qualify Macro (Examples)":"zh-Hans/macros/examples/qualify.tid","resolvepath Macro (Examples)":"zh-Hans/macros/examples/resolvepath.tid","tabs Macro (Examples)":"zh-Hans/macros/examples/tabs.tid","tag Macro (Examples)":"zh-Hans/macros/examples/tag.tid","thumbnail Macro (Examples)":"zh-Hans/macros/examples/thumbnail Macro (Examples).tid","timeline Macro (Examples)":"zh-Hans/macros/examples/timeline.tid","Table-of-Contents Macros (Examples)":"zh-Hans/macros/examples/toc.tid","tree Macro (Examples)":"zh-Hans/macros/examples/tree Macro (Examples).tid","tree-macro-example-房子":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-房子-厨房":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-房子-厨房-桌子":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-房子-厨房-水槽":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-房子-厨房-窗户":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-房子-阁楼":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-房子-阁楼-窗户":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-房子-阁楼-屋顶":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-房子-花园":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-房子-花园-棚子":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-房子-花园-草坪":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-汽车":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-汽车-启动":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-汽车-启动-锁":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-汽车-启动-扶手":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-汽车-车顶":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-汽车-车顶-轨道":"zh-Hans/macros/examples/tree-macro-example-data.multids","tree-macro-example-汽车-车顶-天线":"zh-Hans/macros/examples/tree-macro-example-data.multids","unusedtitle Macro (Examples 1)":"zh-Hans/macros/examples/unusedtitle Macro (Examples 1).tid","unusedtitle Macro (Examples)":"zh-Hans/macros/examples/unusedtitle.tid","version Macro (Examples)":"zh-Hans/macros/examples/version.tid","image-picker Macro":"zh-Hans/macros/image-picker Macro.tid","$:/editions/tw5.com/macro-examples/say-hi-using-variables":"zh-Hans/macros/import/say-hi-using-variables.tid","$:/editions/tw5.com/macro-examples/say-hi":"zh-Hans/macros/import/say-hi.tid","$:/editions/tw5.com/macro-examples/tags-of-current-tiddler":"zh-Hans/macros/import/tags-of-current-tiddler.tid","$:/editions/tw5.com/macro-examples/tv-get-export-image-link":"zh-Hans/macros/import/tv-get-export-image-link.tid","$:/editions/tw5.com/macro-examples/tv-wikilink-tooltip":"zh-Hans/macros/import/tv-wikilink-tooltip.tid","jsontiddler Macro":"zh-Hans/macros/jsontiddler Macro.tid","jsontiddlers Macro":"zh-Hans/macros/JsonTiddlersMacro.tid","keyboard-driven-input Macro":"zh-Hans/macros/keyboard-driven-input_Macro.tid","lingo Macro":"zh-Hans/macros/LingoMacro.tid","list-links-draggable Macro":"zh-Hans/macros/list-links-draggable Macro.tid","list-tagged-draggable Macro":"zh-Hans/macros/list-tagged-draggable Macro.tid","list-thumbnails Macro":"zh-Hans/macros/list-thumbnails Macro.tid","list-links Macro":"zh-Hans/macros/ListMacro.tid","makedatauri Macro":"zh-Hans/macros/MakeDataUriMacro.tid","now Macro":"zh-Hans/macros/NowMacro.tid","qualify Macro":"zh-Hans/macros/QualifyMacro.tid","resolvepath Macro":"zh-Hans/macros/ResolvePath.tid","Stylesheet Macros":"zh-Hans/macros/StylesheetMacros.tid","Macro Call Syntax":"zh-Hans/macros/syntax/Macro Call Syntax.tid","Macro Definition Syntax":"zh-Hans/macros/syntax/Macro Definition Syntax.tid","Macro Syntax":"zh-Hans/macros/syntax/Macro Syntax.tid","$:/editions/tw5.com/railroad/macro-parameter-value":"zh-Hans/macros/syntax/MacroParameterValue.tid","Table-of-Contents Macros":"zh-Hans/macros/TableOfContentsMacro.tid","tabs Macro":"zh-Hans/macros/TabsMacro.tid","tag-picker Macro":"zh-Hans/macros/tag-picker_Macro.tid","tag-pill Macro":"zh-Hans/macros/tag-pill_Macro.tid","tag Macro":"zh-Hans/macros/TagMacro.tid","thumbnail Macro":"zh-Hans/macros/thumbnail Macro.tid","timeline Macro":"zh-Hans/macros/TimelineMacro.tid","tree Macro":"zh-Hans/macros/tree Macro.tid","unusedtitle Macro":"zh-Hans/macros/UnusedTitleMacro.tid","version Macro":"zh-Hans/macros/VersionMacro.tid","AlertMechanism":"zh-Hans/mechanisms/AlertMechanism.tid","DraftMechanism":"zh-Hans/mechanisms/DraftMechanism.tid","DragAndDropMechanism":"zh-Hans/mechanisms/DragAndDropMechanism.tid","EncryptionMechanism":"zh-Hans/mechanisms/EncryptionMechanism.tid","HistoryMechanism":"zh-Hans/mechanisms/HistoryMechanism.tid","InfoMechanism":"zh-Hans/mechanisms/InfoMechanism.tid","LazyLoadingMechanism":"zh-Hans/mechanisms/LazyLoadingMechanism.tid","Mechanisms":"zh-Hans/mechanisms/Mechanisms.tid","ParsingMechanism":"zh-Hans/mechanisms/ParsingMechanism.tid","PluginMechanism":"zh-Hans/mechanisms/PluginMechanism.tid","PopupMechanism":"zh-Hans/mechanisms/PopupMechanism.tid","RefreshMechanism":"zh-Hans/mechanisms/RefreshMechanism.tid","RefreshThrottling":"zh-Hans/mechanisms/RefreshThrottling.tid","SavingMechanism":"zh-Hans/mechanisms/SavingMechanism.tid","StartupMechanism":"zh-Hans/mechanisms/StartupMechanism.tid","StateMechanism":"zh-Hans/mechanisms/StateMechanism.tid","TranslationMechanism":"zh-Hans/mechanisms/TranslationMechanism.tid","UpgradeMechanism":"zh-Hans/mechanisms/UpgradeMechanism.tid","WikificationMechanism":"zh-Hans/mechanisms/WikificationMechanism.tid","$:/editions/tw5.com/menuitems/gettingstarted":"zh-Hans/menubar/gettingstarted.tid","$:/tags/MenuBar":"zh-Hans/menubar/tagsMenuBar.tid","SampleModal":"zh-Hans/messages/SampleModal.tid","WidgetMessage: tm-add-field":"zh-Hans/messages/WidgetMessage_ tm-add-field.tid","WidgetMessage: tm-add-tag":"zh-Hans/messages/WidgetMessage_ tm-add-tag.tid","WidgetMessage: tm-auto-save-wiki":"zh-Hans/messages/WidgetMessage_ tm-auto-save-wiki.tid","WidgetMessage: tm-browser-refresh":"zh-Hans/messages/WidgetMessage_ tm-browser-refresh.tid","WidgetMessage: tm-cancel-tiddler":"zh-Hans/messages/WidgetMessage_ tm-cancel-tiddler.tid","WidgetMessage: tm-clear-password":"zh-Hans/messages/WidgetMessage_ tm-clear-password.tid","WidgetMessage: tm-close-all-tiddlers":"zh-Hans/messages/WidgetMessage_ tm-close-all-tiddlers.tid","WidgetMessage: tm-close-other-tiddlers":"zh-Hans/messages/WidgetMessage_ tm-close-other-tiddlers.tid","WidgetMessage: tm-close-tiddler":"zh-Hans/messages/WidgetMessage_ tm-close-tiddler.tid","WidgetMessage: tm-copy-to-clipboard":"zh-Hans/messages/WidgetMessage_ tm-copy-to-clipboard.tid","WidgetMessage: tm-delete-tiddler":"zh-Hans/messages/WidgetMessage_ tm-delete-tiddler.tid","WidgetMessage: tm-download-file":"zh-Hans/messages/WidgetMessage_ tm-download-file.tid","WidgetMessage: tm-edit-bitmap-operation":"zh-Hans/messages/WidgetMessage_ tm-edit-bitmap-operation.tid","WidgetMessage: tm-edit-text-operation":"zh-Hans/messages/WidgetMessage_ tm-edit-text-operation.tid","WidgetMessage: tm-edit-tiddler":"zh-Hans/messages/WidgetMessage_ tm-edit-tiddler.tid","WidgetMessage: tm-focus-selector":"zh-Hans/messages/WidgetMessage_ tm-focus-selector.tid","WidgetMessage: tm-fold-all-tiddlers":"zh-Hans/messages/WidgetMessage_ tm-fold-all-tiddlers.tid","WidgetMessage: tm-fold-other-tiddlers":"zh-Hans/messages/WidgetMessage_ tm-fold-other-tiddlers.tid","WidgetMessage: tm-fold-tiddler":"zh-Hans/messages/WidgetMessage_ tm-fold-tiddler.tid","WidgetMessage: tm-full-screen":"zh-Hans/messages/WidgetMessage_ tm-full-screen.tid","WidgetMessage: tm-home":"zh-Hans/messages/WidgetMessage_ tm-home.tid","WidgetMessage: tm-import-tiddlers":"zh-Hans/messages/WidgetMessage_ tm-import-tiddlers.tid","WidgetMessage: tm-load-plugin-from-library":"zh-Hans/messages/WidgetMessage_ tm-load-plugin-from-library.tid","WidgetMessage: tm-load-plugin-library":"zh-Hans/messages/WidgetMessage_ tm-load-plugin-library.tid","WidgetMessage: tm-login":"zh-Hans/messages/WidgetMessage_ tm-login.tid","WidgetMessage: tm-logout":"zh-Hans/messages/WidgetMessage_ tm-logout.tid","WidgetMessage: tm-modal":"zh-Hans/messages/WidgetMessage_ tm-modal.tid","WidgetMessage: tm-navigate":"zh-Hans/messages/WidgetMessage_ tm-navigate.tid","WidgetMessage: tm-new-tiddler":"zh-Hans/messages/WidgetMessage_ tm-new-tiddler.tid","WidgetMessage: tm-notify":"zh-Hans/messages/WidgetMessage_ tm-notify.tid","WidgetMessage: tm-open-external-window":"zh-Hans/messages/WidgetMessage_ tm-open-external-window.tid","WidgetMessage: tm-open-window":"zh-Hans/messages/WidgetMessage_ tm-open-window.tid","WidgetMessage: tm-perform-import":"zh-Hans/messages/WidgetMessage_ tm-perform-import.tid","WidgetMessage: tm-permalink":"zh-Hans/messages/WidgetMessage_ tm-permalink.tid","WidgetMessage: tm-permaview":"zh-Hans/messages/WidgetMessage_ tm-permaview.tid","WidgetMessage: tm-print":"zh-Hans/messages/WidgetMessage_ tm-print.tid","WidgetMessage: tm-remove-field":"zh-Hans/messages/WidgetMessage_ tm-remove-field.tid","WidgetMessage: tm-remove-tag":"zh-Hans/messages/WidgetMessage_ tm-remove-tag.tid","WidgetMessage: tm-rename-tiddler":"zh-Hans/messages/WidgetMessage_ tm-rename-tiddler.tid","WidgetMessage: tm-save-tiddler":"zh-Hans/messages/WidgetMessage_ tm-save-tiddler.tid","WidgetMessage: tm-save-wiki":"zh-Hans/messages/WidgetMessage_ tm-save-wiki.tid","WidgetMessage: tm-scroll":"zh-Hans/messages/WidgetMessage_ tm-scroll.tid","WidgetMessage: tm-server-refresh":"zh-Hans/messages/WidgetMessage_ tm-server-refresh.tid","WidgetMessage: tm-set-password":"zh-Hans/messages/WidgetMessage_ tm-set-password.tid","WidgetMessage: tm-unfold-all-tiddlers":"zh-Hans/messages/WidgetMessage_ tm-unfold-all-tiddlers.tid","WidgetMessage: tm-unload-plugin-library":"zh-Hans/messages/WidgetMessage_ tm-unload-plugin-library.tid","Building TiddlyWikiClassic":"zh-Hans/nodejs/Building TiddlyWikiClassic.tid","Customising Tiddler File Naming":"zh-Hans/nodejs/Customising Tiddler File Naming.tid","Environment Variables on Node.js":"zh-Hans/nodejs/Environment Variables on Node.js.tid","Installing custom plugins on Node.js":"zh-Hans/nodejs/Installing custom plugins on Node.js.tid","Installing TiddlyWiki on Node.js":"zh-Hans/nodejs/Installing TiddlyWiki on Node.js.tid","Installing TiddlyWiki Prerelease on Node.js":"zh-Hans/nodejs/Installing TiddlyWiki Prerelease on Node.js.tid","Naming of System Tiddlers":"zh-Hans/nodejs/Naming of System Tiddlers.tid","Scripts for TiddlyWiki on Node.js":"zh-Hans/nodejs/Scripts for TiddlyWiki on Node.js.tid","Serving TW5 from Android":"zh-Hans/nodejs/Serving TW5 from Android.tid","TiddlyWiki on Node.js":"zh-Hans/nodejs/TiddlyWiki on Node.js.tid","tiddlywiki.files Files":"zh-Hans/nodejs/tiddlywiki.files_Files.tid","tiddlywiki.info Files":"zh-Hans/nodejs/tiddlywiki.info_Files.tid","Upgrading TiddlyWiki on Node.js":"zh-Hans/nodejs/Upgrading TiddlyWiki on Node.js.tid","Using TiddlyWiki on Node.js":"zh-Hans/nodejs/Using TiddlyWiki on Node.js.tid","Working with the TiddlyWiki5 repository":"zh-Hans/nodejs/Working with the TiddlyWiki5 repository.tid","Beaker Browser":"zh-Hans/platforms/Beaker_Browser.tid","Platforms":"zh-Hans/platforms/Platforms.tid","TiddlyFox Apocalypse":"zh-Hans/platforms/TiddlyFox Apocalypse.tid","TiddlyWiki in the Sky for TiddlyWeb":"zh-Hans/platforms/TiddlyWiki in the Sky for TiddlyWeb.tid","Amazon Web Services Plugin":"zh-Hans/plugins/Amazon Web Services Plugin.tid","CodeMirror Plugin":"zh-Hans/plugins/CodeMirror Plugin.tid","Consent Banner Plugin":"zh-Hans/plugins/Consent Banner Plugin.tid","D3 Plugin":"zh-Hans/plugins/D3 Plugin.tid","Disabling Plugins":"zh-Hans/plugins/Disabling_Plugins.tid","Dynaview Plugin":"zh-Hans/plugins/Dynaview Plugin.tid","External Attachments Plugin":"zh-Hans/plugins/External Attachments Plugin.tid","Highlight Plugin":"zh-Hans/plugins/Highlight Plugin.tid","Innerwiki Plugin":"zh-Hans/plugins/Innerwiki Plugin.tid","Installing a plugin from the plugin library":"zh-Hans/plugins/Installing a plugin from the plugin library.tid","JSZip Plugin":"zh-Hans/plugins/JSZip Plugin.tid","KaTeX Plugin":"zh-Hans/plugins/KaTeX Plugin.tid","Manually installing a plugin":"zh-Hans/plugins/Manually installing a plugin.tid","Markdown Plugin":"zh-Hans/plugins/Markdown Plugin.tid","Mobile Drag And Drop Shim Plugin":"zh-Hans/plugins/Mobile Drag And Drop Shim Plugin.tid","OfficialPlugins":"zh-Hans/plugins/OfficialPlugins.tid","Plugin Dependencies":"zh-Hans/plugins/Plugin Dependencies.tid","Plugin Editions":"zh-Hans/plugins/Plugin Editions.tid","Plugin Types":"zh-Hans/plugins/Plugin Types.tid","PluginFolders":"zh-Hans/plugins/PluginFolders.tid","Plugins":"zh-Hans/plugins/Plugins.tid","Plugin Fields":"zh-Hans/plugins/Plugin_Fields.tid","Plugin Information Tiddlers":"zh-Hans/plugins/Plugin_Information_Tiddlers.tid","Railroad Plugin":"zh-Hans/plugins/Railroad Plugin.tid","SaveTrail Plugin":"zh-Hans/plugins/SaveTrail Plugin.tid","Share Plugin":"zh-Hans/plugins/Share Plugin.tid","TW2Parser Plugin":"zh-Hans/plugins/TW2Parser Plugin.tid","Twitter Plugin":"zh-Hans/plugins/Twitter Plugin.tid","Uninstalling a plugin":"zh-Hans/plugins/Uninstalling a plugin.tid","ContributingTemplate":"zh-Hans/readme/ContributingTemplate.tid","ReadMe":"zh-Hans/readme/ReadMe.tid","ReadMeBinFolder":"zh-Hans/readme/ReadMeBinFolder.tid","TiddlyWiki2ReadMe":"zh-Hans/readme/TiddlyWiki2ReadMe.tid","Reference":"zh-Hans/reference/Reference.tid","AlphaReleases":"zh-Hans/releasenotes/alpha/AlphaReleases.tid","BetaReleases":"zh-Hans/releasenotes/beta/BetaReleases.tid","Release 5.0.11-beta":"zh-Hans/releasenotes/beta/Release 5.0.11beta.tid","Release 5.0.12-beta":"zh-Hans/releasenotes/beta/Release 5.0.12beta.tid","Release 5.0.13-beta":"zh-Hans/releasenotes/beta/Release 5.0.13beta.tid","Release 5.0.14-beta":"zh-Hans/releasenotes/beta/Release 5.0.14beta.tid","Release 5.0.15-beta":"zh-Hans/releasenotes/beta/Release 5.0.15beta.tid","Release 5.0.16-beta":"zh-Hans/releasenotes/beta/Release 5.0.16beta.tid","Release 5.0.17-beta":"zh-Hans/releasenotes/beta/Release 5.0.17beta.tid","Release 5.0.18-beta":"zh-Hans/releasenotes/beta/Release 5.0.18beta.tid","Release 5.1.0":"zh-Hans/releasenotes/Release 5.1.0.tid","Release 5.1.1":"zh-Hans/releasenotes/Release 5.1.1.tid","Release 5.1.10":"zh-Hans/releasenotes/Release 5.1.10.tid","Release 5.1.11":"zh-Hans/releasenotes/Release 5.1.11.tid","Release 5.1.12":"zh-Hans/releasenotes/Release 5.1.12.tid","Release 5.1.13":"zh-Hans/releasenotes/Release 5.1.13.tid","Release 5.1.14":"zh-Hans/releasenotes/Release 5.1.14.tid","Release 5.1.15":"zh-Hans/releasenotes/Release 5.1.15.tid","Release 5.1.16":"zh-Hans/releasenotes/Release 5.1.16.tid","Release 5.1.17":"zh-Hans/releasenotes/Release 5.1.17.tid","Release 5.1.18":"zh-Hans/releasenotes/Release 5.1.18.tid","Release 5.1.19":"zh-Hans/releasenotes/Release 5.1.19.tid","Release 5.1.2":"zh-Hans/releasenotes/Release 5.1.2.tid","Release 5.1.20":"zh-Hans/releasenotes/Release 5.1.20.tid","Release 5.1.21":"zh-Hans/releasenotes/Release 5.1.21.tid","Release 5.1.22":"zh-Hans/releasenotes/Release 5.1.22.tid","Release 5.1.23":"zh-Hans/releasenotes/Release 5.1.23.tid","Release 5.1.24":"zh-Hans/releasenotes/Release 5.1.24.tid","Release 5.1.3":"zh-Hans/releasenotes/Release 5.1.3.tid","Release 5.1.4":"zh-Hans/releasenotes/Release 5.1.4.tid","Release 5.1.5":"zh-Hans/releasenotes/Release 5.1.5.tid","Release 5.1.6":"zh-Hans/releasenotes/Release 5.1.6.tid","Release 5.1.7":"zh-Hans/releasenotes/Release 5.1.7.tid","Release 5.1.8":"zh-Hans/releasenotes/Release 5.1.8.tid","Release 5.1.9":"zh-Hans/releasenotes/Release 5.1.9.tid","Releases":"zh-Hans/releasenotes/Releases.tid","ReleaseTemplate":"zh-Hans/releasenotes/ReleaseTemplate.tid","$:/SavingThumbnailsStyles":"zh-Hans/saving/SavingThumbnailsStyles.tid","TiddlyWiki Releases":"zh-Hans/releasenotes/TiddlyWiki Releases.tid","TiddlyWiki5 Versioning":"zh-Hans/releasenotes/TiddlyWiki5 Versioning.tid","RoadMap":"zh-Hans/roadmap/RoadMap.tid","Encryption":"zh-Hans/saving/Encryption.tid","Example config-tiddlyweb-host for IIS":"zh-Hans/saving/Example config-tiddlyweb-host for IIS.txt","Example package.json for IIS":"zh-Hans/saving/Example package.json for IIS.txt","Example tiddlywiki.info for IIS":"zh-Hans/saving/Example tiddlywiki.info for IIS.txt","Example web.config - arguments for IIS":"zh-Hans/saving/Example web.config - arguments for IIS.tid","Example web.config for IIS":"zh-Hans/saving/Example web.config for IIS.txt","Installing TiddlyWiki on Microsoft Internet Information Server":"zh-Hans/saving/Installing TiddlyWiki on Microsoft Internet Information Server.tid","Saving on a PHP Server":"zh-Hans/saving/Saving on a PHP Server.tid","Saving on Android":"zh-Hans/saving/Saving on Android.tid","Saving on Beaker Browser":"zh-Hans/saving/Saving on Beaker Browser.tid","Saving on iPad/iPhone":"zh-Hans/saving/Saving on iPad_iPhone.tid","Saving on TiddlyDesktop":"zh-Hans/saving/Saving on TiddlyDesktop.tid","Saving on TiddlyHost":"zh-Hans/saving/Saving on TiddlyHost.tid","Saving on TiddlySpot":"zh-Hans/saving/Saving on TiddlySpot.tid","Saving to a Git service":"zh-Hans/saving/Saving to a Git service.tid","Saving via a Minimal Ruby Server":"zh-Hans/saving/Saving via minimal Ruby server.tid","Saving via WebDAV":"zh-Hans/saving/Saving via WebDAV.tid","Saving with the HTML5 fallback saver":"zh-Hans/saving/Saving with the HTML5 fallback saver.tid","Saving with TiddlyFox on Android":"zh-Hans/saving/Saving with TiddlyFox on Android.tid","Saving with TiddlyFox":"zh-Hans/saving/Saving with TiddlyFox.tid","Saving with TiddlyIE":"zh-Hans/saving/Saving with TiddlyIE.tid","Saving with TW Receiver":"zh-Hans/saving/Saving with TW Receiver.tid","Saving":"zh-Hans/saving/Saving.tid","$:/SavingDetailsFilter":"zh-Hans/saving/SavingDetailsFilter.tid","$:/SavingDetailsTemplate":"zh-Hans/saving/SavingDetailsTemplate.tid","$:/SavingThumbnailsTemplate":"zh-Hans/saving/SavingThumbnailsTemplate.tid","TiddlyWiki Cloud":"zh-Hans/saving/TiddlyWiki in the Sky for Dropbox.tid","Documentation Macros":"zh-Hans/styleguide/Documentation Macros.tid","Documentation Style Guide":"zh-Hans/styleguide/Documentation Style Guide.tid","Instruction Tiddlers":"zh-Hans/styleguide/Instruction Tiddlers.tid","Reference Tiddlers":"zh-Hans/styleguide/Reference Tiddlers.tid","Spelling":"zh-Hans/styleguide/Spelling.tid","Technical Prose Style":"zh-Hans/styleguide/Technical Prose Style.tid","Tiddler Structure":"zh-Hans/styleguide/Tiddler Structure.tid","Tiddler Title Policy":"zh-Hans/styleguide/Tiddler Title Policy.tid","Typography":"zh-Hans/styleguide/Typography.tid","$:/build":"zh-Hans/system/$__build.tid","$:/SplashScreen":"zh-Hans/system/$__SplashScreen.tid","$:/ContributionBanner":"zh-Hans/system/ContributionBanner.tid","$:/DefaultTiddlers":"zh-Hans/system/DefaultTiddlers.tid","$:/deprecated":"zh-Hans/system/Deprecated.tid","Deprecated - What does it mean":"zh-Hans/system/Deprecated_-_What_does_it_mean.tid","$:/editions/tw5.com/doc-macros":"zh-Hans/system/doc-macros.tid","$:/editions/tw5.com/doc-styles":"zh-Hans/system/doc-styles.tid","$:/editions/zh-Hans/snippets/download-empty-button":"zh-Hans/system/download-empty-button-zh-Hans.tid","$:/editions/zh-Hant/snippets/download-empty-button":"zh-Hans/system/download-empty-button-zh-Hant.tid","$:/editions/en-US/snippets/download-empty-button":"zh-Hans/system/download-empty-button.tid","$:/editions/zh-Hans/download-empty":"zh-Hans/system/download-empty-zh-Hans.tid","$:/editions/zh-Hant/download-empty":"zh-Hans/system/download-empty-zh-Hant.tid","$:/editions/en-US/download-empty":"zh-Hans/system/download-empty.tid","$:/edition/tw5.com/dropbox-url.js":"zh-Hans/system/dropbox-url-macro.js","$:/editions/tw5.com/if-macro.js":"zh-Hans/system/if-macro.js","$:/language":"zh-Hans/system/language.tid","$:/editions/tw5.com/operator-macros":"zh-Hans/system/operator-macros.tid","$:/editions/tw5.com/operator-template":"zh-Hans/system/operator-template.tid","ReverseChronologicalSearchResultList":"zh-Hans/system/ReverseChronologicalSearchResultList.tid","$:/SiteSubtitle":"zh-Hans/system/SiteSubtitle.tid","$:/SiteTitle":"zh-Hans/system/SiteTitle.tid","$:/editions/zh-Hant/TiddlerInfo/Sources":"zh-Hans/system/Sources.tid","$:/themes/tiddlywiki/vanilla/options/stickytitles":"zh-Hans/system/stickytitles.tid","$:/editions/tw5.com/style-guide-macros":"zh-Hans/system/style-guide-macros.tid","StyleSiteTitle":"zh-Hans/system/StyleSiteTitle.tid","$:/_tw5.com-card-template":"zh-Hans/system/tw5.com-card-template.tid","$:/_tw5.com-styles":"zh-Hans/system/tw5.com-styles.tid","$:/editions/tw5.com/variable-macros":"zh-Hans/system/variable-macros.tid","$:/editions/tw5.com/version-macros":"zh-Hans/system/version-macros.tid","$:/editions/tw5.com/wikitext-macros":"zh-Hans/system/wikitext-macros.tid","SystemTag: $:/tags/AboveStory":"zh-Hans/systemtags/SystemTag_ $__tags_AboveStory.tid","SystemTag: $:/tags/AdvancedSearch":"zh-Hans/systemtags/SystemTag_ $__tags_AdvancedSearch.tid","SystemTag: $:/tags/AdvancedSearch/FilterButton":"zh-Hans/systemtags/SystemTag_ $__tags_AdvancedSearch_FilterButton.tid","SystemTag: $:/tags/Alert":"zh-Hans/systemtags/SystemTag_ $__tags_Alert.tid","SystemTag: $:/tags/BelowStory":"zh-Hans/systemtags/SystemTag_ $__tags_BelowStory.tid","SystemTag: $:/tags/ControlPanel":"zh-Hans/systemtags/SystemTag_ $__tags_ControlPanel.tid","SystemTag: $:/tags/ControlPanel/Advanced":"zh-Hans/systemtags/SystemTag_ $__tags_ControlPanel_Advanced.tid","SystemTag: $:/tags/ControlPanel/Appearance":"zh-Hans/systemtags/SystemTag_ $__tags_ControlPanel_Appearance.tid","SystemTag: $:/tags/ControlPanel/Info":"zh-Hans/systemtags/SystemTag_ $__tags_ControlPanel_Info.tid","SystemTag: $:/tags/ControlPanel/Saving":"zh-Hans/systemtags/SystemTag_ $__tags_ControlPanel_Saving.tid","SystemTag: $:/tags/ControlPanel/Settings":"zh-Hans/systemtags/SystemTag_ $__tags_ControlPanel_Settings.tid","SystemTag: $:/tags/ControlPanel/Toolbars":"zh-Hans/systemtags/SystemTag_ $__tags_ControlPanel_Toolbars.tid","SystemTag: $:/tags/EditorToolbar":"zh-Hans/systemtags/SystemTag_ $__tags_EditorToolbar.tid","SystemTag: $:/tags/EditorTools":"zh-Hans/systemtags/SystemTag_ $__tags_EditorTools.tid","SystemTag: $:/tags/EditPreview":"zh-Hans/systemtags/SystemTag_ $__tags_EditPreview.tid","SystemTag: $:/tags/EditTemplate":"zh-Hans/systemtags/SystemTag_ $__tags_EditTemplate.tid","SystemTag: $:/tags/EditToolbar":"zh-Hans/systemtags/SystemTag_ $__tags_EditToolbar.tid","SystemTag: $:/tags/Exporter":"zh-Hans/systemtags/SystemTag_ $__tags_Exporter.tid","SystemTag: $:/tags/Filter":"zh-Hans/systemtags/SystemTag_ $__tags_Filter.tid","SystemTag: $:/tags/Image":"zh-Hans/systemtags/SystemTag_ $__tags_Image.tid","SystemTag: $:/tags/ImportPreview":"zh-Hans/systemtags/SystemTag_ $__tags_ImportPreview.tid","SystemTag: $:/tags/KeyboardShortcut":"zh-Hans/systemtags/SystemTag_ $__tags_KeyboardShortcut.tid","SystemTag: $:/tags/Layout":"zh-Hans/systemtags/SystemTag_ $__tags_Layout.tid","SystemTag: $:/tags/Macro":"zh-Hans/systemtags/SystemTag_ $__tags_Macro.tid","SystemTag: $:/tags/Macro/View":"zh-Hans/systemtags/SystemTag_ $__tags_Macro_View.tid","SystemTag: $:/tags/Manager/ItemMain":"zh-Hans/systemtags/SystemTag_ $__tags_Manager_ItemMain.tid","SystemTag: $:/tags/Manager/ItemSidebar":"zh-Hans/systemtags/SystemTag_ $__tags_Manager_ItemSidebar.tid","SystemTag: $:/tags/MoreSideBar":"zh-Hans/systemtags/SystemTag_ $__tags_MoreSideBar.tid","SystemTag: $:/tags/MoreSideBar/Plugins":"zh-Hans/systemtags/SystemTag_ $__tags_MoreSideBar_Plugins.tid","SystemTag: $:/tags/PageControls":"zh-Hans/systemtags/SystemTag_ $__tags_PageControls.tid","SystemTag: $:/tags/PageTemplate":"zh-Hans/systemtags/SystemTag_ $__tags_PageTemplate.tid","SystemTag: $:/tags/Palette":"zh-Hans/systemtags/SystemTag_ $__tags_Palette.tid","SystemTag: $:/tags/PluginLibrary":"zh-Hans/systemtags/SystemTag_ $__tags_PluginLibrary.tid","SystemTag: $:/tags/RawMarkup":"zh-Hans/systemtags/SystemTag_ $__tags_RawMarkup.tid","SystemTag: $:/tags/RawMarkupWikified":"zh-Hans/systemtags/SystemTag_ $__tags_RawMarkupWikified.tid","SystemTag: $:/tags/RawMarkupWikified/BottomBody":"zh-Hans/systemtags/SystemTag_ $__tags_RawMarkupWikified_BottomBody.tid","SystemTag: $:/tags/RawMarkupWikified/TopBody":"zh-Hans/systemtags/SystemTag_ $__tags_RawMarkupWikified_TopBody.tid","SystemTag: $:/tags/RawMarkupWikified/TopHead":"zh-Hans/systemtags/SystemTag_ $__tags_RawMarkupWikified_TopHead.tid","SystemTag: $:/tags/RawStaticContent":"zh-Hans/systemtags/SystemTag_ $__tags_RawStaticContent.tid","SystemTag: $:/tags/RemoteAssetInfo":"zh-Hans/systemtags/SystemTag_ $__tags_RemoteAssetInfo.tid","SystemTag: $:/tags/SearchResults":"zh-Hans/systemtags/SystemTag_ $__tags_SearchResults.tid","SystemTag: $:/tags/ServerConnection":"zh-Hans/systemtags/SystemTag_ $__tags_ServerConnection.tid","SystemTag: $:/tags/SideBar":"zh-Hans/systemtags/SystemTag_ $__tags_SideBar.tid","SystemTag: $:/tags/SideBarSegment":"zh-Hans/systemtags/SystemTag_ $__tags_SideBarSegment.tid","SystemTag: $:/tags/StartupAction":"zh-Hans/systemtags/SystemTag_ $__tags_StartupAction.tid","SystemTag: $:/tags/StartupAction/Browser":"zh-Hans/systemtags/SystemTag_ $__tags_StartupAction_Browser.tid","SystemTag: $:/tags/StartupAction/Node":"zh-Hans/systemtags/SystemTag_ $__tags_StartupAction_Node.tid","SystemTag: $:/tags/Stylesheet":"zh-Hans/systemtags/SystemTag_ $__tags_Stylesheet.tid","SystemTag: $:/tags/TagDropdown":"zh-Hans/systemtags/SystemTag_ $__tags_TagDropdown.tid","SystemTag: $:/tags/TextEditor/Snippet":"zh-Hans/systemtags/SystemTag_ $__tags_Texteditor_Snippet.tid","SystemTag: $:/tags/TiddlerInfo":"zh-Hans/systemtags/SystemTag_ $__tags_TiddlerInfo.tid","SystemTag: $:/tags/TiddlerInfoSegment":"zh-Hans/systemtags/SystemTag_ $__tags_TiddlerInfoSegment.tid","SystemTag: $:/tags/TiddlerInfo/Advanced":"zh-Hans/systemtags/SystemTag_ $__tags_TiddlerInfo_Advanced.tid","SystemTag: $:/tags/ToolbarButtonStyle":"zh-Hans/systemtags/SystemTag_ $__tags_ToolbarButtonStyle.tid","SystemTag: $:/tags/TopLeftBar":"zh-Hans/systemtags/SystemTag_ $__tags_TopLeftBar.tid","SystemTag: $:/tags/TopRightBar":"zh-Hans/systemtags/SystemTag_ $__tags_TopRightBar.tid","SystemTag: $:/tags/ViewTemplate":"zh-Hans/systemtags/SystemTag_ $__tags_ViewTemplate.tid","SystemTag: $:/tags/ViewToolbar":"zh-Hans/systemtags/SystemTag_ $__tags_ViewToolbar.tid","TableOfContents":"zh-Hans/TableOfContents.tid","demo":"zh-Hans/tags/demo.tid","dev":"zh-Hans/tags/dev.tid","howto":"zh-Hans/tags/howto.tid","Icon":"zh-Hans/tags/Icon.tid","introduction":"zh-Hans/tags/introduction.tid","Language":"zh-Hans/tags/Language.tid","mechanism":"zh-Hans/tags/mechanism.tid","Operator Examples":"zh-Hans/tags/operator_examples.tid","tips":"zh-Hans/tags/tips.tid","TiddlyDesktop Releases":"zh-Hans/tiddlydesktop/TiddlyDesktop_Releases.tid","$:/status/UserName":"zh-Hans/UserName.tid","actionTiddler Variable":"zh-Hans/variables/actionTiddler Variable.tid","Core Variables":"zh-Hans/variables/Core Variables.tid","currentTiddler Variable (Examples)":"zh-Hans/variables/examples/currentTiddler.tid","Sample Headings 1,2,3":"zh-Hans/variables/examples/Sample Headings 1-2-3.tid","Sample Headings 3,4,5":"zh-Hans/variables/examples/Sample Headings 3-4-5.tid","Sample Headings 4,5,6":"zh-Hans/variables/examples/Sample Headings 4-5-6.tid","storyTiddler Variable (Examples)":"zh-Hans/variables/examples/storyTiddler.tid","transclusion Variable (Examples)":"zh-Hans/variables/examples/transclusion.tid","tv-adjust-heading-level Variable (Examples)":"zh-Hans/variables/examples/tv-adjust-heading-level.tid","tv-config-toolbar-class Variable (Examples)":"zh-Hans/variables/examples/tv-config-toolbar-class.tid","tv-config-toolbar-icons Variable (Examples)":"zh-Hans/variables/examples/tv-config-toolbar-icons.tid","tv-config-toolbar-text Variable (Examples)":"zh-Hans/variables/examples/tv-config-toolbar-text.tid","tv-get-export-image-link Variable (Examples)":"zh-Hans/variables/examples/tv-get-export-image-link.tid","tv-wikilink-tooltip Variable (Examples)":"zh-Hans/variables/examples/tv-wikilink-tooltip.tid","tv-wikilinks Variable (Examples)":"zh-Hans/variables/examples/tv-wikilinks.tid","modifier Variable":"zh-Hans/variables/modifier Variable.tid","namespace Variable":"zh-Hans/variables/namespace.tid","tv-adjust-heading-level Variable":"zh-Hans/variables/tv-adjust-heading-level Variable.tid","tv-auto-open-on-import Variable":"zh-Hans/variables/tv-auto-open-on-import.tid","tv-config-toolbar-class Variable":"zh-Hans/variables/tv-config-toolbar-class.tid","tv-config-toolbar-icons Variable":"zh-Hans/variables/tv-config-toolbar-icons.tid","tv-config-toolbar-text Variable":"zh-Hans/variables/tv-config-toolbar-text.tid","tv-filter-export-link Variable":"zh-Hans/variables/tv-filter-export-link Variable.tid","tv-get-export-image-link Variable":"zh-Hans/variables/tv-get-export-image-link.tid","tv-get-export-link Variable":"zh-Hans/variables/tv-get-export-link.tid","tv-get-export-path Variable":"zh-Hans/variables/tv-get-export-path.tid","tv-history-list Variable":"zh-Hans/variables/tv-history-list Variable.tid","tv-show-missing-links Variable":"zh-Hans/variables/tv-show-missing-links Variable.tid","tv-story-list Variable":"zh-Hans/variables/tv-story-list Variable.tid","tv-tiddler-preview Variable":"zh-Hans/variables/tv-tiddler-preview.tid","tv-wikilink-template Variable":"zh-Hans/variables/tv-wikilink-template.tid","tv-wikilink-tooltip Variable":"zh-Hans/variables/tv-wikilink-tooltip.tid","tv-wikilinks Variable":"zh-Hans/variables/tv-wikilinks.tid","Variables":"zh-Hans/variables/Variables.tid","currentTiddler Variable":"zh-Hans/variables/WidgetVariable_ currentTiddler.tid","storyTiddler Variable":"zh-Hans/variables/WidgetVariable_ storyTiddler.tid","transclusion Variable":"zh-Hans/variables/WidgetVariable_ transclusion.tid","Getting Started Video":"zh-Hans/videos/Getting Started Video.tid","Introducing TiddlyDesktop Video":"zh-Hans/videos/Introducing TiddlyDesktop Video.tid","Introduction Video":"zh-Hans/videos/Introduction Video.tid","TiddlyWiki on Firefox for Android Video":"zh-Hans/videos/TiddlyWiki on Firefox for Android Video.tid","Videos":"zh-Hans/videos/Videos.tid","Working with the TiddlyWiki5 repository video":"zh-Hans/videos/Working with the TiddlyWiki5 repository video.tid","TiddlyWeb JSON tiddler format":"zh-Hans/webserver/TiddlyWeb JSON tiddler format.tid","Using HTTPS":"zh-Hans/webserver/Using HTTPS.tid","Using the external JavaScript template":"zh-Hans/webserver/Using the external JavaScript template.tid","Using the integrated static file server":"zh-Hans/webserver/Using the integrated static file server.tid","Using the read-only single tiddler view":"zh-Hans/webserver/Using the read-only single tiddler view.tid","WebServer Anonymous Access":"zh-Hans/webserver/WebServer Anonymous Access.tid","WebServer API":"zh-Hans/webserver/WebServer API.tid","WebServer API: Delete Tiddler":"zh-Hans/webserver/WebServer API_ Delete Tiddler.tid","WebServer API: Force Basic Authentication Login":"zh-Hans/webserver/WebServer API_ Force Basic Authentication Login.tid","WebServer API: Get All Tiddlers":"zh-Hans/webserver/WebServer API_ Get All Tiddlers.tid","WebServer API: Get Favicon":"zh-Hans/webserver/WebServer API_ Get Favicon.tid","WebServer API: Get File":"zh-Hans/webserver/WebServer API_ Get File.tid","WebServer API: Get Rendered Tiddler":"zh-Hans/webserver/WebServer API_ Get Rendered Tiddler.tid","WebServer API: Get Server Status":"zh-Hans/webserver/WebServer API_ Get Server Status.tid","WebServer API: Get Tiddler":"zh-Hans/webserver/WebServer API_ Get Tiddler.tid","WebServer API: Get Wiki":"zh-Hans/webserver/WebServer API_ Get Wiki.tid","WebServer API: Put Tiddler":"zh-Hans/webserver/WebServer API_ Put Tiddler.tid","WebServer Authentication":"zh-Hans/webserver/WebServer Authentication.tid","WebServer Authorization":"zh-Hans/webserver/WebServer Authorization.tid","WebServer Basic Authentication":"zh-Hans/webserver/WebServer Basic Authentication.tid","WebServer Guides":"zh-Hans/webserver/WebServer Guides.tid","WebServer Header Authentication":"zh-Hans/webserver/WebServer Header Authentication.tid","WebServer Parameters":"zh-Hans/webserver/WebServer Parameters.tid","WebServer Parameter: anon-username":"zh-Hans/webserver/WebServer Parameter_ anon-username.tid","WebServer Parameter: authenticated-user-header":"zh-Hans/webserver/WebServer Parameter_ authenticated-user-header.tid","WebServer Parameter: credentials":"zh-Hans/webserver/WebServer Parameter_ credentials.tid","WebServer Parameter: csrf-disable":"zh-Hans/webserver/WebServer Parameter_ csrf-disable.tid","WebServer Parameter: debug-level":"zh-Hans/webserver/WebServer Parameter_ debug-level.tid","WebServer Parameter: host":"zh-Hans/webserver/WebServer Parameter_ host.tid","WebServer Parameter: password":"zh-Hans/webserver/WebServer Parameter_ password.tid","WebServer Parameter: path-prefix":"zh-Hans/webserver/WebServer Parameter_ path-prefix.tid","WebServer Parameter: port":"zh-Hans/webserver/WebServer Parameter_ port.tid","WebServer Parameter: readers":"zh-Hans/webserver/WebServer Parameter_ readers.tid","WebServer Parameter: root-render-type":"zh-Hans/webserver/WebServer Parameter_ root-render-type.tid","WebServer Parameter: root-serve-type":"zh-Hans/webserver/WebServer Parameter_ root-serve-type.tid","WebServer Parameter: root-tiddler":"zh-Hans/webserver/WebServer Parameter_ root-tiddler.tid","WebServer Parameter: sse-enabled":"zh-Hans/webserver/WebServer Parameter_ sse-enabled.tid","WebServer Parameter: system-tiddler-render-template":"zh-Hans/webserver/WebServer Parameter_ system-tiddler-render-template.tid","WebServer Parameter: system-tiddler-render-type":"zh-Hans/webserver/WebServer Parameter_ system-tiddler-render-type.tid","WebServer Parameter: tiddler-render-template":"zh-Hans/webserver/WebServer Parameter_ tiddler-render-template.tid","WebServer Parameter: tiddler-render-type":"zh-Hans/webserver/WebServer Parameter_ tiddler-render-type.tid","WebServer Parameter: tls-cert":"zh-Hans/webserver/WebServer Parameter_ tls-cert.tid","WebServer Parameter: tls-key":"zh-Hans/webserver/WebServer Parameter_ tls-key.tid","WebServer Parameter: username":"zh-Hans/webserver/WebServer Parameter_ username.tid","WebServer Parameter: writers":"zh-Hans/webserver/WebServer Parameter_ writers.tid","WebServer":"zh-Hans/webserver/WebServer.tid","$:/docs/anyField":"zh-Hans/widgets/$__docs_anyField.tid","ActionConfirmWidget":"zh-Hans/widgets/ActionConfirmWidget.tid","ActionCreateTiddlerWidget Example 1":"zh-Hans/widgets/ActionCreateTiddlerWidget Example 1.tid","ActionCreateTiddlerWidget Example 2":"zh-Hans/widgets/ActionCreateTiddlerWidget Example 2.tid","ActionCreateTiddlerWidget Example 3":"zh-Hans/widgets/ActionCreateTiddlerWidget Example 3.tid","ActionCreateTiddlerWidget Example 4":"zh-Hans/widgets/ActionCreateTiddlerWidget Example 4.tid","ActionCreateTiddlerWidget Template":"zh-Hans/widgets/ActionCreateTiddlerWidget Template.tid","ActionCreateTiddlerWidget":"zh-Hans/widgets/ActionCreateTiddlerWidget.tid","ActionCreateTiddlerWidget Example":"zh-Hans/widgets/ActionCreateTiddlerWidget_Example.tid","ActionDeleteFieldWidget":"zh-Hans/widgets/ActionDeleteFieldWidget.tid","ActionDeleteTiddlerWidget":"zh-Hans/widgets/ActionDeleteTiddlerWidget.tid","ActionListopsWidget":"zh-Hans/widgets/ActionListopsWidget.tid","ActionLogWidget":"zh-Hans/widgets/ActionLogWidget.tid","ActionNavigateWidget":"zh-Hans/widgets/ActionNavigateWidget.tid","ActionPopupWidget":"zh-Hans/widgets/ActionPopupWidget.tid","ActionSendMessageWidget":"zh-Hans/widgets/ActionSendMessageWidget.tid","ActionSetFieldWidget":"zh-Hans/widgets/ActionSetFieldWidget.tid","ActionWidgets":"zh-Hans/widgets/ActionWidgets.tid","BrowseWidget":"zh-Hans/widgets/BrowseWidget.tid","ButtonWidget":"zh-Hans/widgets/ButtonWidget.tid","CheckboxWidget":"zh-Hans/widgets/CheckboxWidget.tid","CodeBlockWidget":"zh-Hans/widgets/CodeblockWidget.tid","CountWidget":"zh-Hans/widgets/CountWidget.tid","DiffTextWidget":"zh-Hans/widgets/DiffTextWidget.tid","DraggableWidget":"zh-Hans/widgets/DraggableWidget.tid","DroppableWidget":"zh-Hans/widgets/DroppableWidget.tid","DropzoneWidget":"zh-Hans/widgets/DropzoneWidget.tid","EditBitmapWidget":"zh-Hans/widgets/EditBitmapWidget.tid","EditTextWidget":"zh-Hans/widgets/EditTextWidget.tid","EditWidget":"zh-Hans/widgets/EditWidget.tid","EncryptWidget":"zh-Hans/widgets/EncryptWidget.tid","EntityWidget":"zh-Hans/widgets/EntityWidget.tid","EventCatcherWidget":"zh-Hans/widgets/EventCatcherWidget.tid","FieldMangler Widget (Examples)":"zh-Hans/widgets/FieldMangler Widget (Examples).tid","FieldManglerWidget":"zh-Hans/widgets/FieldManglerWidget.tid","FieldsWidget":"zh-Hans/widgets/FieldsWidget.tid","ImageWidget":"zh-Hans/widgets/ImageWidget.tid","ImportVariablesWidget":"zh-Hans/widgets/ImportVariablesWidget.tid","KeyboardWidget":"zh-Hans/widgets/KeyboardWidget.tid","LinkCatcherWidget":"zh-Hans/widgets/LinkCatcherWidget.tid","LinkWidget":"zh-Hans/widgets/LinkWidget.tid","ListopsData":"zh-Hans/widgets/ListopsData.tid","ListWidget":"zh-Hans/widgets/ListWidget.tid","LogWidget":"zh-Hans/widgets/LogWidget.tid","MacroCallWidget":"zh-Hans/widgets/MacroCallWidget.tid","MessageCatcherWidget":"zh-Hans/widgets/MessageCatcherWidget.tid","NavigatorWidget":"zh-Hans/widgets/NavigatorWidget.tid","PasswordWidget":"zh-Hans/widgets/PasswordWidget.tid","RadioWidget Example":"zh-Hans/widgets/RadioWidget Example.tid","RadioWidget ExampleTemplate":"zh-Hans/widgets/RadioWidget ExampleTemplate.tid","RadioWidget":"zh-Hans/widgets/RadioWidget.tid","RangeWidget Example":"zh-Hans/widgets/RangeWidget Example.tid","RangeWidget":"zh-Hans/widgets/RangeWidget.tid","RevealWidget":"zh-Hans/widgets/RevealWidget.tid","ScrollableWidget":"zh-Hans/widgets/ScrollableWidget.tid","SelectWidget":"zh-Hans/widgets/SelectWidget.tid","SetVariableWidget":"zh-Hans/widgets/SetVariableWidget.tid","SetWidget":"zh-Hans/widgets/SetWidget.tid","TextWidget":"zh-Hans/widgets/TextWidget.tid","The Extended Listops Filters":"zh-Hans/widgets/The Extended Listops Filters.tid","TiddlerWidget":"zh-Hans/widgets/TiddlerWidget.tid","TranscludeWidget":"zh-Hans/widgets/TranscludeWidget.tid","VarsWidget":"zh-Hans/widgets/VarsWidget.tid","ViewWidget":"zh-Hans/widgets/ViewWidget.tid","Widgets":"zh-Hans/widgets/Widgets.tid","WikifyWidget":"zh-Hans/widgets/WikifyWidget.tid","Anchor Links using HTML":"zh-Hans/wikitext/Anchor Links using HTML.tid","Block Quotes in WikiText":"zh-Hans/wikitext/Block Quotes in WikiText.tid","Code Blocks in WikiText":"zh-Hans/wikitext/Code Blocks in WikiText.tid","Dashes in WikiText":"zh-Hans/wikitext/Dashes in WikiText.tid","Definitions in WikiText":"zh-Hans/wikitext/Definitions in WikiText.tid","Formatting in WikiText":"zh-Hans/wikitext/Formatting in WikiText.tid","Hard Linebreaks in WikiText":"zh-Hans/wikitext/Hard Linebreaks in WikiText.tid","Headings in WikiText":"zh-Hans/wikitext/Headings in WikiText.tid","Horizontal Rules in WikiText":"zh-Hans/wikitext/Horizontal Rules in WikiText.tid","HTML in WikiText":"zh-Hans/wikitext/HTML in WikiText.tid","HTML Links in WikiText":"zh-Hans/wikitext/HTML_Links_in_WikiText.tid","Images in WikiText":"zh-Hans/wikitext/Images in WikiText.tid","Linking in WikiText":"zh-Hans/wikitext/Linking in WikiText.tid","Lists in WikiText":"zh-Hans/wikitext/Lists in WikiText.tid","Macro Calls in WikiText":"zh-Hans/wikitext/Macro Calls in WikiText.tid","Macro Definitions in WikiText":"zh-Hans/wikitext/Macro Definitions in WikiText.tid","Macros in WikiText":"zh-Hans/wikitext/Macros in WikiText.tid","Paragraphs in WikiText":"zh-Hans/wikitext/Paragraphs in WikiText.tid","Styles and Classes in WikiText":"zh-Hans/wikitext/Styles and Classes in WikiText.tid","Tables in WikiText":"zh-Hans/wikitext/Tables in WikiText.tid","Transclusion and Substitution":"zh-Hans/wikitext/Transclusion and Substitution.tid","Transclusion Basic Usage":"zh-Hans/wikitext/Transclusion Basic Usage.tid","Transclusion in WikiText":"zh-Hans/wikitext/Transclusion in WikiText.tid","Transclusion with Templates":"zh-Hans/wikitext/Transclusion with Templates.tid","Typed Blocks in WikiText":"zh-Hans/wikitext/Typed Blocks in WikiText.tid","Variables in WikiText":"zh-Hans/wikitext/Variables in WikiText.tid","Widgets in WikiText":"zh-Hans/wikitext/Widgets in WikiText.tid","Audio":"zh-Hans/workingwithtw/Audio.tid","BrowserCompatibility":"zh-Hans/workingwithtw/BrowserCompatibility.tid","Creating and editing tiddlers":"zh-Hans/workingwithtw/Creating and editing tiddlers.tid","Creating journal tiddlers":"zh-Hans/workingwithtw/Creating journal tiddlers.tid","Formatting text in TiddlyWiki":"zh-Hans/workingwithtw/Formatting text in TiddlyWiki.tid","Navigating between open tiddlers":"zh-Hans/workingwithtw/Navigating between open tiddlers.tid","Performance":"zh-Hans/workingwithtw/Performance.tid","Sharing your tiddlers with others":"zh-Hans/workingwithtw/Sharing your tiddlers with others.tid","Using links to navigate between tiddlers":"zh-Hans/workingwithtw/Using links to navigate between tiddlers.tid","Working with TiddlyWiki":"zh-Hans/workingwithtw/Working with TiddlyWiki.tid"}
! 我们对 Cookie 的使用
我们使用必要的 cookie 来使我们的网站正常工作。我们还希望设置可选的分析以帮助我们进行改进。除非您激活它们,否则我们不会设置可选的 Cookie。使用此工具将在您的设备上设置 Cookie,以记住您的偏好。
---
!! 必要的 cookie
必要的 Cookie 可以激活内核功能,例如安全性、网络管理和可访问性。您可以通过更改浏览器设置来禁用这些设置,但这可能会影响网站的运行方式。
---
!! 分析 Cookie
我们希望设置非必要的 Cookie,例如 Google Analytics,以通过收集和报告有关您使用方式的信息,来帮助我们改善网站。 Cookies 以不直接识别任何人的方式收集信息。
---
! 我們對 Cookie 的使用
我們使用必要的 cookie 來使我們的網站正常工作。我們還希望設定可選的分析以幫助我們進行改進。除非您啟用它們,否則我們不會設定可選的 Cookie。使用此工具將在您的設備上設定 Cookie,以記住您的偏好。
---
!! 必要的 cookie
必要的 Cookie 可以啟用核心功能,例如安全性、網路管理和可存取性。您可以通過更改瀏覽器設定來停用這些設定,但這可能會影響網站的運行方式。
---
!! 分析 Cookie
我們希望設定非必要的 Cookie,例如 Google Analytics,以通過收集和報告有關您使用方式的資訊,來幫助我們改善網站。 Cookies 以不直接識別任何人的方式收集資訊。
---
安装于本机的 ~TiddlyWiki 插件程序库预览版,用于测试和调试。//需要本机的网页服务器来分享该程序库//
此为在 tiddlywiki.com 的 ~TiddlyWiki 官方插件程序库预览版,由核心团队维护的插件、主题和语言包。
\define base-github()
https://github.com/Jermolene/TiddlyWiki5/edit/tiddlywiki-com/editions/zh-Hans/tiddlers/
\end
<$set name="draft-of" value={{{ [<currentTiddler>get[draft.of]] }}}>
<$list filter="[[$:/config/OriginalTiddlerPaths]getindex<draft-of>]" variable="target" >
<div class="tc-improvement-banner">
{{$:/core/images/star-filled}} 您能帮我们改进这个文档吗?[[了解如何|Improving TiddlyWiki Documentation]]
<a href={{{ [<target>addprefix<base-github>] }}} class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer">编辑在 ~GitHub 上的此条目</a>
</div>
</$list>
</$set>
{
"tiddlers": {
"$:/Acknowledgements": {
"title": "$:/Acknowledgements",
"text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
},
"$:/core/copyright.txt": {
"title": "$:/core/copyright.txt",
"type": "text/plain",
"text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2021, UnaMesa Association\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
},
"$:/core/icon": {
"title": "$:/core/icon",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path d=\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"
},
"$:/core/images/add-comment": {
"title": "$:/core/images/add-comment",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-add-comment tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 56H36a8 8 0 100 16h20v20a8 8 0 1016 0V72h20a8 8 0 100-16H72V36a8 8 0 10-16 0v20zm-12.595 58.362c-6.683 7.659-20.297 12.903-36.006 12.903-2.196 0-4.35-.102-6.451-.3 9.652-3.836 17.356-12.24 21.01-22.874C8.516 94.28 0 79.734 0 63.5 0 33.953 28.206 10 63 10s63 23.953 63 53.5S97.794 117 63 117c-6.841 0-13.428-.926-19.595-2.638z\"/></svg>"
},
"$:/core/images/advanced-search-button": {
"title": "$:/core/images/advanced-search-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-advanced-search-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M74.565 87.985A47.776 47.776 0 0148 96C21.49 96 0 74.51 0 48S21.49 0 48 0s48 21.49 48 48c0 9.854-2.97 19.015-8.062 26.636l34.347 34.347a9.443 9.443 0 010 13.36 9.446 9.446 0 01-13.36 0l-34.36-34.358zM48 80c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/><circle cx=\"48\" cy=\"48\" r=\"8\"/><circle cx=\"28\" cy=\"48\" r=\"8\"/><circle cx=\"68\" cy=\"48\" r=\"8\"/></g></svg>"
},
"$:/core/images/auto-height": {
"title": "$:/core/images/auto-height",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-auto-height tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M67.987 114.356l-.029-14.477a4 4 0 00-2.067-3.494l-15.966-8.813-1.933 7.502H79.9c4.222 0 5.564-5.693 1.786-7.58L49.797 71.572 48.01 79.15h31.982c4.217 0 5.564-5.682 1.795-7.575L49.805 55.517l-1.795 7.575h31.982c4.212 0 5.563-5.67 1.805-7.57l-16.034-8.105 2.195 3.57V35.614l9.214 9.213a4 4 0 105.656-5.656l-16-16a4 4 0 00-5.656 0l-16 16a4 4 0 105.656 5.656l9.13-9.13v15.288a4 4 0 002.195 3.57l16.035 8.106 1.804-7.57H48.01c-4.217 0-5.564 5.682-1.795 7.574l31.982 16.059 1.795-7.575H48.01c-4.222 0-5.564 5.693-1.787 7.579l31.89 15.923 1.787-7.578H47.992c-4.133 0-5.552 5.504-1.933 7.501l15.966 8.813-2.067-3.494.029 14.436-9.159-9.158a4 4 0 00-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656l-9.185 9.184zM16 20h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
},
"$:/core/images/blank": {
"title": "$:/core/images/blank",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\"/>"
},
"$:/core/images/bold": {
"title": "$:/core/images/bold",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-bold tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.146 51.81V21.87h26.353c2.51 0 4.93.21 7.26.628 2.33.418 4.392 1.165 6.185 2.24 1.793 1.076 3.227 2.57 4.302 4.482 1.076 1.913 1.614 4.363 1.614 7.35 0 5.379-1.613 9.263-4.84 11.653-3.227 2.39-7.35 3.586-12.37 3.586H41.146zM13 0v128h62.028a65.45 65.45 0 0016.762-2.151c5.438-1.434 10.278-3.645 14.52-6.633 4.244-2.988 7.62-6.842 10.13-11.563 2.51-4.721 3.764-10.308 3.764-16.762 0-8.008-1.942-14.85-5.826-20.527-3.884-5.677-9.77-9.65-17.658-11.921 5.737-2.75 10.069-6.275 12.997-10.577 2.928-4.303 4.392-9.681 4.392-16.135 0-5.976-.986-10.995-2.958-15.059-1.972-4.063-4.75-7.32-8.336-9.77-3.585-2.45-7.888-4.213-12.907-5.289C84.888.538 79.33 0 73.235 0H13zm28.146 106.129V70.992H71.8c6.095 0 10.995 1.404 14.7 4.212 3.705 2.81 5.558 7.5 5.558 14.073 0 3.347-.568 6.096-1.703 8.247-1.136 2.151-2.66 3.854-4.572 5.11-1.912 1.254-4.123 2.15-6.633 2.688-2.51.538-5.139.807-7.888.807H41.146z\"/></svg>"
},
"$:/core/images/cancel-button": {
"title": "$:/core/images/cancel-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 76.314l-16.97 16.97a7.999 7.999 0 01-11.314 0c-3.118-3.118-3.124-8.19 0-11.313L52.686 65l-16.97-16.97a7.999 7.999 0 010-11.314c3.118-3.118 8.19-3.124 11.313 0L64 53.686l16.97-16.97a7.999 7.999 0 0111.314 0c3.118 3.118 3.124 8.19 0 11.313L75.314 65l16.97 16.97a7.999 7.999 0 010 11.314c-3.118 3.118-8.19 3.124-11.313 0L64 76.314zM64 129c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 1 0 29.654 0 65c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 17 64 17 16 38.49 16 65s21.49 48 48 48z\"/></svg>"
},
"$:/core/images/chevron-down": {
"title": "$:/core/images/chevron-down",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-down tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.053 85.456a7.889 7.889 0 01-5.6-2.316L2.473 27.16a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0L64.05 66.344l50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.105 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.317z\"/><path d=\"M64.053 124.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></g></svg>"
},
"$:/core/images/chevron-left": {
"title": "$:/core/images/chevron-left",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M47.544 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L66.656 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.105 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.317-5.595z\"/><path d=\"M8.931 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L28.041 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.104 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.316-5.595z\"/></g></svg>"
},
"$:/core/images/chevron-right": {
"title": "$:/core/images/chevron-right",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-right tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M83.456 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196L64.344 63.95 13.963 13.567a7.92 7.92 0 010-11.195c3.086-3.085 8.105-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.317 5.595z\"/><path d=\"M122.069 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></g></svg>"
},
"$:/core/images/chevron-up": {
"title": "$:/core/images/chevron-up",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-up tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M63.947 44.544c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 63.656l-50.382 50.382a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.317z\"/><path d=\"M63.947 5.931c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 25.041 13.567 75.423a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.104 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.316z\"/></g></svg>"
},
"$:/core/images/clone-button": {
"title": "$:/core/images/clone-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-clone-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M32.265 96v24.002A7.996 7.996 0 0040.263 128h79.74a7.996 7.996 0 007.997-7.998v-79.74a7.996 7.996 0 00-7.998-7.997H96V48h12.859a2.99 2.99 0 012.994 2.994v57.865a2.99 2.99 0 01-2.994 2.994H50.994A2.99 2.99 0 0148 108.859V96H32.265z\"/><path d=\"M40 56h-7.993C27.588 56 24 52.418 24 48c0-4.41 3.585-8 8.007-8H40v-7.993C40 27.588 43.582 24 48 24c4.41 0 8 3.585 8 8.007V40h7.993C68.412 40 72 43.582 72 48c0 4.41-3.585 8-8.007 8H56v7.993C56 68.412 52.418 72 48 72c-4.41 0-8-3.585-8-8.007V56zM8 0C3.58 0 0 3.588 0 8v80c0 4.419 3.588 8 8 8h80c4.419 0 8-3.588 8-8V8c0-4.419-3.588-8-8-8H8zM19 16A2.997 2.997 0 0016 19.001v57.998A2.997 2.997 0 0019.001 80h57.998A2.997 2.997 0 0080 76.999V19.001A2.997 2.997 0 0076.999 16H19.001z\"/></g></svg>"
},
"$:/core/images/close-all-button": {
"title": "$:/core/images/close-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-close-all-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M28 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L16.686 100 2.543 85.856a8 8 0 0111.313-11.313L28 88.686l14.144-14.143a8 8 0 0111.313 11.313L39.314 100l14.143 14.144a8 8 0 01-11.313 11.313L28 111.314zM28 39.314L13.856 53.457A8 8 0 012.543 42.144L16.686 28 2.543 13.856A8 8 0 0113.856 2.543L28 16.686 42.144 2.543a8 8 0 0111.313 11.313L39.314 28l14.143 14.144a8 8 0 01-11.313 11.313L28 39.314zM100 39.314L85.856 53.457a8 8 0 01-11.313-11.313L88.686 28 74.543 13.856A8 8 0 0185.856 2.543L100 16.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 28l14.143 14.144a8 8 0 01-11.313 11.313L100 39.314zM100 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L88.686 100 74.543 85.856a8 8 0 0111.313-11.313L100 88.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 100l14.143 14.144a8 8 0 01-11.313 11.313L100 111.314z\"/></g></svg>"
},
"$:/core/images/close-button": {
"title": "$:/core/images/close-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M65.086 75.41l-50.113 50.113c-3.121 3.121-8.192 3.126-11.316.002-3.118-3.118-3.123-8.19.002-11.316l50.114-50.114L3.659 13.982C.538 10.86.533 5.79 3.657 2.666c3.118-3.118 8.19-3.123 11.316.002l50.113 50.114L115.2 2.668c3.121-3.121 8.192-3.126 11.316-.002 3.118 3.118 3.123 8.19-.002 11.316L76.4 64.095l50.114 50.114c3.121 3.121 3.126 8.192.002 11.316-3.118 3.118-8.19 3.123-11.316-.002L65.086 75.409z\"/></svg>"
},
"$:/core/images/close-others-button": {
"title": "$:/core/images/close-others-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-others-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48zm0-16c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32zm0-16c8.837 0 16-7.163 16-16s-7.163-16-16-16-16 7.163-16 16 7.163 16 16 16z\"/></svg>"
},
"$:/core/images/copy-clipboard": {
"title": "$:/core/images/copy-clipboard",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-copy-clipboard tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"33\" height=\"8\" x=\"40\" y=\"40\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"82\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"54\" rx=\"4\"/><rect width=\"33\" height=\"8\" x=\"40\" y=\"96\" rx=\"4\"/><rect width=\"12\" height=\"8\" x=\"40\" y=\"68\" rx=\"4\"/><path d=\"M40 16H24c-4.419 0-8 3.59-8 8a8.031 8.031 0 000 .01v95.98a8.03 8.03 0 000 .01c0 4.41 3.581 8 8 8h80a7.975 7.975 0 005.652-2.34 7.958 7.958 0 002.348-5.652v-16.016c0-4.414-3.582-7.992-8-7.992-4.41 0-8 3.578-8 7.992V112H32V32h64v8.008C96 44.422 99.582 48 104 48c4.41 0 8-3.578 8-7.992V23.992a7.963 7.963 0 00-2.343-5.651A7.995 7.995 0 00104.001 16H88c0-4.41-3.585-8-8.007-8H48.007C43.588 8 40 11.582 40 16zm4-1.004A4.001 4.001 0 0148 11h32c2.21 0 4 1.797 4 3.996v4.008A4.001 4.001 0 0180 23H48c-2.21 0-4-1.797-4-3.996v-4.008z\"/><rect width=\"66\" height=\"16\" x=\"62\" y=\"64\" rx=\"8\"/><path d=\"M84.657 82.343l-16-16v11.314l16-16a8 8 0 10-11.314-11.314l-16 16a8 8 0 000 11.314l16 16a8 8 0 1011.314-11.314z\"/></g></svg>"
},
"$:/core/images/delete-button": {
"title": "$:/core/images/delete-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(12)\"><rect width=\"105\" height=\"16\" y=\"11\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"28\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"8\" y=\"16\" rx=\"8\"/><rect width=\"88\" height=\"16\" x=\"8\" y=\"112\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"80\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"56\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"32\" y=\"16\" rx=\"8\"/></g></svg>"
},
"$:/core/images/done-button": {
"title": "$:/core/images/done-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M42.26 111.032c-2.051.001-4.103-.78-5.668-2.345L2.662 74.758a8 8 0 01-.005-11.32c3.118-3.117 8.192-3.12 11.32.007l28.278 28.278 72.124-72.124a8.002 8.002 0 0111.314-.001c3.118 3.118 3.124 8.19 0 11.315l-77.78 77.78a7.978 7.978 0 01-5.658 2.343z\"/></svg>"
},
"$:/core/images/down-arrow": {
"title": "$:/core/images/down-arrow",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.177 100.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.086 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></svg>"
},
"$:/core/images/download-button": {
"title": "$:/core/images/download-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-download-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\" class=\"tc-image-download-button-ring\"/><path d=\"M34.35 66.43l26.892 27.205a4.57 4.57 0 006.516 0L94.65 66.43a4.7 4.7 0 000-6.593 4.581 4.581 0 00-3.258-1.365h-8.46c-2.545 0-4.608-2.087-4.608-4.661v-15.15c0-2.575-2.063-4.662-4.608-4.662H55.284c-2.545 0-4.608 2.087-4.608 4.662v15.15c0 2.574-2.063 4.661-4.608 4.661h-8.46c-2.545 0-4.608 2.087-4.608 4.662a4.69 4.69 0 001.35 3.296z\"/></g></svg>"
},
"$:/core/images/edit-button": {
"title": "$:/core/images/edit-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M95.627 10.059l-5.656 5.657 11.313 11.313 5.657-5.656-11.314-11.314zm5.657-5.657l1.966-1.966c3.123-3.122 8.194-3.129 11.319-.005 3.117 3.118 3.122 8.192-.005 11.32l-1.966 1.965-11.314-11.314zm-16.97 16.97l-60.25 60.25a8.12 8.12 0 00-.322.342c-.1.087-.198.179-.295.275-5.735 5.735-10.702 22.016-10.702 22.016s16.405-5.09 22.016-10.702c.095-.096.186-.193.272-.292a8.12 8.12 0 00.345-.325l60.25-60.25-11.314-11.313zM35.171 124.19c6.788-.577 13.898-2.272 23.689-5.348 1.825-.573 3.57-1.136 6.336-2.04 16-5.226 21.877-6.807 28.745-7.146 8.358-.413 13.854 2.13 17.58 8.699a4 4 0 006.959-3.946c-5.334-9.406-13.745-13.296-24.933-12.744-7.875.39-14.057 2.052-30.835 7.533-2.739.894-4.46 1.45-6.25 2.012-19.46 6.112-30.77 7.072-39.597 1.747a4 4 0 10-4.132 6.85c6.333 3.82 13.754 5.12 22.438 4.383z\"/></g></svg>"
},
"$:/core/images/erase": {
"title": "$:/core/images/erase",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-erase tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.087 127.996l63.015-63.015c6.535-6.535 6.528-17.115-.003-23.646L99.466 17.702c-6.539-6.538-17.117-6.532-23.646-.003L4.898 88.62c-6.535 6.534-6.528 17.115.003 23.646l15.73 15.73h39.456zm-34.95-7.313l-14.324-14.325c-3.267-3.268-3.268-8.564-.008-11.824L46.269 59.07l35.462 35.462-26.15 26.15H25.137z\"/></svg>"
},
"$:/core/images/excise": {
"title": "$:/core/images/excise",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-excise tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 107.314l-2.343 2.343a8 8 0 11-11.314-11.314l16-16a8 8 0 0111.314 0l16 16a8 8 0 11-11.314 11.314L72 107.314v14.284c0 3.536-3.582 6.402-8 6.402s-8-2.866-8-6.402v-14.284zM0 40.007C0 35.585 3.59 32 8 32c4.418 0 8 3.588 8 8.007v31.986C16 76.415 12.41 80 8 80c-4.418 0-8-3.588-8-8.007V40.007zm32 0C32 35.585 35.59 32 40 32c4.418 0 8 3.588 8 8.007v31.986C48 76.415 44.41 80 40 80c-4.418 0-8-3.588-8-8.007V40.007zm48 0C80 35.585 83.59 32 88 32c4.418 0 8 3.588 8 8.007v31.986C96 76.415 92.41 80 88 80c-4.418 0-8-3.588-8-8.007V40.007zm-24-32C56 3.585 59.59 0 64 0c4.418 0 8 3.588 8 8.007v31.986C72 44.415 68.41 48 64 48c-4.418 0-8-3.588-8-8.007V8.007zm56 32c0-4.422 3.59-8.007 8-8.007 4.418 0 8 3.588 8 8.007v31.986c0 4.422-3.59 8.007-8 8.007-4.418 0-8-3.588-8-8.007V40.007z\"/></svg>"
},
"$:/core/images/export-button": {
"title": "$:/core/images/export-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-export-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.003 128H119.993a7.984 7.984 0 005.664-2.349v.007A7.975 7.975 0 00128 120V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v56H16V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v64c0 4.418 3.59 8 8 8h.003zm48.62-100.689l-8.965 8.966c-3.125 3.125-8.195 3.13-11.319.005-3.118-3.118-3.122-8.192.005-11.319L58.962 2.346A7.986 7.986 0 0164.625 0l-.006.002c2.05-.001 4.102.78 5.666 2.344l22.618 22.617c3.124 3.125 3.129 8.195.005 11.319-3.118 3.118-8.192 3.122-11.319-.005l-8.965-8.966v61.256c0 4.411-3.582 8-8 8-4.41 0-8-3.582-8-8V27.311z\"/></svg>"
},
"$:/core/images/file": {
"title": "$:/core/images/file",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-file tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M111.968 30.5H112V120a8 8 0 01-8 8H24a8 8 0 01-8-8V8a8 8 0 018-8h57v.02a7.978 7.978 0 015.998 2.337l22.627 22.627a7.975 7.975 0 012.343 5.516zM81 8H24v112h80V30.5H89c-4.418 0-8-3.578-8-8V8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"68\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"84\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"100\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/></svg>"
},
"$:/core/images/fixed-height": {
"title": "$:/core/images/fixed-height",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fixed-height tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60 35.657l-9.172 9.171a4 4 0 11-5.656-5.656l16-16a4 4 0 015.656 0l16 16a4 4 0 01-5.656 5.656L68 35.657v57.686l9.172-9.171a4 4 0 115.656 5.656l-16 16a4 4 0 01-5.656 0l-16-16a4 4 0 115.656-5.656L60 93.343V35.657zM16 116h96a4 4 0 100-8H16a4 4 0 100 8zm0-96h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
},
"$:/core/images/fold-all-button": {
"title": "$:/core/images/fold-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M64.03 20.004c-2.05 0-4.102.78-5.667 2.344L35.746 44.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 22.348a7.986 7.986 0 00-5.663-2.346zM64.03 85.002c-2.05-.001-4.102.78-5.667 2.344l-22.617 22.617c-3.125 3.125-3.13 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.966 16.966 16.966c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.192-.005-11.319L69.687 87.346A7.986 7.986 0 0064.024 85z\"/></g></svg>"
},
"$:/core/images/fold-button": {
"title": "$:/core/images/fold-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M64.03 25.004c-2.05 0-4.102.78-5.667 2.344L35.746 49.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 27.348a7.986 7.986 0 00-5.663-2.346zM64.005 67.379c-2.05 0-4.102.78-5.666 2.344L35.722 92.34c-3.125 3.125-3.13 8.195-.006 11.32 3.118 3.117 8.192 3.121 11.32-.006L64 86.69l16.965 16.965c3.125 3.125 8.195 3.13 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L69.663 69.723A7.986 7.986 0 0064 67.377z\"/></g></svg>"
},
"$:/core/images/fold-others-button": {
"title": "$:/core/images/fold-others-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-others tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" y=\"56.031\" rx=\"8\"/><path d=\"M86.632 79.976c-2.05 0-4.102.78-5.666 2.345L64 99.286 47.034 82.321a7.986 7.986 0 00-5.662-2.346l.005.001c-2.05 0-4.102.78-5.666 2.345l-22.618 22.617c-3.124 3.125-3.129 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.966-16.966 16.965 16.966a7.986 7.986 0 005.663 2.346l-.005-.002c2.05 0 4.102-.78 5.666-2.344l16.965-16.966 16.966 16.966c3.125 3.124 8.194 3.129 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L92.289 82.321a7.986 7.986 0 00-5.663-2.346zM86.7 48.024c-2.05 0-4.102-.78-5.666-2.345L64.07 28.714 47.103 45.679a7.986 7.986 0 01-5.663 2.346l.005-.001c-2.05 0-4.101-.78-5.666-2.345L13.162 23.062c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L41.44 28.714l16.966-16.966a7.986 7.986 0 015.662-2.346l-.005.002c2.05 0 4.102.78 5.666 2.344l16.966 16.966 16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L92.358 45.679a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/folder": {
"title": "$:/core/images/folder",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-folder tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.694 128H8C3.58 128 0 124.414 0 119.996V48.004C0 43.584 3.584 40 7.999 40H16v-8c0-4.418 3.578-8 8-8h32a8 8 0 018 8v8h40.001c4.418 0 7.999 3.586 7.999 8.004V59.83l-8-.082v-7.749A4 4 0 0099.997 48H56V36c0-2.21-1.793-4-4.004-4H28.004A4 4 0 0024 36v12H12.003A4 4 0 008 52v64a4 4 0 004.003 4h46.76l-3.069 8z\"/><path d=\"M23.873 55.5h96.003c4.417 0 7.004 4.053 5.774 9.063l-13.344 54.374c-1.228 5.005-5.808 9.063-10.223 9.063H6.08c-4.417 0-7.003-4.053-5.774-9.063L13.65 64.563c1.228-5.005 5.808-9.063 10.223-9.063zm1.78 8.5h87.994c2.211 0 3.504 2.093 2.891 4.666l-11.12 46.668c-.614 2.577-2.902 4.666-5.115 4.666H12.31c-2.211 0-3.504-2.093-2.891-4.666l11.12-46.668C21.152 66.09 23.44 64 25.653 64z\"/></g></svg>"
},
"$:/core/images/full-screen-button": {
"title": "$:/core/images/full-screen-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-full-screen-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 8a8 8 0 018-8h32a8 8 0 110 16H16v24a8 8 0 11-16 0V8zM128 120a8 8 0 01-8 8H88a8 8 0 110-16h24V88a8 8 0 1116 0v32zM8 128a8 8 0 01-8-8V88a8 8 0 1116 0v24h24a8 8 0 110 16H8zM120 0a8 8 0 018 8v32a8 8 0 11-16 0V16H88a8 8 0 110-16h32z\"/></svg>"
},
"$:/core/images/github": {
"title": "$:/core/images/github",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-github tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M63.938 1.607c-35.336 0-63.994 28.69-63.994 64.084 0 28.312 18.336 52.329 43.768 60.802 3.202.59 4.37-1.388 4.37-3.088 0-1.518-.056-5.55-.087-10.897-17.802 3.871-21.558-8.591-21.558-8.591-2.911-7.404-7.108-9.375-7.108-9.375-5.81-3.973.44-3.895.44-3.895 6.424.453 9.803 6.606 9.803 6.606 5.709 9.791 14.981 6.963 18.627 5.322.582-4.138 2.236-6.963 4.063-8.564-14.211-1.617-29.153-7.117-29.153-31.672 0-6.995 2.495-12.718 6.589-17.195-.66-1.621-2.856-8.14.629-16.96 0 0 5.37-1.722 17.597 6.57 5.104-1.424 10.58-2.132 16.022-2.16 5.438.028 10.91.736 16.022 2.16 12.22-8.292 17.582-6.57 17.582-6.57 3.493 8.82 1.297 15.339.64 16.96 4.102 4.477 6.578 10.2 6.578 17.195 0 24.618-14.966 30.035-29.22 31.62 2.295 1.98 4.342 5.89 4.342 11.87 0 8.564-.079 15.476-.079 17.576 0 1.715 1.155 3.71 4.4 3.084 25.413-8.493 43.733-32.494 43.733-60.798 0-35.394-28.657-64.084-64.006-64.084\"/></svg>"
},
"$:/core/images/gitter": {
"title": "$:/core/images/gitter",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-gitter tc-image-button\" viewBox=\"0 0 18 25\"><path d=\"M15 5h2v10h-2zM10 5h2v20h-2zM5 5h2v20H5zM0 0h2v15H0z\"/></svg>"
},
"$:/core/images/globe": {
"title": "$:/core/images/globe",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-globe tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M72.811 37.128v2.554c0 2.196.978 6.881 0 8.832-1.466 2.928-4.65 3.54-6.394 5.867-1.182 1.577-4.618 10.601-3.69 12.92 3.969 9.922 11.534 3.187 17.962 9.293.864.821 2.887 2.273 3.296 3.296 3.29 8.223-7.576 15.009 3.757 26.3 1.245 1.24 3.813-3.817 4.079-4.614.852-2.563 6.725-5.45 9.088-7.053 2.02-1.37 4.873-2.667 6.328-4.745 2.27-3.244 1.48-7.514 3.098-10.745 2.139-4.274 3.828-9.635 5.998-13.966 3.898-7.781 4.721 2.093 5.067 2.439.358.357 1.011 0 1.517 0 .094 0 1.447.099 1.516 0 .65-.935-1.043-17.92-1.318-19.297-1.404-7.01-6.944-15.781-11.865-20.5-6.274-6.015-7.09-16.197-18.259-14.954-.204.022-5.084 10.148-7.777 13.512-3.728 4.657-2.47-4.153-6.526-4.153-.081 0-1.183-.103-1.253 0-.586.88-1.44 3.896-2.306 4.417-.265.16-1.722-.239-1.846 0-2.243 4.3 8.256 2.212 5.792 7.952-2.352 5.481-6.328-1.997-6.328 8.56M44.467 7.01c9.685 6.13.682 12.198 2.694 16.215 1.655 3.303 4.241 5.395 1.714 9.814-2.063 3.608-6.87 3.966-9.623 6.723-3.04 3.044-5.464 8.94-6.79 12.911-1.617 4.843 14.547 6.866 12.063 11.008-1.386 2.311-6.746 1.466-8.437.198-1.165-.873-3.593-.546-4.417-1.78-2.613-3.915-2.26-8.023-3.625-12.128-.938-2.822-6.313-2.12-7.844-.593-.523.522-.33 1.792-.33 2.505 0 5.285 7.12 3.316 7.12 6.46 0 14.636 3.927 6.534 11.14 11.336 10.036 6.683 7.844 7.303 14.946 14.404 3.673 3.673 7.741 3.686 9.425 9.294 1.602 5.331-9.327 5.339-11.716 7.448-1.123.991-2.813 4.146-4.219 4.615-1.792.598-3.234.496-4.944 1.78-2.427 1.82-3.9 4.932-4.02 4.81-2.148-2.147-3.52-15.479-3.89-18.257-.588-4.42-5.59-5.54-6.986-9.03-1.57-3.927 1.524-9.52-1.129-13.761-6.52-10.424-11.821-14.5-15.35-26.292-.942-3.148 3.342-6.529 4.877-8.833 1.877-2.816 2.662-5.854 4.746-8.635C22.147 24.19 40.855 9.461 43.857 8.635l.61-1.625z\"/><path d=\"M64 126c34.242 0 62-27.758 62-62 0-34.242-27.758-62-62-62C29.758 2 2 29.758 2 64c0 34.242 27.758 62 62 62zm0-6c30.928 0 56-25.072 56-56S94.928 8 64 8 8 33.072 8 64s25.072 56 56 56z\"/></g></svg>"
},
"$:/core/images/heading-1": {
"title": "$:/core/images/heading-1",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-1 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M14 30h13.25v30.104H61.7V30h13.25v75.684H61.7V71.552H27.25v34.132H14V30zm70.335 13.78c2.544 0 5.017-.212 7.42-.636 2.403-.424 4.576-1.13 6.52-2.12 1.942-.99 3.603-2.261 4.981-3.816 1.378-1.555 2.28-3.463 2.703-5.724h9.858v74.2h-13.25V53.32H84.335v-9.54z\"/></svg>"
},
"$:/core/images/heading-2": {
"title": "$:/core/images/heading-2",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-2 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm119.52 75.684H74.85c.07-6.148 1.555-11.519 4.452-16.112 2.897-4.593 6.855-8.586 11.872-11.978a133.725 133.725 0 017.526-5.141 59.6 59.6 0 007.208-5.353c2.19-1.908 3.993-3.975 5.406-6.201 1.413-2.226 2.155-4.788 2.226-7.685 0-1.343-.159-2.774-.477-4.293a11.357 11.357 0 00-1.855-4.24c-.919-1.307-2.19-2.403-3.816-3.286-1.625-.883-3.745-1.325-6.36-1.325-2.403 0-4.399.477-5.989 1.431-1.59.954-2.862 2.261-3.816 3.922-.954 1.66-1.66 3.622-2.12 5.883-.46 2.261-.724 4.7-.795 7.314H76.23c0-4.099.548-7.897 1.643-11.395 1.095-3.498 2.738-6.519 4.93-9.063 2.19-2.544 4.857-4.54 8.002-5.989C93.95 30.724 97.606 30 101.775 30c4.523 0 8.303.742 11.342 2.226 3.039 1.484 5.494 3.357 7.367 5.618 1.873 2.261 3.198 4.717 3.975 7.367.777 2.65 1.166 5.176 1.166 7.579 0 2.968-.46 5.653-1.378 8.056a25.942 25.942 0 01-3.71 6.625 37.5 37.5 0 01-5.3 5.565 79.468 79.468 0 01-6.148 4.77 165.627 165.627 0 01-6.36 4.24 94.28 94.28 0 00-5.883 4.028c-1.802 1.343-3.374 2.738-4.717 4.187-1.343 1.449-2.261 2.986-2.756 4.611h36.146v10.812z\"/></svg>"
},
"$:/core/images/heading-3": {
"title": "$:/core/images/heading-3",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-3 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm88.885 32.224c1.979.07 3.957-.07 5.936-.424 1.979-.353 3.745-.972 5.3-1.855a10.365 10.365 0 003.763-3.657c.954-1.555 1.431-3.463 1.431-5.724 0-3.18-1.078-5.724-3.233-7.632-2.155-1.908-4.929-2.862-8.32-2.862-2.12 0-3.958.424-5.513 1.272a11.318 11.318 0 00-3.869 3.445c-1.025 1.449-1.784 3.074-2.279 4.876a18.335 18.335 0 00-.636 5.565H75.381c.141-3.604.813-6.943 2.014-10.017 1.201-3.074 2.844-5.742 4.93-8.003 2.084-2.261 4.61-4.028 7.578-5.3C92.871 30.636 96.228 30 99.973 30a29.2 29.2 0 018.533 1.272c2.791.848 5.3 2.085 7.526 3.71s4.01 3.692 5.353 6.201c1.343 2.509 2.014 5.388 2.014 8.639 0 3.745-.848 7.014-2.544 9.805-1.696 2.791-4.346 4.823-7.95 6.095v.212c4.24.848 7.544 2.95 9.911 6.307s3.551 7.438 3.551 12.243c0 3.533-.707 6.696-2.12 9.487a21.538 21.538 0 01-5.724 7.102c-2.403 1.943-5.194 3.445-8.374 4.505-3.18 1.06-6.537 1.59-10.07 1.59-4.31 0-8.074-.618-11.289-1.855s-5.9-2.986-8.056-5.247c-2.155-2.261-3.798-4.982-4.929-8.162-1.13-3.18-1.731-6.713-1.802-10.6h12.084c-.141 4.523.972 8.286 3.34 11.289 2.366 3.003 5.917 4.505 10.652 4.505 4.028 0 7.402-1.148 10.123-3.445 2.72-2.297 4.081-5.565 4.081-9.805 0-2.897-.565-5.194-1.696-6.89a10.97 10.97 0 00-4.452-3.869c-1.837-.883-3.904-1.431-6.2-1.643a58.067 58.067 0 00-7.05-.212v-9.01z\"/></svg>"
},
"$:/core/images/heading-4": {
"title": "$:/core/images/heading-4",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-4 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8 30h13.25v30.104H55.7V30h13.25v75.684H55.7V71.552H21.25v34.132H8V30zm76.59 48.548h22.471V45.9h-.212L84.59 78.548zm43.46 9.54h-9.54v17.596H107.06V88.088h-31.8V76.11l31.8-44.626h11.448v47.064h9.54v9.54z\"/></svg>"
},
"$:/core/images/heading-5": {
"title": "$:/core/images/heading-5",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-5 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm77.755 1.484h38.372v10.812H92.765L88.95 61.164l.212.212c1.625-1.837 3.692-3.233 6.201-4.187 2.509-.954 5-1.431 7.473-1.431 3.675 0 6.96.618 9.858 1.855 2.897 1.237 5.335 2.968 7.314 5.194s3.48 4.858 4.505 7.897c1.025 3.039 1.537 6.325 1.537 9.858 0 2.968-.477 6.024-1.43 9.169a25.161 25.161 0 01-4.559 8.586c-2.085 2.58-4.752 4.7-8.003 6.36-3.25 1.66-7.137 2.491-11.66 2.491-3.604 0-6.943-.477-10.017-1.431-3.074-.954-5.777-2.385-8.109-4.293-2.332-1.908-4.187-4.258-5.565-7.049-1.378-2.791-2.138-6.06-2.279-9.805h12.084c.353 4.028 1.731 7.12 4.134 9.275 2.403 2.155 5.583 3.233 9.54 3.233 2.544 0 4.7-.424 6.466-1.272 1.767-.848 3.198-2.014 4.293-3.498 1.095-1.484 1.873-3.215 2.332-5.194.46-1.979.69-4.099.69-6.36 0-2.05-.284-4.01-.849-5.883-.565-1.873-1.413-3.516-2.544-4.929-1.13-1.413-2.597-2.544-4.399-3.392-1.802-.848-3.904-1.272-6.307-1.272-2.544 0-4.929.477-7.155 1.431-2.226.954-3.834 2.738-4.823 5.353H75.805l7.95-40.598z\"/></svg>"
},
"$:/core/images/heading-6": {
"title": "$:/core/images/heading-6",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-6 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm106.587 20.246c-.283-3.039-1.36-5.494-3.233-7.367-1.873-1.873-4.399-2.809-7.579-2.809-2.19 0-4.08.406-5.67 1.219a12.435 12.435 0 00-4.029 3.233c-1.095 1.343-1.979 2.88-2.65 4.611a37.696 37.696 0 00-1.643 5.459 46.08 46.08 0 00-.9 5.671 722.213 722.213 0 00-.478 5.247l.212.212c1.625-2.968 3.87-5.176 6.731-6.625 2.862-1.449 5.954-2.173 9.275-2.173 3.675 0 6.96.636 9.858 1.908 2.897 1.272 5.353 3.021 7.367 5.247 2.014 2.226 3.551 4.858 4.611 7.897 1.06 3.039 1.59 6.325 1.59 9.858 0 3.604-.583 6.943-1.749 10.017-1.166 3.074-2.844 5.76-5.035 8.056-2.19 2.297-4.805 4.081-7.844 5.353-3.039 1.272-6.395 1.908-10.07 1.908-5.441 0-9.91-1.007-13.409-3.021-3.498-2.014-6.254-4.77-8.268-8.268-2.014-3.498-3.41-7.597-4.187-12.296-.777-4.7-1.166-9.77-1.166-15.211 0-4.452.477-8.94 1.431-13.462.954-4.523 2.526-8.639 4.717-12.349 2.19-3.71 5.07-6.731 8.64-9.063C92.676 31.166 97.075 30 102.304 30c2.968 0 5.76.495 8.374 1.484 2.615.99 4.93 2.367 6.943 4.134 2.014 1.767 3.657 3.887 4.93 6.36 1.271 2.473 1.978 5.23 2.12 8.268h-12.085zm-11.66 46.852c2.19 0 4.099-.442 5.724-1.325a12.869 12.869 0 004.081-3.445c1.095-1.413 1.908-3.056 2.438-4.929.53-1.873.795-3.798.795-5.777s-.265-3.887-.795-5.724c-.53-1.837-1.343-3.445-2.438-4.823-1.095-1.378-2.456-2.491-4.08-3.339-1.626-.848-3.534-1.272-5.725-1.272-2.19 0-4.116.406-5.777 1.219-1.66.813-3.056 1.908-4.187 3.286-1.13 1.378-1.979 2.986-2.544 4.823-.565 1.837-.848 3.78-.848 5.83 0 2.05.283 3.993.848 5.83.565 1.837 1.413 3.48 2.544 4.929a12.39 12.39 0 004.187 3.445c1.66.848 3.586 1.272 5.777 1.272z\"/></svg>"
},
"$:/core/images/help": {
"title": "$:/core/images/help",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-help tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M36.055 111.441c-5.24 4.396-15.168 7.362-26.555 7.362-1.635 0-3.24-.06-4.806-.179 7.919-2.64 14.062-8.6 16.367-16.014C8.747 92.845 1.05 78.936 1.05 63.5c0-29.547 28.206-53.5 63-53.5s63 23.953 63 53.5-28.206 53.5-63 53.5c-10.055 0-19.56-2-27.994-5.559zm35.35-33.843a536.471 536.471 0 00.018-4.682 199.02 199.02 0 00-.023-3.042c.008-1.357.595-2.087 3.727-4.235.112-.077 1.085-.74 1.386-.948 3.093-2.133 5.022-3.786 6.762-6.187 2.34-3.228 3.558-7.077 3.558-11.649 0-13.292-9.86-21.952-21.455-21.952-11.103 0-22.499 9.609-24.066 22.295a6.023 6.023 0 1011.956 1.477c.806-6.527 6.972-11.726 12.11-11.726 5.265 0 9.408 3.64 9.408 9.906 0 3.634-1.1 5.153-5.111 7.919l-1.362.93c-2.682 1.84-4.227 3.1-5.7 4.931-2.109 2.62-3.242 5.717-3.258 9.314.013.892.02 1.86.022 2.981a470.766 470.766 0 01-.022 4.943 6.023 6.023 0 1012.046.12l.003-.395zm-6.027 24.499a7.529 7.529 0 100-15.058 7.529 7.529 0 000 15.058z\"/></svg>"
},
"$:/core/images/home-button": {
"title": "$:/core/images/home-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112.985 119.502c.01-.165.015-.331.015-.499V67.568c3.137 2.948 8.076 2.884 11.134-.174a7.999 7.999 0 00-.002-11.316L70.396 2.343A7.978 7.978 0 0064.734 0a7.957 7.957 0 00-5.656 2.343L33 28.42V8.007C33 3.585 29.41 0 25 0c-4.418 0-8 3.59-8 8.007V44.42L5.342 56.078c-3.125 3.125-3.12 8.198-.002 11.316a7.999 7.999 0 0011.316-.003l.344-.343v52.945a8.11 8.11 0 000 .007c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8a8.11 8.11 0 00-.015-.498zM97 112V51.574L64.737 19.31 33 51.048V112h64z\"/></svg>"
},
"$:/core/images/import-button": {
"title": "$:/core/images/import-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-import-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M114.832 60.436s3.235-3.27 6.921.417c3.686 3.686.231 7.14.231 7.14l-42.153 42.92s-30.765 32.367-58.798 4.333C-7 87.213 24.59 55.623 24.59 55.623L67.363 12.85s22.725-24.6 43.587-3.738c20.862 20.862-3.96 43.09-3.96 43.09l-35.04 35.04S49.903 112.546 36.426 99.07c-13.476-13.477 11.83-35.523 11.83-35.523l35.04-35.04s3.902-3.902 7.78-.023c3.879 3.878.118 7.921.118 7.921l-35.04 35.04s-13.212 13.212-8.872 17.551c4.34 4.34 16.77-9.653 16.77-9.653l35.04-35.04s16.668-14.598 3.966-27.3c-13.893-13.892-27.565 3.702-27.565 3.702l-42.91 42.91s-23.698 23.698-3.658 43.738 43.012-4.385 43.012-4.385l42.895-42.533z\"/></svg>"
},
"$:/core/images/info-button": {
"title": "$:/core/images/info-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(.05)\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\"/><circle cx=\"64\" cy=\"32\" r=\"8\"/><rect width=\"16\" height=\"56\" x=\"56\" y=\"48\" rx=\"8\"/></g></svg>"
},
"$:/core/images/italic": {
"title": "$:/core/images/italic",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-italic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M66.711 0h22.41L62.408 128H40z\"/></svg>"
},
"$:/core/images/left-arrow": {
"title": "$:/core/images/left-arrow",
"created": "20150315234410875",
"modified": "20150315235324760",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-left-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 64.177c0-2.026.771-4.054 2.317-5.6l55.98-55.98a7.92 7.92 0 0111.195.001c3.086 3.085 3.092 8.104.001 11.195L19.111 64.175l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.086-8.105 3.092-11.196.001l-55.98-55.98A7.892 7.892 0 010 64.177z\"/></svg>"
},
"$:/core/images/line-width": {
"title": "$:/core/images/line-width",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-line-width tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M16 18h96a2 2 0 000-4H16a2 2 0 100 4zm0 17h96a4 4 0 100-8H16a4 4 0 100 8zm0 21h96a6 6 0 000-12H16a6 6 0 100 12zm0 29h96c5.523 0 10-4.477 10-10s-4.477-10-10-10H16c-5.523 0-10 4.477-10 10s4.477 10 10 10zm0 43h96c8.837 0 16-7.163 16-16s-7.163-16-16-16H16c-8.837 0-16 7.163-16 16s7.163 16 16 16z\"/></svg>"
},
"$:/core/images/link": {
"title": "$:/core/images/link",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-link tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M42.263 69.38a31.919 31.919 0 006.841 10.13c12.5 12.5 32.758 12.496 45.255 0l22.627-22.628c12.502-12.501 12.497-32.758 0-45.255-12.5-12.5-32.758-12.496-45.254 0L49.104 34.255a32.333 32.333 0 00-2.666 3.019 36.156 36.156 0 0121.94.334l14.663-14.663c6.25-6.25 16.382-6.254 22.632-.004 6.248 6.249 6.254 16.373-.004 22.631l-22.62 22.62c-6.25 6.25-16.381 6.254-22.631.004a15.93 15.93 0 01-4.428-8.433 11.948 11.948 0 00-7.59 3.48l-6.137 6.137z\"/><path d=\"M86.35 59.234a31.919 31.919 0 00-6.84-10.13c-12.5-12.5-32.758-12.497-45.255 0L11.627 71.732c-12.501 12.5-12.496 32.758 0 45.254 12.5 12.5 32.758 12.497 45.255 0L79.51 94.36a32.333 32.333 0 002.665-3.02 36.156 36.156 0 01-21.94-.333l-14.663 14.663c-6.25 6.25-16.381 6.253-22.63.004-6.25-6.249-6.255-16.374.003-22.632l22.62-22.62c6.25-6.25 16.381-6.253 22.631-.003a15.93 15.93 0 014.428 8.432 11.948 11.948 0 007.59-3.48l6.137-6.136z\"/></g></svg>"
},
"$:/core/images/linkify": {
"title": "$:/core/images/linkify",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-linkify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M17.031 31.919H9.048V96.85h7.983v6.92H0V25h17.031v6.919zm24.66 0h-7.983V96.85h7.983v6.92H24.66V25h17.03v6.919zM67.77 56.422l11.975-3.903 2.306 7.096-12.063 3.903 7.628 10.379-6.12 4.435-7.63-10.467-7.45 10.2-5.943-4.523L58.1 63.518 45.95 59.35l2.306-7.096 12.064 4.17V43.825h7.45v12.596zM86.31 96.85h7.982V31.92H86.31V25h17.031v78.77H86.31v-6.92zm24.659 0h7.983V31.92h-7.983V25H128v78.77h-17.031v-6.92z\"/></svg>"
},
"$:/core/images/list-bullet": {
"title": "$:/core/images/list-bullet",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-bullet tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M11.636 40.273c6.427 0 11.637-5.21 11.637-11.637C23.273 22.21 18.063 17 11.636 17 5.21 17 0 22.21 0 28.636c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.637 0-6.426-5.21-11.636-11.637-11.636C5.21 51.91 0 57.12 0 63.545c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.636 0-6.427-5.21-11.637-11.637-11.637C5.21 86.818 0 92.028 0 98.455c0 6.426 5.21 11.636 11.636 11.636zM34.91 22.818H128v11.637H34.91V22.818zm0 34.91H128v11.636H34.91V57.727zm0 34.908H128v11.637H34.91V92.636z\"/></svg>"
},
"$:/core/images/list-number": {
"title": "$:/core/images/list-number",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-number tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M33.84 22.356H128v11.77H33.84v-11.77zm0 35.31H128v11.77H33.84v-11.77zm0 35.311H128v11.77H33.84v-11.77zM.38 42.631v-2.223h.998c.826 0 1.445-.14 1.858-.42.413-.28.619-.948.619-2.002V22.769c0-1.442-.193-2.336-.58-2.683-.385-.347-1.477-.52-3.275-.52v-2.143c3.502-.147 6.252-.955 8.25-2.423h2.117v22.865c0 .921.15 1.575.449 1.963.3.387.949.58 1.948.58h.998v2.223H.38zm-.3 35.356v-1.902c7.19-6.554 10.786-12.58 10.786-18.08 0-1.562-.326-2.81-.979-3.744-.652-.934-1.524-1.402-2.616-1.402-.893 0-1.655.317-2.287.952-.633.634-.95 1.364-.95 2.192 0 .974.247 1.829.74 2.563.106.16.16.28.16.36 0 .147-.16.28-.48.4-.213.08-.752.308-1.618.681-.839.374-1.358.561-1.558.561-.24 0-.512-.37-.819-1.111A6.2 6.2 0 010 57.064c0-1.949.849-3.544 2.547-4.785 1.698-1.242 3.798-1.862 6.302-1.862 2.463 0 4.53.67 6.202 2.012 1.67 1.341 2.506 3.093 2.506 5.256a8.644 8.644 0 01-.849 3.724c-.566 1.201-1.92 3.053-4.064 5.556a165.471 165.471 0 01-6.272 6.938h11.445l-1.019 5.726h-2.117c.08-.28.12-.534.12-.76 0-.388-.1-.631-.3-.731-.2-.1-.599-.15-1.198-.15H.08zm12.124 19.207c1.745.04 3.236.637 4.474 1.792 1.239 1.154 1.858 2.773 1.858 4.855 0 2.99-1.132 5.393-3.396 7.208-2.263 1.815-5 2.723-8.209 2.723-2.01 0-3.669-.384-4.974-1.151C.652 111.853 0 110.849 0 109.607c0-.774.27-1.398.809-1.872.54-.474 1.128-.71 1.768-.71.639 0 1.162.2 1.568.6.406.4.782 1.055 1.128 1.962.466 1.268 1.239 1.902 2.317 1.902 1.265 0 2.287-.477 3.066-1.431.78-.955 1.169-2.686 1.169-5.196 0-1.709-.12-3.023-.36-3.944-.24-.921-.792-1.382-1.658-1.382-.586 0-1.185.307-1.797.921-.493.494-.932.741-1.319.741-.333 0-.602-.147-.809-.44-.206-.294-.31-.574-.31-.841 0-.32.104-.594.31-.821.207-.227.69-.594 1.449-1.102 2.876-1.922 4.314-4.017 4.314-6.287 0-1.188-.306-2.092-.919-2.713a3.001 3.001 0 00-2.217-.93c-.799 0-1.525.263-2.177.79-.653.528-.979 1.158-.979 1.892 0 .641.253 1.235.76 1.782.172.2.259.367.259.5 0 .121-.57.428-1.708.922-1.139.494-1.854.74-2.147.74-.413 0-.75-.333-1.009-1-.26-.668-.39-1.282-.39-1.842 0-1.749.93-3.224 2.787-4.425 1.858-1.202 3.965-1.802 6.322-1.802 2.064 0 3.851.447 5.363 1.341 1.511.895 2.267 2.116 2.267 3.664 0 1.362-.57 2.623-1.708 3.784a13.387 13.387 0 01-3.945 2.784z\"/></svg>"
},
"$:/core/images/list": {
"title": "$:/core/images/list",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M87.748 128H23.999c-4.418 0-7.999-3.59-7.999-8.007V8.007C16 3.585 19.588 0 24 0h80c4.419 0 8 3.59 8 8.007V104H91.25c-.965 0-1.84.392-2.473 1.025a3.476 3.476 0 00-1.029 2.476V128zm8-.12l15.88-15.88h-15.88v15.88zM40 15.508A3.502 3.502 0 0143.5 12h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 20h-55a3.498 3.498 0 01-3.5-3.509v-.982zM32 22a6 6 0 100-12 6 6 0 000 12zm8 9.509A3.502 3.502 0 0143.5 28h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 36h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 44h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 52h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 60h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 68h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 76h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 84h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 92h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 100h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.505 3.505 0 0143.497 108h33.006A3.497 3.497 0 0180 111.509v.982A3.505 3.505 0 0176.503 116H43.497A3.497 3.497 0 0140 112.491v-.982zM32 38a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12z\"/></svg>"
},
"$:/core/images/locked-padlock": {
"title": "$:/core/images/locked-padlock",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-locked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M96.472 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h8c.003-15.723.303-47.731 32.16-47.731 31.794 0 32.305 32.057 32.312 47.731zm-15.897 0H48.44c.002-16.287.142-32 15.719-32 15.684 0 16.977 16.136 16.415 32zM67.732 92.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
},
"$:/core/images/mail": {
"title": "$:/core/images/mail",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mail tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M122.827 104.894a7.986 7.986 0 01-2.834.516H8.007c-.812 0-1.597-.12-2.335-.345l34.163-34.163 20.842 20.842a3.998 3.998 0 003.418 1.134 4.003 4.003 0 003.395-1.134L88.594 70.64c.075.09.155.176.24.26l33.993 33.994zm5.076-6.237c.064-.406.097-.823.097-1.247v-64c0-.669-.082-1.318-.237-1.94L94.23 65.006c.09.075.177.154.261.239l33.413 33.413zm-127.698.56A8.023 8.023 0 010 97.41v-64c0-.716.094-1.41.271-2.071l33.907 33.906L.205 99.218zM5.93 25.684a8.012 8.012 0 012.078-.273h111.986c.766 0 1.507.108 2.209.308L64.083 83.837 5.93 25.683z\"/></svg>"
},
"$:/core/images/menu-button": {
"title": "$:/core/images/menu-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\"><rect width=\"128\" height=\"16\" y=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"56\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"96\" rx=\"8\"/></svg>"
},
"$:/core/images/minus-button": {
"title": "$:/core/images/minus-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-minus-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64 0c35.346 0 64 28.654 64 64 0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64C0 28.654 28.654 0 64 0zm.332 16c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"/><rect width=\"80\" height=\"16\" x=\"24\" y=\"56\" rx=\"8\"/></svg>"
},
"$:/core/images/mono-block": {
"title": "$:/core/images/mono-block",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-block tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M23.965 32.967h.357c.755 0 1.328.192 1.72.577.39.384.586.947.586 1.688 0 .824-.206 1.418-.618 1.782-.413.363-1.094.545-2.045.545h-6.31c-.965 0-1.65-.178-2.056-.535-.405-.356-.608-.954-.608-1.792 0-.811.203-1.391.608-1.74.406-.35 1.09-.525 2.055-.525h.734l-.86-2.453H8.471l-.902 2.453h.734c.95 0 1.632.178 2.044.535.413.356.619.933.619 1.73 0 .824-.206 1.418-.619 1.782-.412.363-1.094.545-2.044.545h-5.41c-.964 0-1.649-.182-2.054-.545-.406-.364-.608-.958-.608-1.782 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.719-.577h.356l5.62-15.641H6.835c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.95-.619-1.76 0-.825.207-1.42.619-1.783.412-.363 1.094-.545 2.044-.545h7.863c1.244 0 2.118.67 2.62 2.013v.063l6.647 18.2zM12.98 17.326l-3.04 8.848h6.08l-3.04-8.848zm22.402 9.372v6.395h3.145c2.223 0 3.788-.245 4.697-.734.908-.49 1.362-1.307 1.362-2.453 0-1.16-.433-1.985-1.3-2.474-.866-.49-2.383-.734-4.55-.734h-3.354zm10.693-2.327c1.524.559 2.642 1.324 3.355 2.295.713.972 1.07 2.212 1.07 3.722 0 1.272-.308 2.432-.923 3.48-.615 1.049-1.496 1.909-2.642 2.58a7.499 7.499 0 01-2.254.849c-.832.174-2.01.262-3.533.262H30.202c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.782 0-.741.189-1.304.566-1.688.378-.385.93-.577 1.657-.577h.356V17.326h-.356c-.727 0-1.28-.196-1.657-.587-.377-.392-.566-.965-.566-1.72 0-.81.203-1.401.608-1.771.406-.37 1.062-.556 1.971-.556h9.645c2.95 0 5.19.573 6.72 1.72 1.53 1.145 2.296 2.823 2.296 5.031 0 1.09-.234 2.052-.703 2.883-.468.832-1.163 1.513-2.086 2.045zM35.381 17.2v5.284h2.83c1.72 0 2.932-.203 3.638-.609.706-.405 1.06-1.09 1.06-2.054 0-.909-.319-1.573-.955-1.992-.636-.42-1.667-.63-3.093-.63h-3.48zm35.863-3.816c.28-.503.566-.86.86-1.07.293-.21.664-.314 1.111-.314.685 0 1.17.182 1.457.545.287.364.43.986.43 1.866l.042 5.452c0 .964-.157 1.614-.472 1.95-.314.335-.884.503-1.709.503-.587 0-1.037-.14-1.352-.42-.314-.28-.584-.796-.807-1.551-.364-1.328-.944-2.282-1.74-2.862-.797-.58-1.901-.87-3.313-.87-2.153 0-3.802.727-4.948 2.18-1.147 1.454-1.72 3.558-1.72 6.311 0 2.74.58 4.844 1.74 6.311 1.16 1.468 2.817 2.202 4.97 2.202 1.467 0 3.085-.49 4.854-1.468 1.768-.978 2.883-1.467 3.344-1.467.545 0 1.003.23 1.373.692.37.46.556 1.034.556 1.719 0 1.23-1.084 2.39-3.25 3.48-2.167 1.09-4.606 1.636-7.318 1.636-3.662 0-6.625-1.21-8.89-3.627-2.264-2.419-3.396-5.578-3.396-9.478 0-3.76 1.146-6.884 3.438-9.372 2.293-2.488 5.2-3.732 8.723-3.732.992 0 1.97.112 2.935.335.964.224 1.992.574 3.082 1.049zm10.22 19.583V17.326h-.356c-.755 0-1.328-.196-1.72-.587-.39-.392-.586-.965-.586-1.72 0-.81.21-1.401.629-1.771.42-.37 1.097-.556 2.034-.556h5.178c2.922 0 5.06.126 6.416.377 1.356.252 2.51.671 3.46 1.258 1.691 1.007 2.988 2.443 3.89 4.31.9 1.865 1.352 4.021 1.352 6.467 0 2.586-.514 4.847-1.541 6.783-1.028 1.936-2.485 3.4-4.372 4.393-.853.447-1.852.772-2.998.975-1.147.203-2.852.304-5.116.304h-6.269c-.965 0-1.65-.178-2.055-.535-.406-.356-.608-.954-.608-1.792 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.72-.577h.356zm5.41-15.725v15.725h1.195c2.642 0 4.592-.646 5.85-1.94 1.258-1.292 1.887-3.28 1.887-5.965 0-2.641-.64-4.612-1.918-5.912-1.28-1.3-3.205-1.95-5.777-1.95-.335 0-.59.003-.765.01a7.992 7.992 0 00-.472.032zm35.067-.126h-9.75v5.368h3.69v-.252c0-.797.175-1.39.524-1.782.35-.392.88-.587 1.594-.587.629 0 1.142.178 1.54.534.4.357.598.808.598 1.353 0 .028.007.118.021.272.014.154.021.308.021.462v4.34c0 .936-.167 1.607-.503 2.013-.335.405-.88.608-1.635.608-.713 0-1.251-.19-1.615-.567-.363-.377-.545-.936-.545-1.677v-.377h-3.69v6.269h9.75v-2.495c0-.937.178-1.608.534-2.013.357-.405.94-.608 1.75-.608.798 0 1.367.2 1.71.597.342.399.513 1.073.513 2.024v5.074c0 .755-.146 1.258-.44 1.51-.293.251-.873.377-1.74.377h-17.172c-.923 0-1.583-.182-1.982-.545-.398-.364-.597-.958-.597-1.782 0-.741.189-1.304.566-1.688.377-.385.93-.577 1.656-.577h.357V17.326h-.357c-.712 0-1.261-.2-1.646-.598-.384-.398-.576-.968-.576-1.709 0-.81.203-1.401.608-1.771.405-.37 1.062-.556 1.97-.556h17.173c.853 0 1.43.13 1.73.388.3.258.45.772.45 1.54v4.698c0 .95-.174 1.631-.524 2.044-.35.412-.915.618-1.698.618-.81 0-1.394-.21-1.75-.629-.357-.419-.535-1.097-.535-2.033v-2.202zM19.77 47.641c.267-.504.55-.86.85-1.07.3-.21.675-.314 1.122-.314.685 0 1.17.181 1.457.545.287.363.43.985.43 1.866l.042 5.451c0 .965-.157 1.615-.472 1.95-.314.336-.891.504-1.73.504-.587 0-1.045-.144-1.373-.43-.329-.287-.598-.8-.807-1.541-.378-1.342-.958-2.3-1.74-2.873-.783-.573-1.88-.86-3.292-.86-2.153 0-3.799.727-4.938 2.181-1.14 1.454-1.709 3.557-1.709 6.311s.598 4.882 1.793 6.385C10.599 67.248 12.294 68 14.488 68c.503 0 1.077-.06 1.72-.179a23.809 23.809 0 002.264-.555v-3.313h-2.37c-.95 0-1.624-.175-2.023-.524-.398-.35-.597-.93-.597-1.74 0-.84.199-1.437.597-1.793.399-.357 1.073-.535 2.024-.535h7.569c.978 0 1.667.175 2.065.524.398.35.598.937.598 1.762 0 .74-.2 1.31-.598 1.708-.398.399-.975.598-1.73.598h-.335v5.242c0 .447-.05.758-.147.933-.098.174-.293.353-.587.534-.797.476-2.062.895-3.795 1.258a25.576 25.576 0 01-5.263.546c-3.662 0-6.625-1.21-8.89-3.628-2.264-2.418-3.397-5.577-3.397-9.477 0-3.76 1.147-6.884 3.44-9.372 2.292-2.488 5.199-3.732 8.721-3.732.979 0 1.954.112 2.925.335.972.224 2.003.573 3.093 1.049zm15.84 3.941v4.823h6.857v-4.823h-.336c-.754 0-1.331-.195-1.73-.587-.398-.391-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.364 1.093-.545 2.044-.545h5.41c.95 0 1.624.181 2.023.545.398.363.597.957.597 1.782 0 .755-.192 1.328-.576 1.72-.385.39-.947.586-1.688.586h-.357v15.642h.357c.755 0 1.328.192 1.719.576.391.385.587.947.587 1.688 0 .825-.203 1.419-.608 1.782-.405.364-1.09.546-2.055.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.2-1.303.598-1.688.398-.384.975-.576 1.73-.576h.335v-6.186h-6.856v6.186h.335c.755 0 1.331.192 1.73.576.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.412.364-1.094.546-2.044.546h-5.41c-.964 0-1.65-.179-2.055-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.392-.384.965-.576 1.72-.576h.356V51.582h-.356c-.741 0-1.304-.195-1.688-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.073-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.335zm31.754 0v15.642h3.523c.95 0 1.632.178 2.044.534.412.357.618.933.618 1.73 0 .811-.21 1.402-.629 1.772-.419.37-1.097.556-2.033.556H58.433c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.957-.619-1.782 0-.81.203-1.39.608-1.74.406-.35 1.09-.524 2.055-.524h3.523V51.582h-3.523c-.95 0-1.632-.181-2.044-.545-.412-.363-.619-.95-.619-1.761 0-.825.203-1.412.608-1.761.406-.35 1.09-.524 2.055-.524h12.455c.992 0 1.684.174 2.075.524.392.35.587.936.587 1.761 0 .81-.202 1.398-.608 1.761-.405.364-1.09.545-2.054.545h-3.523zm30.496 0v11.994c0 1.873-.122 3.228-.367 4.067a5.876 5.876 0 01-1.227 2.244c-.74.852-1.768 1.495-3.082 1.929-1.314.433-2.893.65-4.738.65-1.3 0-2.555-.126-3.764-.378a16.843 16.843 0 01-3.491-1.132c-.615-.28-1.017-.643-1.206-1.09-.188-.448-.283-1.175-.283-2.18v-4.32c0-1.202.175-2.04.525-2.516.349-.475.957-.713 1.824-.713 1.244 0 1.929.915 2.054 2.747.014.321.035.566.063.733.168 1.622.545 2.73 1.133 3.324.587.594 1.523.89 2.81.89 1.593 0 2.714-.422 3.364-1.268.65-.845.975-2.386.975-4.623V51.582H88.93c-.95 0-1.632-.181-2.044-.545-.413-.363-.619-.95-.619-1.761 0-.825.2-1.412.598-1.761.398-.35 1.086-.524 2.065-.524h10.693c.979 0 1.667.174 2.065.524.399.35.598.936.598 1.761 0 .81-.206 1.398-.619 1.761-.412.364-1.093.545-2.044.545h-1.761zm14.644 0v6.353l6.48-6.478c-.728-.084-1.238-.29-1.531-.619-.294-.328-.44-.85-.44-1.562 0-.825.198-1.419.597-1.782.398-.364 1.073-.545 2.023-.545h5.137c.95 0 1.625.181 2.023.545.399.363.598.957.598 1.782 0 .769-.2 1.345-.598 1.73-.398.384-.982.576-1.75.576h-.483l-6.101 6.06c1.132.839 2.167 1.94 3.103 3.302.937 1.363 2.034 3.456 3.292 6.28h.692c.825 0 1.44.188 1.845.566.405.377.608.943.608 1.698 0 .825-.206 1.419-.619 1.782-.412.364-1.093.546-2.044.546h-2.579c-1.132 0-2.048-.762-2.746-2.286-.126-.28-.224-.503-.294-.67-.923-1.958-1.768-3.467-2.537-4.53a16.616 16.616 0 00-2.705-2.914l-1.97 1.887v3.92h.335c.755 0 1.331.193 1.73.577.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.413.364-1.094.546-2.045.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.391-.384.965-.576 1.72-.576h.356V51.582h-.357c-.74 0-1.303-.195-1.687-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.072-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.336zM13.44 96.326l4.005-11.889c.251-.782.6-1.352 1.048-1.709.447-.356 1.041-.534 1.782-.534h3.271c.95 0 1.632.182 2.044.545.413.363.619.957.619 1.782 0 .755-.2 1.328-.598 1.72-.398.39-.975.587-1.73.587h-.335l.587 15.641h.357c.754 0 1.32.192 1.698.577.377.384.566.947.566 1.687 0 .825-.2 1.42-.598 1.783-.398.363-1.072.545-2.023.545h-4.718c-.95 0-1.624-.178-2.023-.535-.398-.356-.597-.954-.597-1.793 0-.74.192-1.303.576-1.687.385-.385.954-.577 1.709-.577h.335l-.293-12.79-3.061 9.52c-.224.712-.542 1.226-.954 1.54-.413.315-.982.472-1.709.472-.727 0-1.303-.157-1.73-.472-.426-.314-.751-.828-.975-1.54l-3.04-9.52-.294 12.79h.336c.755 0 1.324.192 1.709.577.384.384.576.947.576 1.687 0 .825-.202 1.42-.608 1.783-.405.363-1.076.545-2.013.545H2.621c-.937 0-1.608-.182-2.013-.545-.405-.364-.608-.958-.608-1.783 0-.74.192-1.303.577-1.687.384-.385.954-.577 1.708-.577h.336l.608-15.641h-.336c-.754 0-1.331-.196-1.73-.588-.398-.39-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.363 1.093-.545 2.044-.545h3.27c.728 0 1.311.175 1.752.524.44.35.8.923 1.08 1.72l4.109 11.888zm30.454 2.054V86.828H42.74c-.922 0-1.583-.182-1.981-.546-.398-.363-.598-.95-.598-1.76 0-.812.2-1.402.598-1.773.398-.37 1.059-.555 1.981-.555h5.955c.909 0 1.566.185 1.97.555.406.37.609.961.609 1.772 0 .741-.192 1.31-.577 1.709-.384.398-.933.598-1.646.598h-.356v19.038c0 .657-.07 1.069-.21 1.237-.14.167-.454.251-.943.251h-2.097c-.67 0-1.143-.07-1.415-.21-.273-.14-.507-.384-.703-.733l-8.722-15.327v11.385h1.216c.909 0 1.559.175 1.95.524.392.35.587.93.587 1.74 0 .825-.199 1.42-.597 1.783-.399.363-1.045.545-1.94.545h-6.017c-.909 0-1.566-.182-1.971-.545-.406-.364-.608-.958-.608-1.783 0-.74.188-1.303.566-1.687.377-.385.936-.577 1.677-.577h.336V86.828h-.336c-.713 0-1.265-.2-1.656-.598-.392-.398-.587-.968-.587-1.709 0-.81.206-1.401.618-1.772.413-.37 1.066-.555 1.96-.555h3.44c.824 0 1.383.108 1.677.325.293.216.622.653.985 1.31l7.989 14.551zM64.66 86.366c-1.803 0-3.218.727-4.245 2.18-1.028 1.455-1.541 3.474-1.541 6.06 0 2.586.517 4.613 1.551 6.08 1.034 1.468 2.446 2.202 4.235 2.202 1.804 0 3.222-.73 4.257-2.19 1.034-1.461 1.551-3.492 1.551-6.092 0-2.586-.513-4.605-1.54-6.06-1.028-1.453-2.45-2.18-4.268-2.18zm0-4.864c3.44 0 6.27 1.23 8.492 3.69 2.223 2.46 3.334 5.598 3.334 9.414 0 3.844-1.104 6.99-3.313 9.436-2.208 2.446-5.046 3.669-8.513 3.669-3.424 0-6.255-1.234-8.491-3.701-2.237-2.467-3.355-5.602-3.355-9.404 0-3.83 1.108-6.971 3.323-9.424 2.216-2.454 5.057-3.68 8.523-3.68zM87.461 98.17v4.298h2.16c.908 0 1.555.175 1.94.524.384.35.576.93.576 1.74 0 .825-.196 1.42-.587 1.783-.392.363-1.035.545-1.93.545h-7.254c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.783 0-.74.189-1.303.566-1.687.378-.385.93-.577 1.657-.577h.356V86.828h-.356c-.713 0-1.262-.2-1.646-.598-.385-.398-.577-.968-.577-1.709 0-.81.203-1.401.608-1.772.406-.37 1.063-.555 1.971-.555h8.66c3.424 0 6.014.657 7.768 1.97 1.754 1.315 2.631 3.25 2.631 5.809 0 2.697-.873 4.738-2.62 6.122-1.748 1.384-4.34 2.076-7.78 2.076h-3.564zm0-11.343v6.625h2.977c1.65 0 2.89-.28 3.722-.839.832-.559 1.248-1.397 1.248-2.516 0-1.048-.43-1.855-1.29-2.421-.86-.566-2.086-.85-3.68-.85h-2.977zm27.267 20.568l-1.636 1.636a12.37 12.37 0 011.772-.44c.58-.098 1.15-.147 1.709-.147 1.104 0 2.268.164 3.491.492 1.223.329 1.967.493 2.233.493.447 0 1.03-.15 1.75-.45.72-.301 1.206-.452 1.458-.452.517 0 .947.2 1.29.598.342.398.513.898.513 1.5 0 .796-.472 1.474-1.415 2.033-.944.56-2.1.839-3.47.839-.937 0-2.139-.22-3.607-.66-1.467-.441-2.53-.661-3.187-.661-.992 0-2.11.272-3.354.817-1.244.546-2.013.818-2.307.818a2.14 2.14 0 01-1.53-.597c-.42-.399-.63-.878-.63-1.437 0-.391.134-.807.4-1.247.265-.44.733-1.01 1.404-1.709l2.118-2.139c-2.335-.852-4.194-2.386-5.578-4.602-1.384-2.215-2.075-4.763-2.075-7.642 0-3.802 1.104-6.909 3.312-9.32 2.209-2.411 5.053-3.617 8.534-3.617 3.467 0 6.304 1.209 8.513 3.627 2.208 2.418 3.312 5.522 3.312 9.31 0 3.774-1.097 6.884-3.291 9.33-2.195 2.446-4.977 3.67-8.345 3.67a22.5 22.5 0 01-1.384-.043zm1.195-21.03c-1.803 0-3.218.727-4.246 2.18-1.027 1.455-1.54 3.474-1.54 6.06 0 2.586.516 4.613 1.55 6.08 1.035 1.468 2.447 2.202 4.236 2.202 1.803 0 3.222-.73 4.256-2.19 1.035-1.461 1.552-3.492 1.552-6.092 0-2.586-.514-4.605-1.541-6.06-1.028-1.453-2.45-2.18-4.267-2.18z\"/></svg>"
},
"$:/core/images/mono-line": {
"title": "$:/core/images/mono-line",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-line tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.437 84.523h.908c1.922 0 3.381.489 4.378 1.468.997.979 1.495 2.411 1.495 4.298 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388h-16.07c-2.456 0-4.2-.454-5.232-1.361-1.032-.908-1.548-2.43-1.548-4.565 0-2.065.516-3.542 1.548-4.432 1.032-.89 2.776-1.334 5.232-1.334h1.869l-2.19-6.247H20.983l-2.296 6.247h1.87c2.42 0 4.155.453 5.205 1.361 1.05.908 1.575 2.376 1.575 4.405 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388H6.781c-2.456 0-4.2-.463-5.233-1.388C.516 93.9 0 92.389 0 90.289c0-1.887.498-3.32 1.495-4.298.997-.979 2.456-1.468 4.378-1.468h.908l14.308-39.83h-4.271c-2.42 0-4.156-.462-5.206-1.387-1.05-.926-1.575-2.42-1.575-4.485 0-2.1.525-3.613 1.575-4.538 1.05-.926 2.785-1.388 5.206-1.388h20.021c3.168 0 5.392 1.708 6.674 5.125v.16l16.924 46.343zm-27.976-39.83L24.72 67.225h15.483l-7.742-22.53zM89.506 68.56v16.284h8.008c5.66 0 9.646-.623 11.96-1.869 2.313-1.245 3.47-3.328 3.47-6.246 0-2.955-1.103-5.055-3.31-6.3-2.207-1.246-6.069-1.869-11.586-1.869h-8.542zm27.229-5.926c3.88 1.423 6.727 3.372 8.542 5.846 1.815 2.474 2.723 5.633 2.723 9.477 0 3.239-.783 6.193-2.35 8.862-1.565 2.67-3.808 4.859-6.726 6.567-1.709.997-3.622 1.718-5.74 2.163-2.118.445-5.116.667-8.996.667h-27.87c-2.349 0-4.03-.463-5.045-1.388-1.014-.926-1.521-2.438-1.521-4.538 0-1.887.48-3.32 1.441-4.298.961-.979 2.367-1.468 4.218-1.468h.907v-39.83h-.907c-1.851 0-3.257-.498-4.218-1.494-.961-.997-1.441-2.456-1.441-4.378 0-2.065.516-3.568 1.548-4.512 1.032-.943 2.705-1.414 5.018-1.414h24.56c7.51 0 13.214 1.459 17.111 4.377 3.898 2.92 5.847 7.19 5.847 12.814 0 2.776-.597 5.223-1.789 7.341-1.192 2.118-2.963 3.853-5.312 5.206zm-27.23-18.26v13.455h7.208c4.378 0 7.466-.516 9.264-1.549 1.797-1.032 2.696-2.776 2.696-5.232 0-2.313-.81-4.004-2.43-5.072-1.619-1.068-4.244-1.602-7.874-1.602h-8.863z\"/></svg>"
},
"$:/core/images/new-button": {
"title": "$:/core/images/new-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 72H8.007C3.591 72 0 68.418 0 64c0-4.41 3.585-8 8.007-8H56V8.007C56 3.591 59.582 0 64 0c4.41 0 8 3.585 8 8.007V56h47.993c4.416 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H72v47.993c0 4.416-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V72z\"/></svg>"
},
"$:/core/images/new-here-button": {
"title": "$:/core/images/new-here-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-here-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.838 20.935l-3.572.938c-3.688.968-8.23 4.43-10.136 7.731L3.37 96.738c-1.905 3.3-.771 7.524 2.534 9.432l33.717 19.466c3.297 1.904 7.53.78 9.435-2.521l38.76-67.134c1.905-3.3 2.632-8.963 1.623-12.646L83.285 20.88c-1.009-3.68-4.821-5.884-8.513-4.915l-7.603 1.995.043.287c.524 3.394 2.053 7.498 4.18 11.55.418.163.829.36 1.23.59a8.864 8.864 0 014.438 8.169c.104.132.21.264.316.395l-.386.318a8.663 8.663 0 01-1.082 3.137c-2.42 4.192-7.816 5.608-12.051 3.163-4.12-2.379-5.624-7.534-3.476-11.671-2.177-4.394-3.788-8.874-4.543-12.964z\"/><path d=\"M69.554 44.76c-5.944-7.476-10.74-17.196-11.955-25.059-1.68-10.875 3.503-18.216 15.082-18.04 10.407.158 19.975 5.851 24.728 13.785 5.208 8.695 2.95 17.868-6.855 20.496l-2.037-7.601c4.232-1.134 4.999-4.248 2.24-8.853-3.37-5.626-10.465-9.848-18.146-9.965-6.392-.097-8.31 2.62-7.323 9.01.999 6.465 5.318 15.138 10.582 21.65l-.072.06c.559 1.553-4.17 6.44-5.938 4.888l-.005.004-.028-.034a1.323 1.323 0 01-.124-.135 2.618 2.618 0 01-.149-.205z\"/><rect width=\"16\" height=\"48\" x=\"96\" y=\"80\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"80\" y=\"96\" rx=\"8\"/></g></svg>"
},
"$:/core/images/new-image-button": {
"title": "$:/core/images/new-image-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.362 73.627l15.826-27.41a2.626 2.626 0 00-.962-3.59l-50.01-28.872a2.626 2.626 0 00-3.588.961L30.058 36.49l10.04-5.261c3.042-1.595 6.771.114 7.55 3.46l3.607 17.702 9.88.85a5.25 5.25 0 014.571 3.77c.034.115.1.344.199.671.165.553.353 1.172.562 1.843.595 1.914 1.23 3.85 1.872 5.678.207.588.412 1.156.614 1.701.625 1.685 1.209 3.114 1.725 4.207.255.54.485.977.726 1.427.214.212.547.425 1.011.622 1.141.482 2.784.74 4.657.758.864.008 1.71-.034 2.492-.11.448-.043.753-.085.871-.104.315-.053.625-.077.927-.076zM37.47 2.649A5.257 5.257 0 0144.649.725l63.645 36.746a5.257 5.257 0 011.923 7.178L73.47 108.294a5.257 5.257 0 01-7.177 1.923L2.649 73.47a5.257 5.257 0 01-1.924-7.177L37.471 2.649zm42.837 50.49a5.25 5.25 0 105.25-9.092 5.25 5.25 0 00-5.25 9.093zM96 112h-7.993c-4.419 0-8.007-3.582-8.007-8 0-4.41 3.585-8 8.007-8H96v-7.993C96 83.588 99.582 80 104 80c4.41 0 8 3.585 8 8.007V96h7.993c4.419 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H112v7.993c0 4.419-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V112zM33.347 51.791c7.428 7.948 9.01 10.69 7.449 13.394-1.56 2.703-13.838-2.328-16.094 1.58-2.256 3.908-.907 3.258-2.437 5.908l19.73 11.39s-5.605-8.255-4.235-10.628c2.515-4.356 8.77-1.256 10.365-4.019 2.414-4.181-5.103-9.639-14.778-17.625z\"/></svg>"
},
"$:/core/images/new-journal-button": {
"title": "$:/core/images/new-journal-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-journal-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.545 112.818v11.818c0 1.306 1.086 2.364 2.425 2.364h6.06c1.34 0 2.425-1.058 2.425-2.364v-11.818h12.12c1.34 0 2.425-1.058 2.425-2.363v-5.91c0-1.305-1.085-2.363-2.424-2.363h-12.121V90.364c0-1.306-1.086-2.364-2.425-2.364h-6.06c-1.34 0-2.425 1.058-2.425 2.364v11.818h-12.12c-1.34 0-2.425 1.058-2.425 2.363v5.91c0 1.305 1.085 2.363 2.424 2.363h12.121zM60.016 4.965c-4.781-2.76-10.897-1.118-13.656 3.66L5.553 79.305A9.993 9.993 0 009.21 92.963l51.04 29.468c4.78 2.76 10.897 1.118 13.655-3.66l40.808-70.681a9.993 9.993 0 00-3.658-13.656L60.016 4.965zm-3.567 27.963a6 6 0 106-10.393 6 6 0 00-6 10.393zm31.697 17.928a6 6 0 106-10.392 6 6 0 00-6 10.392z\"/><text class=\"tc-fill-background\" font-family=\"Helvetica\" font-size=\"47.172\" font-weight=\"bold\" transform=\"rotate(30 25.742 95.82)\"><tspan x=\"42\" y=\"77.485\" text-anchor=\"middle\"><<now \"DD\">></tspan></text></g></svg>"
},
"$:/core/images/opacity": {
"title": "$:/core/images/opacity",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-opacity tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.362 65a51.595 51.595 0 01-1.942 6H82.584a35.867 35.867 0 002.997-6h16.78zm.472-2c.423-1.961.734-3.963.929-6H87.656a35.78 35.78 0 01-1.368 6h16.546zm-3.249 10a51.847 51.847 0 01-3.135 6H75.812a36.205 36.205 0 005.432-6h18.341zm-4.416 8c-1.424 2.116-3 4.12-4.71 6H60.46a35.843 35.843 0 0012.874-6h21.834zm-7.513-34h16.107C101.247 20.627 79.033 0 52 0 23.281 0 0 23.281 0 52c0 25.228 17.965 46.26 41.8 51h20.4a51.66 51.66 0 0015.875-6H39v-2h42.25a52.257 52.257 0 007.288-6H39v-2h4.539C27.739 83.194 16 68.968 16 52c0-19.882 16.118-36 36-36 18.186 0 33.222 13.484 35.656 31zm.22 2h16.039a52.823 52.823 0 010 6H87.877a36.483 36.483 0 000-6z\"/><path d=\"M76 128c28.719 0 52-23.281 52-52s-23.281-52-52-52-52 23.281-52 52 23.281 52 52 52zm0-16c19.882 0 36-16.118 36-36S95.882 40 76 40 40 56.118 40 76s16.118 36 36 36z\"/><path d=\"M37 58h53v4H37v-4zm3-8h53v4H40v-4zm0-8h53v4H40v-4zm-8 24h53v4H32v-4zm-2 8h53v4H30v-4zm-3 8h53v4H27v-4z\"/></g></svg>"
},
"$:/core/images/open-window": {
"title": "$:/core/images/open-window",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-open-window tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M16 112h88.994c3.87 0 7.006 3.59 7.006 8 0 4.418-3.142 8-7.006 8H7.006C3.136 128 0 124.41 0 120a9.321 9.321 0 010-.01V24.01C0 19.586 3.59 16 8 16c4.418 0 8 3.584 8 8.01V112z\"/><path d=\"M96 43.196V56a8 8 0 1016 0V24c0-4.41-3.585-8-8.007-8H72.007C67.588 16 64 19.582 64 24c0 4.41 3.585 8 8.007 8H84.57l-36.3 36.299a8 8 0 00-.001 11.316c3.117 3.117 8.19 3.123 11.316-.003L96 43.196zM32 7.999C32 3.581 35.588 0 40 0h80c4.419 0 8 3.588 8 8v80c0 4.419-3.588 8-8 8H40c-4.419 0-8-3.588-8-8V8z\"/></g></svg>"
},
"$:/core/images/options-button": {
"title": "$:/core/images/options-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-options-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M110.488 76a47.712 47.712 0 01-5.134 12.384l6.724 6.724c3.123 3.123 3.132 8.192.011 11.313l-5.668 5.668c-3.12 3.12-8.186 3.117-11.313-.01l-6.724-6.725c-3.82 2.258-7.98 4-12.384 5.134v9.505c0 4.417-3.578 8.007-7.992 8.007h-8.016C55.58 128 52 124.415 52 119.993v-9.505a47.712 47.712 0 01-12.384-5.134l-6.724 6.725c-3.123 3.122-8.192 3.131-11.313.01l-5.668-5.668c-3.12-3.12-3.116-8.186.01-11.313l6.725-6.724c-2.257-3.82-4-7.98-5.134-12.384H8.007C3.591 76 0 72.422 0 68.01v-8.017C0 55.58 3.585 52 8.007 52h9.505a47.712 47.712 0 015.134-12.383l-6.724-6.725c-3.123-3.122-3.132-8.191-.011-11.312l5.668-5.669c3.12-3.12 8.186-3.116 11.313.01l6.724 6.725c3.82-2.257 7.98-4 12.384-5.134V8.007C52 3.591 55.578 0 59.992 0h8.016C72.42 0 76 3.585 76 8.007v9.505a47.712 47.712 0 0112.384 5.134l6.724-6.724c3.123-3.123 8.192-3.132 11.313-.01l5.668 5.668c3.12 3.12 3.116 8.186-.01 11.312l-6.725 6.725c2.257 3.82 4 7.979 5.134 12.383h9.505c4.416 0 8.007 3.578 8.007 7.992v8.017c0 4.411-3.585 7.991-8.007 7.991h-9.505zM64 96c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/></svg>"
},
"$:/core/images/paint": {
"title": "$:/core/images/paint",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-paint tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M83.527 76.19C90.43 69.287 91.892 59 87.91 50.665l37.903-37.902c2.919-2.92 2.913-7.659 0-10.572a7.474 7.474 0 00-10.572 0L77.338 40.093c-8.335-3.982-18.622-2.521-25.526 4.383l31.715 31.715zm-2.643 2.644L49.169 47.119S8.506 81.243 0 80.282c0 0 3.782 5.592 6.827 8.039 14.024-5.69 37.326-24.6 37.326-24.6l.661.66S19.45 90.222 9.18 92.047c1.222 1.44 4.354 4.053 6.247 5.776 5.417-1.488 34.733-28.57 34.733-28.57l.661.66-32.407 31.022 5.285 5.286L56.106 75.2l.662.66s-27.864 30.536-28.684 32.432c0 0 6.032 6.853 7.569 7.824.702-2.836 27.884-33.485 27.884-33.485l.661.66s-20.597 23.755-24.964 36.732c3.21 3.549 7.5 5.137 10.926 6.298-2.19-11.817 30.724-47.487 30.724-47.487z\"/></svg>"
},
"$:/core/images/palette": {
"title": "$:/core/images/palette",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-palette tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.247 39.182a93.52 93.52 0 00-16.228-1.4C28.662 37.781 0 57.131 0 81.002c0 9.642 4.676 18.546 12.58 25.735C23.504 91.19 26.34 72.395 36.89 63.562c15.183-12.713 26.538-7.828 26.538-7.828l16.82-16.552zm26.535 9.655c13.049 7.913 21.257 19.392 21.257 32.166 0 9.35.519 17.411-11.874 25.08-10.797 6.681-3.824-6.536-11.844-10.898s-19.946 1.308-18.213 7.906c3.2 12.181 19.422 11.455 6.314 16.658-13.107 5.202-18.202 4.476-28.403 4.476-7.821 0-15.315-.947-22.243-2.68 9.844-4.197 27.88-12.539 33.354-19.456C82.788 92.409 87.37 80 83.324 72.484c-.194-.359 11.215-11.668 23.458-23.647zM1.134 123.867l-.66.002c33.479-14.94 22.161-64.226 58.818-64.226.317 1.418.644 2.944 1.062 4.494-25.907-4.166-23.567 48.031-59.22 59.73zm.713-.007c38.872-.506 78.152-22.347 78.152-44.813-9.27 0-14.073-3.48-16.816-7.942-16.597-7.003-30.365 45.715-61.336 52.755zm65.351-64.008c-4.45 4.115 4.886 16.433 11.318 11.318l45.27-45.27c11.317-11.318 0-22.635-11.318-11.318-11.317 11.318-33.518 34.405-45.27 45.27z\"/></svg>"
},
"$:/core/images/permalink-button": {
"title": "$:/core/images/permalink-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permalink-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.483 48l-7.387 32h-25.58l7.388-32h25.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L100.598 32h3.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-7.096l-7.387 32H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H85.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L69.402 96h-25.58L38.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L27.402 96h-3.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h7.096l7.387-32H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h18.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L58.598 32h25.58z\"/></svg>"
},
"$:/core/images/permaview-button": {
"title": "$:/core/images/permaview-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permaview-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.483 48l-1.846 8h-5.58l1.847-8h5.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L101.598 32h2.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-6.096l-1.847 8h7.944c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H92.364l-1.846 8H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H86.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L70.402 96h-5.58L59.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L48.402 96h-5.58L37.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L26.402 96h-2.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h6.096l1.847-8h-7.944C19.59 72 16 68.418 16 64c0-4.41 3.581-8 8-8h11.637l1.846-8H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h17.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L57.598 32h5.58L68.8 7.642c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L79.598 32h5.58zM53.904 48l-1.847 8h5.58l1.846-8h-5.579zm22.039 24l-1.847 8h-5.58l1.847-8h5.58zm-27.58 0l-1.846 8h5.579l1.847-8h-5.58z\"/></svg>"
},
"$:/core/images/picture": {
"title": "$:/core/images/picture",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-picture tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112 68.233v-48.23A4.001 4.001 0 00107.997 16H20.003A4.001 4.001 0 0016 20.003v38.31l9.241-14.593c2.8-4.422 9.023-5.008 12.6-1.186l18.247 20.613 13.687-6.407a8 8 0 018.903 1.492 264.97 264.97 0 002.92 2.739 249.44 249.44 0 006.798 6.066 166.5 166.5 0 002.106 1.778c2.108 1.747 3.967 3.188 5.482 4.237.748.518 1.383.92 2.044 1.33.444.117 1.046.144 1.809.05 1.873-.233 4.238-1.144 6.723-2.547a36.016 36.016 0 003.205-2.044c.558-.4.93-.686 1.07-.802.376-.31.765-.577 1.165-.806zM0 8.007A8.01 8.01 0 018.007 0h111.986A8.01 8.01 0 01128 8.007v111.986a8.01 8.01 0 01-8.007 8.007H8.007A8.01 8.01 0 010 119.993V8.007zM95 42a8 8 0 100-16 8 8 0 000 16zM32 76c15.859 4.83 20.035 7.244 20.035 12S32 95.471 32 102.347c0 6.876 1.285 4.99 1.285 9.653H68s-13.685-6.625-13.685-10.8c0-7.665 10.615-8.34 10.615-13.2 0-7.357-14.078-8.833-32.93-12z\"/></svg>"
},
"$:/core/images/plugin-generic-language": {
"title": "$:/core/images/plugin-generic-language",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" class=\"tc-image-plugin-generic-language tc-image-button\"><path fill-rule=\"evenodd\" d=\"M61.207 68.137c-4.324 2.795-6.999 6.656-6.999 10.921 0 7.906 9.19 14.424 21.042 15.336 2.162 3.902 8.598 6.785 16.318 7.01-5.126-1.125-9.117-3.742-10.62-7.01C92.805 93.487 102 86.967 102 79.059c0-8.53-10.699-15.445-23.896-15.445-6.599 0-12.572 1.729-16.897 4.524zm12.794-14.158c-4.324 2.795-10.298 4.524-16.897 4.524-2.619 0-5.14-.272-7.497-.775-3.312 2.25-8.383 3.69-14.067 3.69l-.255-.002c4.119-.892 7.511-2.747 9.478-5.13-6.925-2.704-11.555-7.617-11.555-13.228 0-8.53 10.699-15.445 23.896-15.445C70.301 27.613 81 34.528 81 43.058c0 4.265-2.675 8.126-6.999 10.921zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
},
"$:/core/images/plugin-generic-plugin": {
"title": "$:/core/images/plugin-generic-plugin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" class=\"tc-image-plugin-generic-plugin tc-image-button\"><path fill-rule=\"evenodd\" d=\"M40.397 76.446V95.34h14.12l-.001-.005a6.912 6.912 0 005.364-11.593l.046-.023a6.912 6.912 0 119.979.526l.086.055a6.914 6.914 0 004.408 10.948l-.023.092h21.32V75.568l-.15.038a6.912 6.912 0 00-11.593-5.364l-.022-.046a6.912 6.912 0 11.526-9.979l.055-.086a6.914 6.914 0 0010.948-4.408c.079.018.158.038.236.059v-15.74h-21.32l.023-.094a6.914 6.914 0 01-4.408-10.947 10.23 10.23 0 00-.086-.055 6.912 6.912 0 10-9.979-.526l-.046.023a6.912 6.912 0 01-5.364 11.593l.001.005h-14.12v12.847A6.912 6.912 0 0129.5 59.843l-.054.086a6.912 6.912 0 10-.526 9.979l.023.046a6.912 6.912 0 0111.455 6.492zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
},
"$:/core/images/plugin-generic-theme": {
"title": "$:/core/images/plugin-generic-theme",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" class=\"tc-image-plugin-generic-theme tc-image-button\"><path fill-rule=\"evenodd\" d=\"M29.408 91.472L51.469 69.41l-.004-.005a2.22 2.22 0 01.004-3.146c.87-.87 2.281-.872 3.147-.005l9.465 9.464a2.22 2.22 0 01-.005 3.147c-.87.87-2.28.871-3.147.005l-.005-.005-22.061 22.062a6.686 6.686 0 11-9.455-9.455zM60.802 66.38c-2.436-2.704-4.465-5.091-5.817-6.869-6.855-9.014-10.313-4.268-14.226 0-3.913 4.268 1.03 7.726-2.683 10.741-3.713 3.015-3.484 4.06-9.752-1.455-6.267-5.516-6.7-7.034-3.823-10.181 2.877-3.147 5.281 1.808 11.159-3.785 5.877-5.593.94-10.55.94-10.55s12.237-25.014 28.588-23.167c16.351 1.848-6.186-2.392-11.792 17.226-2.4 8.4.447 6.42 4.998 9.968 1.394 1.086 6.03 4.401 11.794 8.685l20.677-20.676 1.615-4.766 7.84-4.689 3.151 3.152-4.688 7.84-4.766 1.615-20.224 20.223c12.663 9.547 28.312 22.146 28.312 26.709 0 7.217-3.071 11.526-9.535 9.164-4.693-1.715-18.768-15.192-28.753-25.897l-2.893 2.893-3.151-3.152 3.029-3.029zM63.953 0l54.56 32v64l-54.56 32-54.56-32V32l54.56-32z\"/></svg>"
},
"$:/core/images/plus-button": {
"title": "$:/core/images/plus-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-plus-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64-.333c35.346 0 64 28.654 64 64 0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64zM64 16c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"/><rect width=\"80\" height=\"16\" x=\"24\" y=\"56\" rx=\"8\"/><rect width=\"16\" height=\"80\" x=\"56\" y=\"24\" rx=\"8\"/></svg>"
},
"$:/core/images/preview-closed": {
"title": "$:/core/images/preview-closed",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-closed tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M.088 64a7.144 7.144 0 001.378 5.458C16.246 88.818 39.17 100.414 64 100.414c24.83 0 47.753-11.596 62.534-30.956A7.144 7.144 0 00127.912 64C110.582 78.416 88.304 87.086 64 87.086 39.696 87.086 17.418 78.416.088 64z\"/><rect width=\"4\" height=\"16\" x=\"62\" y=\"96\" rx=\"4\"/><rect width=\"4\" height=\"16\" x=\"78\" y=\"93\" rx=\"4\" transform=\"rotate(-5 80 101)\"/><rect width=\"4\" height=\"16\" x=\"46\" y=\"93\" rx=\"4\" transform=\"rotate(5 48 101)\"/><rect width=\"4\" height=\"16\" x=\"30\" y=\"88\" rx=\"4\" transform=\"rotate(10 32 96)\"/><rect width=\"4\" height=\"16\" x=\"94\" y=\"88\" rx=\"4\" transform=\"rotate(-10 96 96)\"/><rect width=\"4\" height=\"16\" x=\"110\" y=\"80\" rx=\"4\" transform=\"rotate(-20 112 88)\"/><rect width=\"4\" height=\"16\" x=\"14\" y=\"80\" rx=\"4\" transform=\"rotate(20 16 88)\"/></g></svg>"
},
"$:/core/images/preview-open": {
"title": "$:/core/images/preview-open",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-open tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.11 99.588c-24.83 0-47.754-11.596-62.534-30.957a7.148 7.148 0 010-8.675C16.356 40.596 39.28 29 64.11 29c24.83 0 47.753 11.596 62.534 30.956a7.148 7.148 0 010 8.675c-14.78 19.36-37.703 30.957-62.534 30.957zm46.104-32.007c1.44-1.524 1.44-3.638 0-5.162C99.326 50.9 82.439 44 64.147 44S28.968 50.9 18.08 62.42c-1.44 1.523-1.44 3.637 0 5.16C28.968 79.1 45.855 86 64.147 86s35.179-6.9 46.067-18.42z\"/><path d=\"M63.5 88C76.479 88 87 77.479 87 64.5S76.479 41 63.5 41 40 51.521 40 64.5 50.521 88 63.5 88z\"/></g></svg>"
},
"$:/core/images/print-button": {
"title": "$:/core/images/print-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-print-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M112 71V30.5h-.032c-.035-2-.816-3.99-2.343-5.516L86.998 2.357A7.978 7.978 0 0081 .02V0H24a8 8 0 00-8 8v63h8V8h57v14.5c0 4.422 3.582 8 8 8h15V71h8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/><path d=\"M0 80.005C0 71.165 7.156 64 16 64h96c8.836 0 16 7.155 16 16.005v31.99c0 8.84-7.156 16.005-16 16.005H16c-8.836 0-16-7.155-16-16.005v-31.99zM104 96a8 8 0 100-16 8 8 0 000 16z\"/></g></svg>"
},
"$:/core/images/quote": {
"title": "$:/core/images/quote",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-quote tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M51.219 117.713V62.199H27.427c0-8.891 1.683-16.401 5.047-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.36 3.184-20.728 6.669-6.368 3.484-11.835 7.87-16.401 13.157C9.524 27.113 5.98 33.241 3.456 40.21.933 47.18-.21 54.63.03 62.56v55.153H51.22zm76.781 0V62.199h-23.791c0-8.891 1.682-16.401 5.046-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.359 3.184-20.727 6.669-6.369 3.484-11.836 7.87-16.402 13.157-4.566 5.287-8.11 11.415-10.634 18.384-2.523 6.97-3.665 14.42-3.424 22.35v55.153H128z\"/></svg>"
},
"$:/core/images/refresh-button": {
"title": "$:/core/images/refresh-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-refresh-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M106.369 39.433c10.16 20.879 6.57 46.764-10.771 64.106-21.87 21.87-57.327 21.87-79.196 0-21.87-21.87-21.87-57.326 0-79.196a8 8 0 1111.314 11.314c-15.621 15.62-15.621 40.947 0 56.568 15.62 15.621 40.947 15.621 56.568 0C97.72 78.79 99.6 58.175 89.924 42.73l-6.44 12.264a8 8 0 11-14.166-7.437L84.435 18.76a8 8 0 0110.838-3.345l28.873 15.345a8 8 0 11-7.51 14.129l-10.267-5.457zm-8.222-12.368c-.167-.19-.336-.38-.506-.57l.96-.296-.454.866z\"/></svg>"
},
"$:/core/images/right-arrow": {
"title": "$:/core/images/right-arrow",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-right-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M99.069 64.173c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></svg>"
},
"$:/core/images/rotate-left": {
"title": "$:/core/images/rotate-left",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-rotate-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"32\" height=\"80\" rx=\"8\"/><rect width=\"80\" height=\"32\" x=\"48\" y=\"96\" rx=\"8\"/><path d=\"M61.32 36.65c19.743 2.45 35.023 19.287 35.023 39.693a4 4 0 01-8 0c0-15.663-11.254-28.698-26.117-31.46l3.916 3.916a4 4 0 11-5.657 5.657L49.172 43.142a4 4 0 010-5.657l11.313-11.313a4 4 0 115.657 5.656l-4.821 4.822z\"/></g></svg>"
},
"$:/core/images/save-button": {
"title": "$:/core/images/save-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M120.783 34.33c4.641 8.862 7.266 18.948 7.266 29.646 0 35.347-28.653 64-64 64-35.346 0-64-28.653-64-64 0-35.346 28.654-64 64-64 18.808 0 35.72 8.113 47.43 21.03l2.68-2.68c3.13-3.13 8.197-3.132 11.321-.008 3.118 3.118 3.121 8.193-.007 11.32l-4.69 4.691zm-12.058 12.058a47.876 47.876 0 013.324 17.588c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48c14.39 0 27.3 6.332 36.098 16.362L58.941 73.544 41.976 56.578c-3.127-3.127-8.201-3.123-11.32-.005-3.123 3.124-3.119 8.194.006 11.319l22.617 22.617a7.992 7.992 0 005.659 2.347c2.05 0 4.101-.783 5.667-2.349l44.12-44.12z\"/></svg>"
},
"$:/core/images/size": {
"title": "$:/core/images/size",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-size tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M92.343 26l-9.171 9.172a4 4 0 105.656 5.656l16-16a4 4 0 000-5.656l-16-16a4 4 0 10-5.656 5.656L92.343 18H22a4 4 0 00-4 4v70.343l-9.172-9.171a4 4 0 10-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656L26 92.343V22l-4 4h70.343zM112 52v64l4-4H52a4 4 0 100 8h64a4 4 0 004-4V52a4 4 0 10-8 0z\"/></svg>"
},
"$:/core/images/spiral": {
"title": "$:/core/images/spiral",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-spiral tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074a4.785 4.785 0 00-4.52-5.03 4.778 4.778 0 00-5.03 4.52c-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01a1.047 1.047 0 01-.264-.332c-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"/></svg>"
},
"$:/core/images/stamp": {
"title": "$:/core/images/stamp",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-stamp tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M49.733 64H16.01C11.584 64 8 67.583 8 72.003V97h112V72.003A8 8 0 00111.99 64H78.267A22.813 22.813 0 0175.5 53.077c0-6.475 2.687-12.324 7.009-16.497A22.818 22.818 0 0087 22.952C87 10.276 76.703 0 64 0S41 10.276 41 22.952c0 5.103 1.669 9.817 4.491 13.628 4.322 4.173 7.009 10.022 7.009 16.497 0 3.954-1.002 7.675-2.767 10.923zM8 104h112v8H8v-8z\"/></svg>"
},
"$:/core/images/star-filled": {
"title": "$:/core/images/star-filled",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-star-filled tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M61.836 96.823l37.327 27.287c2.72 1.99 6.379-.69 5.343-3.912L90.29 75.988l-1.26 3.91 37.285-27.345c2.718-1.993 1.32-6.327-2.041-6.33l-46.113-.036 3.3 2.416L67.176 4.416c-1.04-3.221-5.563-3.221-6.604 0L46.29 48.603l3.3-2.416-46.113.036c-3.362.003-4.759 4.337-2.04 6.33L38.72 79.898l-1.26-3.91-14.216 44.21c-1.036 3.223 2.622 5.901 5.343 3.912l37.326-27.287h-4.078z\"/></svg>"
},
"$:/core/images/storyview-classic": {
"title": "$:/core/images/storyview-classic",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-classic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm0 48C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0 32C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
},
"$:/core/images/storyview-pop": {
"title": "$:/core/images/storyview-pop",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-pop tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm-7.99 40C11.587 56 8 59.578 8 63.992v16.016C8 84.422 11.584 88 16.01 88h95.98c4.424 0 8.01-3.578 8.01-7.992V63.992c0-4.414-3.584-7.992-8.01-7.992H16.01zM24 96C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0-32C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
},
"$:/core/images/storyview-zoomin": {
"title": "$:/core/images/storyview-zoomin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-zoomin tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16A8 8 0 0016 24.009V71.99C16 76.414 19.588 80 24 80h80a8 8 0 008-8.009V24.01c0-4.423-3.588-8.009-8-8.009H24z\"/></svg>"
},
"$:/core/images/strikethrough": {
"title": "$:/core/images/strikethrough",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-strikethrough tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M92.794 38.726h15.422c-.229-6.74-1.514-12.538-3.856-17.393-2.342-4.855-5.54-8.881-9.596-12.08-4.055-3.199-8.767-5.54-14.136-7.025C75.258.743 69.433 0 63.15 0a62.76 62.76 0 00-16.364 2.142C41.474 3.57 36.733 5.74 32.564 8.653c-4.17 2.913-7.511 6.626-10.025 11.138-2.513 4.512-3.77 9.853-3.77 16.022 0 5.597 1.115 10.252 3.342 13.965 2.228 3.712 5.198 6.74 8.91 9.081 3.713 2.342 7.911 4.227 12.595 5.655a194.641 194.641 0 0014.308 3.77c4.855 1.085 9.624 2.142 14.308 3.17 4.683 1.028 8.881 2.37 12.594 4.027 3.713 1.656 6.683 3.798 8.91 6.425 2.228 2.628 3.342 6.055 3.342 10.281 0 4.456-.914 8.111-2.742 10.967a19.953 19.953 0 01-7.197 6.768c-2.97 1.657-6.311 2.828-10.024 3.513a60.771 60.771 0 01-11.052 1.028c-4.57 0-9.025-.571-13.366-1.713-4.34-1.143-8.139-2.913-11.394-5.312-3.256-2.4-5.884-5.455-7.883-9.168-1.999-3.712-2.998-8.139-2.998-13.28H15c0 7.426 1.342 13.852 4.027 19.278 2.684 5.426 6.34 9.881 10.966 13.365 4.627 3.484 9.996 6.083 16.107 7.797 6.112 1.713 12.595 2.57 19.449 2.57 5.597 0 11.223-.657 16.878-1.97 5.655-1.314 10.767-3.428 15.336-6.34 4.57-2.914 8.31-6.683 11.224-11.31 2.913-4.626 4.37-10.195 4.37-16.707 0-6.054-1.115-11.08-3.342-15.079-2.228-3.998-5.198-7.31-8.91-9.938-3.713-2.627-7.911-4.712-12.595-6.254a170.83 170.83 0 00-14.308-4.027 549.669 549.669 0 00-14.308-3.17c-4.683-.971-8.881-2.2-12.594-3.684-3.713-1.485-6.683-3.399-8.91-5.74-2.228-2.342-3.342-5.398-3.342-9.168 0-3.998.771-7.34 2.313-10.024 1.543-2.685 3.599-4.826 6.17-6.426 2.57-1.599 5.51-2.741 8.824-3.427a49.767 49.767 0 0110.11-1.028c8.453 0 15.393 1.97 20.819 5.912 5.426 3.94 8.596 10.31 9.51 19.106z\"/><path d=\"M5 54h118v16H5z\"/></g></svg>"
},
"$:/core/images/subscript": {
"title": "$:/core/images/subscript",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-subscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 128.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
},
"$:/core/images/superscript": {
"title": "$:/core/images/superscript",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-superscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 63.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
},
"$:/core/images/tag-button": {
"title": "$:/core/images/tag-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tag-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M18.164 47.66l.004 4.105c.003 3.823 2.19 9.097 4.885 11.792l61.85 61.85c2.697 2.697 7.068 2.69 9.769-.01L125.767 94.3a6.903 6.903 0 00.01-9.77L63.928 22.683c-2.697-2.697-7.976-4.88-11.796-4.881l-27.076-.007a6.902 6.902 0 00-6.91 6.91l.008 9.96.287.033c3.73.411 8.489-.044 13.365-1.153a9.702 9.702 0 0111.14-3.662l.291-.13.128.285a9.7 9.7 0 013.3 2.17c3.796 3.796 3.801 9.945.012 13.734-3.618 3.618-9.386 3.777-13.204.482-5.365 1.122-10.674 1.596-15.309 1.237z\"/><path d=\"M47.633 39.532l.023.051c-9.689 4.356-21.584 6.799-30.396 5.828C5.273 44.089-1.028 36.43 2.443 24.078 5.562 12.976 14.3 4.361 24.047 1.548c10.68-3.083 19.749 1.968 19.749 13.225h-8.623c0-4.859-3.078-6.573-8.735-4.94-6.91 1.995-13.392 8.383-15.694 16.577-1.915 6.818.417 9.653 7.46 10.43 7.126.785 17.531-1.352 25.917-5.121l.027.06.036-.017c1.76-.758 6.266 6.549 3.524 7.74a2.8 2.8 0 01-.075.03z\"/></g></svg>"
},
"$:/core/images/theme-button": {
"title": "$:/core/images/theme-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-theme-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.854 66.945a122.626 122.626 0 01-3.9-4.819c-11.064-14.548-16.645-6.888-22.96 0-6.315 6.888 1.664 12.47-4.33 17.335-5.993 4.866-5.623 6.552-15.737-2.35-10.115-8.9-10.815-11.351-6.172-16.43 4.644-5.08 8.524 2.918 18.01-6.108 9.485-9.026 1.517-17.026 1.517-17.026S42.03-2.824 68.42.157c26.39 2.982-9.984-3.86-19.031 27.801-3.874 13.556.72 10.362 8.066 16.087 1.707 1.33 6.428 4.732 12.671 9.318-6.129 5.879-11.157 10.669-14.273 13.582zm11.641 12.947c16.013 17.036 37.742 37.726 45.117 40.42 10.432 3.813 15.388-3.141 15.388-14.79 0-7.151-23.83-26.542-43.924-41.769-7.408 7.156-13.376 12.953-16.58 16.139z\"/><path d=\"M11.069 109.828L46.31 74.587a3.56 3.56 0 115.037-5.032l15.098 15.098a3.56 3.56 0 11-5.032 5.037l-35.24 35.241c-4.171 4.17-10.933 4.17-15.104 0-4.17-4.17-4.17-10.933 0-15.103zM124.344 6.622l5.034 5.034-7.49 12.524-7.613 2.58L61.413 79.62l-5.034-5.034 52.861-52.862 2.58-7.614 12.524-7.49z\"/></g></svg>"
},
"$:/core/images/timestamp-off": {
"title": "$:/core/images/timestamp-off",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-off tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z\"/></g></svg>"
},
"$:/core/images/timestamp-on": {
"title": "$:/core/images/timestamp-on",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-on tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M13.41 27.178a5.005 5.005 0 01-7.045-.613 5.008 5.008 0 01.616-7.047l9.95-8.348a5 5 0 016.429 7.661l-9.95 8.348zm89.573 0a5.005 5.005 0 007.045-.613 5.008 5.008 0 00-.616-7.047l-9.95-8.348a5 5 0 00-6.428 7.661l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z\"/></g></svg>"
},
"$:/core/images/tip": {
"title": "$:/core/images/tip",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tip tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128.242c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64 0 35.346 28.654 64 64 64zm11.936-36.789c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349C54.33 94.05 58.824 95.82 64 95.82c5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.456c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zM64.3 24.242c11.618 0 23.699 7.82 23.699 24.2S75.92 71.754 75.92 83.576c0 5.873-5.868 9.26-11.92 9.26s-12.027-3.006-12.027-9.26C51.973 71.147 40 65.47 40 48.442s12.683-24.2 24.301-24.2z\"/></svg>"
},
"$:/core/images/transcludify": {
"title": "$:/core/images/transcludify",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-transcludify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M0 59.482c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.651-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02C1.36 67.377.591 67.288 0 67.288v-7.806zm24.66 0c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.65-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02c-.946-.177-1.715-.266-2.306-.266v-7.806zm43.965-3.538L80.6 52.041l2.306 7.097-12.063 3.903 7.628 10.378-6.12 4.435-7.63-10.467-7.45 10.201-5.943-4.524 7.628-10.023-12.152-4.17 2.306-7.096 12.064 4.17V43.347h7.451v12.596zm34.425 11.344c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806zm24.66 0c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806z\"/></svg>"
},
"$:/core/images/twitter": {
"title": "$:/core/images/twitter",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-twitter tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.626 115.803A73.376 73.376 0 012 104.235c2.022.238 4.08.36 6.166.36 12.111 0 23.258-4.117 32.105-11.023-11.312-.208-20.859-7.653-24.148-17.883a25.98 25.98 0 0011.674-.441C15.971 72.881 7.061 62.474 7.061 49.997c0-.108 0-.216.002-.323a25.824 25.824 0 0011.709 3.22c-6.936-4.617-11.5-12.5-11.5-21.433 0-4.719 1.274-9.142 3.5-12.945 12.75 15.579 31.797 25.83 53.281 26.904-.44-1.884-.67-3.85-.67-5.868 0-14.22 11.575-25.75 25.852-25.75a25.865 25.865 0 0118.869 8.132 51.892 51.892 0 0016.415-6.248c-1.93 6.012-6.029 11.059-11.366 14.246A51.844 51.844 0 00128 25.878a52.428 52.428 0 01-12.9 13.33c.05 1.104.075 2.214.075 3.33 0 34.028-26 73.265-73.549 73.265\"/></svg>"
},
"$:/core/images/underline": {
"title": "$:/core/images/underline",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-underline tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M7 117.421h114.248V128H7v-10.579zm97.871-18.525V0h-16.26v55.856c0 4.463-.605 8.576-1.816 12.338-1.212 3.762-3.03 7.046-5.452 9.851-2.423 2.806-5.452 4.974-9.086 6.504-3.635 1.53-7.939 2.296-12.912 2.296-6.25 0-11.159-1.786-14.73-5.356-3.57-3.571-5.356-8.417-5.356-14.538V0H23v65.038c0 5.356.542 10.234 1.626 14.633 1.084 4.4 2.965 8.194 5.643 11.382 2.678 3.188 6.185 5.643 10.52 7.365 4.337 1.721 9.756 2.582 16.26 2.582 7.27 0 13.582-1.435 18.938-4.304 5.356-2.87 9.755-7.365 13.199-13.486h.382v15.686h15.303z\"/></svg>"
},
"$:/core/images/unfold-all-button": {
"title": "$:/core/images/unfold-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M63.945 60.624c-2.05 0-4.101-.78-5.666-2.345L35.662 35.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 41.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 58.279a7.986 7.986 0 01-5.663 2.346zM64.004 124.565c-2.05 0-4.102-.78-5.666-2.345L35.721 99.603c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 105.255l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.662 122.22a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/unfold-button": {
"title": "$:/core/images/unfold-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M63.945 63.624c-2.05 0-4.101-.78-5.666-2.345L35.662 38.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 44.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 61.279a7.986 7.986 0 01-5.663 2.346zM64.004 105.682c-2.05.001-4.102-.78-5.666-2.344L35.721 80.721c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 86.373l16.966-16.966c3.124-3.125 8.194-3.13 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319l-22.617 22.617a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/unlocked-padlock": {
"title": "$:/core/images/unlocked-padlock",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unlocked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M48.627 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h6.136c-10.455-12.651-27.364-35.788-4.3-55.142 24.636-20.672 45.835 4.353 55.777 16.201 9.943 11.85-2.676 22.437-12.457 9.892-9.78-12.545-21.167-24.146-33.207-14.043-12.041 10.104-1.757 22.36 8.813 34.958 2.467 2.94 3.641 5.732 3.865 8.134zm19.105 28.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
},
"$:/core/images/up-arrow": {
"title": "$:/core/images/up-arrow",
"created": "20150316000544368",
"modified": "20150316000831867",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-up-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M63.892.281c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.104 3.092-11.196 0L63.894 19.393 13.513 69.774a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98A7.892 7.892 0 0163.893.28z\"/></svg>"
},
"$:/core/images/video": {
"title": "$:/core/images/video",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-video tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 12c-34.91 0-55.273 2.917-58.182 5.833C2.91 20.75 0 41.167 0 64.5c0 23.333 2.91 43.75 5.818 46.667C8.728 114.083 29.091 117 64 117c34.91 0 55.273-2.917 58.182-5.833C125.09 108.25 128 87.833 128 64.5c0-23.333-2.91-43.75-5.818-46.667C119.272 14.917 98.909 12 64 12zm-9.084 32.618c-3.813-2.542-6.905-.879-6.905 3.698v31.368c0 4.585 3.099 6.235 6.905 3.698l22.168-14.779c3.813-2.542 3.806-6.669 0-9.206L54.916 44.618z\"/></svg>"
},
"$:/core/images/warning": {
"title": "$:/core/images/warning",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-warning tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M57.072 11c3.079-5.333 10.777-5.333 13.856 0l55.426 96c3.079 5.333-.77 12-6.928 12H8.574c-6.158 0-10.007-6.667-6.928-12l55.426-96zM64 37c-4.418 0-8 3.582-8 7.994v28.012C56 77.421 59.59 81 64 81c4.418 0 8-3.582 8-7.994V44.994C72 40.579 68.41 37 64 37zm0 67a8 8 0 100-16 8 8 0 000 16z\"/></svg>"
},
"$:/language/Buttons/AdvancedSearch/Caption": {
"title": "$:/language/Buttons/AdvancedSearch/Caption",
"text": "advanced search"
},
"$:/language/Buttons/AdvancedSearch/Hint": {
"title": "$:/language/Buttons/AdvancedSearch/Hint",
"text": "Advanced search"
},
"$:/language/Buttons/Cancel/Caption": {
"title": "$:/language/Buttons/Cancel/Caption",
"text": "cancel"
},
"$:/language/Buttons/Cancel/Hint": {
"title": "$:/language/Buttons/Cancel/Hint",
"text": "Discard changes to this tiddler"
},
"$:/language/Buttons/Clone/Caption": {
"title": "$:/language/Buttons/Clone/Caption",
"text": "clone"
},
"$:/language/Buttons/Clone/Hint": {
"title": "$:/language/Buttons/Clone/Hint",
"text": "Clone this tiddler"
},
"$:/language/Buttons/Close/Caption": {
"title": "$:/language/Buttons/Close/Caption",
"text": "close"
},
"$:/language/Buttons/Close/Hint": {
"title": "$:/language/Buttons/Close/Hint",
"text": "Close this tiddler"
},
"$:/language/Buttons/CloseAll/Caption": {
"title": "$:/language/Buttons/CloseAll/Caption",
"text": "close all"
},
"$:/language/Buttons/CloseAll/Hint": {
"title": "$:/language/Buttons/CloseAll/Hint",
"text": "Close all tiddlers"
},
"$:/language/Buttons/CloseOthers/Caption": {
"title": "$:/language/Buttons/CloseOthers/Caption",
"text": "close others"
},
"$:/language/Buttons/CloseOthers/Hint": {
"title": "$:/language/Buttons/CloseOthers/Hint",
"text": "Close other tiddlers"
},
"$:/language/Buttons/ControlPanel/Caption": {
"title": "$:/language/Buttons/ControlPanel/Caption",
"text": "control panel"
},
"$:/language/Buttons/ControlPanel/Hint": {
"title": "$:/language/Buttons/ControlPanel/Hint",
"text": "Open control panel"
},
"$:/language/Buttons/CopyToClipboard/Caption": {
"title": "$:/language/Buttons/CopyToClipboard/Caption",
"text": "copy to clipboard"
},
"$:/language/Buttons/CopyToClipboard/Hint": {
"title": "$:/language/Buttons/CopyToClipboard/Hint",
"text": "Copy this text to the clipboard"
},
"$:/language/Buttons/Delete/Caption": {
"title": "$:/language/Buttons/Delete/Caption",
"text": "delete"
},
"$:/language/Buttons/Delete/Hint": {
"title": "$:/language/Buttons/Delete/Hint",
"text": "Delete this tiddler"
},
"$:/language/Buttons/Edit/Caption": {
"title": "$:/language/Buttons/Edit/Caption",
"text": "edit"
},
"$:/language/Buttons/Edit/Hint": {
"title": "$:/language/Buttons/Edit/Hint",
"text": "Edit this tiddler"
},
"$:/language/Buttons/Encryption/Caption": {
"title": "$:/language/Buttons/Encryption/Caption",
"text": "encryption"
},
"$:/language/Buttons/Encryption/Hint": {
"title": "$:/language/Buttons/Encryption/Hint",
"text": "Set or clear a password for saving this wiki"
},
"$:/language/Buttons/Encryption/ClearPassword/Caption": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
"text": "clear password"
},
"$:/language/Buttons/Encryption/ClearPassword/Hint": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
"text": "Clear the password and save this wiki without encryption"
},
"$:/language/Buttons/Encryption/SetPassword/Caption": {
"title": "$:/language/Buttons/Encryption/SetPassword/Caption",
"text": "set password"
},
"$:/language/Buttons/Encryption/SetPassword/Hint": {
"title": "$:/language/Buttons/Encryption/SetPassword/Hint",
"text": "Set a password for saving this wiki with encryption"
},
"$:/language/Buttons/ExportPage/Caption": {
"title": "$:/language/Buttons/ExportPage/Caption",
"text": "export all"
},
"$:/language/Buttons/ExportPage/Hint": {
"title": "$:/language/Buttons/ExportPage/Hint",
"text": "Export all tiddlers"
},
"$:/language/Buttons/ExportTiddler/Caption": {
"title": "$:/language/Buttons/ExportTiddler/Caption",
"text": "export tiddler"
},
"$:/language/Buttons/ExportTiddler/Hint": {
"title": "$:/language/Buttons/ExportTiddler/Hint",
"text": "Export tiddler"
},
"$:/language/Buttons/ExportTiddlers/Caption": {
"title": "$:/language/Buttons/ExportTiddlers/Caption",
"text": "export tiddlers"
},
"$:/language/Buttons/ExportTiddlers/Hint": {
"title": "$:/language/Buttons/ExportTiddlers/Hint",
"text": "Export tiddlers"
},
"$:/language/Buttons/SidebarSearch/Hint": {
"title": "$:/language/Buttons/SidebarSearch/Hint",
"text": "Select the sidebar search field"
},
"$:/language/Buttons/Fold/Caption": {
"title": "$:/language/Buttons/Fold/Caption",
"text": "fold tiddler"
},
"$:/language/Buttons/Fold/Hint": {
"title": "$:/language/Buttons/Fold/Hint",
"text": "Fold the body of this tiddler"
},
"$:/language/Buttons/Fold/FoldBar/Caption": {
"title": "$:/language/Buttons/Fold/FoldBar/Caption",
"text": "fold-bar"
},
"$:/language/Buttons/Fold/FoldBar/Hint": {
"title": "$:/language/Buttons/Fold/FoldBar/Hint",
"text": "Optional bars to fold and unfold tiddlers"
},
"$:/language/Buttons/Unfold/Caption": {
"title": "$:/language/Buttons/Unfold/Caption",
"text": "unfold tiddler"
},
"$:/language/Buttons/Unfold/Hint": {
"title": "$:/language/Buttons/Unfold/Hint",
"text": "Unfold the body of this tiddler"
},
"$:/language/Buttons/FoldOthers/Caption": {
"title": "$:/language/Buttons/FoldOthers/Caption",
"text": "fold other tiddlers"
},
"$:/language/Buttons/FoldOthers/Hint": {
"title": "$:/language/Buttons/FoldOthers/Hint",
"text": "Fold the bodies of other opened tiddlers"
},
"$:/language/Buttons/FoldAll/Caption": {
"title": "$:/language/Buttons/FoldAll/Caption",
"text": "fold all tiddlers"
},
"$:/language/Buttons/FoldAll/Hint": {
"title": "$:/language/Buttons/FoldAll/Hint",
"text": "Fold the bodies of all opened tiddlers"
},
"$:/language/Buttons/UnfoldAll/Caption": {
"title": "$:/language/Buttons/UnfoldAll/Caption",
"text": "unfold all tiddlers"
},
"$:/language/Buttons/UnfoldAll/Hint": {
"title": "$:/language/Buttons/UnfoldAll/Hint",
"text": "Unfold the bodies of all opened tiddlers"
},
"$:/language/Buttons/FullScreen/Caption": {
"title": "$:/language/Buttons/FullScreen/Caption",
"text": "full-screen"
},
"$:/language/Buttons/FullScreen/Hint": {
"title": "$:/language/Buttons/FullScreen/Hint",
"text": "Enter or leave full-screen mode"
},
"$:/language/Buttons/Help/Caption": {
"title": "$:/language/Buttons/Help/Caption",
"text": "help"
},
"$:/language/Buttons/Help/Hint": {
"title": "$:/language/Buttons/Help/Hint",
"text": "Show help panel"
},
"$:/language/Buttons/Import/Caption": {
"title": "$:/language/Buttons/Import/Caption",
"text": "import"
},
"$:/language/Buttons/Import/Hint": {
"title": "$:/language/Buttons/Import/Hint",
"text": "Import many types of file including text, image, TiddlyWiki or JSON"
},
"$:/language/Buttons/Info/Caption": {
"title": "$:/language/Buttons/Info/Caption",
"text": "info"
},
"$:/language/Buttons/Info/Hint": {
"title": "$:/language/Buttons/Info/Hint",
"text": "Show information for this tiddler"
},
"$:/language/Buttons/Home/Caption": {
"title": "$:/language/Buttons/Home/Caption",
"text": "home"
},
"$:/language/Buttons/Home/Hint": {
"title": "$:/language/Buttons/Home/Hint",
"text": "Open the default tiddlers"
},
"$:/language/Buttons/Language/Caption": {
"title": "$:/language/Buttons/Language/Caption",
"text": "language"
},
"$:/language/Buttons/Language/Hint": {
"title": "$:/language/Buttons/Language/Hint",
"text": "Choose the user interface language"
},
"$:/language/Buttons/Manager/Caption": {
"title": "$:/language/Buttons/Manager/Caption",
"text": "tiddler manager"
},
"$:/language/Buttons/Manager/Hint": {
"title": "$:/language/Buttons/Manager/Hint",
"text": "Open tiddler manager"
},
"$:/language/Buttons/More/Caption": {
"title": "$:/language/Buttons/More/Caption",
"text": "more"
},
"$:/language/Buttons/More/Hint": {
"title": "$:/language/Buttons/More/Hint",
"text": "More actions"
},
"$:/language/Buttons/NewHere/Caption": {
"title": "$:/language/Buttons/NewHere/Caption",
"text": "new here"
},
"$:/language/Buttons/NewHere/Hint": {
"title": "$:/language/Buttons/NewHere/Hint",
"text": "Create a new tiddler tagged with this one"
},
"$:/language/Buttons/NewJournal/Caption": {
"title": "$:/language/Buttons/NewJournal/Caption",
"text": "new journal"
},
"$:/language/Buttons/NewJournal/Hint": {
"title": "$:/language/Buttons/NewJournal/Hint",
"text": "Create a new journal tiddler"
},
"$:/language/Buttons/NewJournalHere/Caption": {
"title": "$:/language/Buttons/NewJournalHere/Caption",
"text": "new journal here"
},
"$:/language/Buttons/NewJournalHere/Hint": {
"title": "$:/language/Buttons/NewJournalHere/Hint",
"text": "Create a new journal tiddler tagged with this one"
},
"$:/language/Buttons/NewImage/Caption": {
"title": "$:/language/Buttons/NewImage/Caption",
"text": "new image"
},
"$:/language/Buttons/NewImage/Hint": {
"title": "$:/language/Buttons/NewImage/Hint",
"text": "Create a new image tiddler"
},
"$:/language/Buttons/NewMarkdown/Caption": {
"title": "$:/language/Buttons/NewMarkdown/Caption",
"text": "new Markdown tiddler"
},
"$:/language/Buttons/NewMarkdown/Hint": {
"title": "$:/language/Buttons/NewMarkdown/Hint",
"text": "Create a new Markdown tiddler"
},
"$:/language/Buttons/NewTiddler/Caption": {
"title": "$:/language/Buttons/NewTiddler/Caption",
"text": "new tiddler"
},
"$:/language/Buttons/NewTiddler/Hint": {
"title": "$:/language/Buttons/NewTiddler/Hint",
"text": "Create a new tiddler"
},
"$:/language/Buttons/OpenWindow/Caption": {
"title": "$:/language/Buttons/OpenWindow/Caption",
"text": "open in new window"
},
"$:/language/Buttons/OpenWindow/Hint": {
"title": "$:/language/Buttons/OpenWindow/Hint",
"text": "Open tiddler in new window"
},
"$:/language/Buttons/Palette/Caption": {
"title": "$:/language/Buttons/Palette/Caption",
"text": "palette"
},
"$:/language/Buttons/Palette/Hint": {
"title": "$:/language/Buttons/Palette/Hint",
"text": "Choose the colour palette"
},
"$:/language/Buttons/Permalink/Caption": {
"title": "$:/language/Buttons/Permalink/Caption",
"text": "permalink"
},
"$:/language/Buttons/Permalink/Hint": {
"title": "$:/language/Buttons/Permalink/Hint",
"text": "Set browser address bar to a direct link to this tiddler"
},
"$:/language/Buttons/Permaview/Caption": {
"title": "$:/language/Buttons/Permaview/Caption",
"text": "permaview"
},
"$:/language/Buttons/Permaview/Hint": {
"title": "$:/language/Buttons/Permaview/Hint",
"text": "Set browser address bar to a direct link to all the tiddlers in this story"
},
"$:/language/Buttons/Print/Caption": {
"title": "$:/language/Buttons/Print/Caption",
"text": "print page"
},
"$:/language/Buttons/Print/Hint": {
"title": "$:/language/Buttons/Print/Hint",
"text": "Print the current page"
},
"$:/language/Buttons/Refresh/Caption": {
"title": "$:/language/Buttons/Refresh/Caption",
"text": "refresh"
},
"$:/language/Buttons/Refresh/Hint": {
"title": "$:/language/Buttons/Refresh/Hint",
"text": "Perform a full refresh of the wiki"
},
"$:/language/Buttons/Save/Caption": {
"title": "$:/language/Buttons/Save/Caption",
"text": "ok"
},
"$:/language/Buttons/Save/Hint": {
"title": "$:/language/Buttons/Save/Hint",
"text": "Confirm changes to this tiddler"
},
"$:/language/Buttons/SaveWiki/Caption": {
"title": "$:/language/Buttons/SaveWiki/Caption",
"text": "save changes"
},
"$:/language/Buttons/SaveWiki/Hint": {
"title": "$:/language/Buttons/SaveWiki/Hint",
"text": "Save changes"
},
"$:/language/Buttons/StoryView/Caption": {
"title": "$:/language/Buttons/StoryView/Caption",
"text": "storyview"
},
"$:/language/Buttons/StoryView/Hint": {
"title": "$:/language/Buttons/StoryView/Hint",
"text": "Choose the story visualisation"
},
"$:/language/Buttons/HideSideBar/Caption": {
"title": "$:/language/Buttons/HideSideBar/Caption",
"text": "hide sidebar"
},
"$:/language/Buttons/HideSideBar/Hint": {
"title": "$:/language/Buttons/HideSideBar/Hint",
"text": "Hide sidebar"
},
"$:/language/Buttons/ShowSideBar/Caption": {
"title": "$:/language/Buttons/ShowSideBar/Caption",
"text": "show sidebar"
},
"$:/language/Buttons/ShowSideBar/Hint": {
"title": "$:/language/Buttons/ShowSideBar/Hint",
"text": "Show sidebar"
},
"$:/language/Buttons/TagManager/Caption": {
"title": "$:/language/Buttons/TagManager/Caption",
"text": "tag manager"
},
"$:/language/Buttons/TagManager/Hint": {
"title": "$:/language/Buttons/TagManager/Hint",
"text": "Open tag manager"
},
"$:/language/Buttons/Timestamp/Caption": {
"title": "$:/language/Buttons/Timestamp/Caption",
"text": "timestamps"
},
"$:/language/Buttons/Timestamp/Hint": {
"title": "$:/language/Buttons/Timestamp/Hint",
"text": "Choose whether modifications update timestamps"
},
"$:/language/Buttons/Timestamp/On/Caption": {
"title": "$:/language/Buttons/Timestamp/On/Caption",
"text": "timestamps are on"
},
"$:/language/Buttons/Timestamp/On/Hint": {
"title": "$:/language/Buttons/Timestamp/On/Hint",
"text": "Update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Timestamp/Off/Caption": {
"title": "$:/language/Buttons/Timestamp/Off/Caption",
"text": "timestamps are off"
},
"$:/language/Buttons/Timestamp/Off/Hint": {
"title": "$:/language/Buttons/Timestamp/Off/Hint",
"text": "Don't update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Theme/Caption": {
"title": "$:/language/Buttons/Theme/Caption",
"text": "theme"
},
"$:/language/Buttons/Theme/Hint": {
"title": "$:/language/Buttons/Theme/Hint",
"text": "Choose the display theme"
},
"$:/language/Buttons/Bold/Caption": {
"title": "$:/language/Buttons/Bold/Caption",
"text": "bold"
},
"$:/language/Buttons/Bold/Hint": {
"title": "$:/language/Buttons/Bold/Hint",
"text": "Apply bold formatting to selection"
},
"$:/language/Buttons/Clear/Caption": {
"title": "$:/language/Buttons/Clear/Caption",
"text": "clear"
},
"$:/language/Buttons/Clear/Hint": {
"title": "$:/language/Buttons/Clear/Hint",
"text": "Clear image to solid colour"
},
"$:/language/Buttons/EditorHeight/Caption": {
"title": "$:/language/Buttons/EditorHeight/Caption",
"text": "editor height"
},
"$:/language/Buttons/EditorHeight/Caption/Auto": {
"title": "$:/language/Buttons/EditorHeight/Caption/Auto",
"text": "Automatically adjust height to fit content"
},
"$:/language/Buttons/EditorHeight/Caption/Fixed": {
"title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
"text": "Fixed height:"
},
"$:/language/Buttons/EditorHeight/Hint": {
"title": "$:/language/Buttons/EditorHeight/Hint",
"text": "Choose the height of the text editor"
},
"$:/language/Buttons/Excise/Caption": {
"title": "$:/language/Buttons/Excise/Caption",
"text": "excise"
},
"$:/language/Buttons/Excise/Caption/Excise": {
"title": "$:/language/Buttons/Excise/Caption/Excise",
"text": "Perform excision"
},
"$:/language/Buttons/Excise/Caption/MacroName": {
"title": "$:/language/Buttons/Excise/Caption/MacroName",
"text": "Macro name:"
},
"$:/language/Buttons/Excise/Caption/NewTitle": {
"title": "$:/language/Buttons/Excise/Caption/NewTitle",
"text": "Title of new tiddler:"
},
"$:/language/Buttons/Excise/Caption/Replace": {
"title": "$:/language/Buttons/Excise/Caption/Replace",
"text": "Replace excised text with:"
},
"$:/language/Buttons/Excise/Caption/Replace/Macro": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
"text": "macro"
},
"$:/language/Buttons/Excise/Caption/Replace/Link": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Link",
"text": "link"
},
"$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
"text": "transclusion"
},
"$:/language/Buttons/Excise/Caption/Tag": {
"title": "$:/language/Buttons/Excise/Caption/Tag",
"text": "Tag new tiddler with the title of this tiddler"
},
"$:/language/Buttons/Excise/Caption/TiddlerExists": {
"title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
"text": "Warning: tiddler already exists"
},
"$:/language/Buttons/Excise/Hint": {
"title": "$:/language/Buttons/Excise/Hint",
"text": "Excise the selected text into a new tiddler"
},
"$:/language/Buttons/Heading1/Caption": {
"title": "$:/language/Buttons/Heading1/Caption",
"text": "heading 1"
},
"$:/language/Buttons/Heading1/Hint": {
"title": "$:/language/Buttons/Heading1/Hint",
"text": "Apply heading level 1 formatting to lines containing selection"
},
"$:/language/Buttons/Heading2/Caption": {
"title": "$:/language/Buttons/Heading2/Caption",
"text": "heading 2"
},
"$:/language/Buttons/Heading2/Hint": {
"title": "$:/language/Buttons/Heading2/Hint",
"text": "Apply heading level 2 formatting to lines containing selection"
},
"$:/language/Buttons/Heading3/Caption": {
"title": "$:/language/Buttons/Heading3/Caption",
"text": "heading 3"
},
"$:/language/Buttons/Heading3/Hint": {
"title": "$:/language/Buttons/Heading3/Hint",
"text": "Apply heading level 3 formatting to lines containing selection"
},
"$:/language/Buttons/Heading4/Caption": {
"title": "$:/language/Buttons/Heading4/Caption",
"text": "heading 4"
},
"$:/language/Buttons/Heading4/Hint": {
"title": "$:/language/Buttons/Heading4/Hint",
"text": "Apply heading level 4 formatting to lines containing selection"
},
"$:/language/Buttons/Heading5/Caption": {
"title": "$:/language/Buttons/Heading5/Caption",
"text": "heading 5"
},
"$:/language/Buttons/Heading5/Hint": {
"title": "$:/language/Buttons/Heading5/Hint",
"text": "Apply heading level 5 formatting to lines containing selection"
},
"$:/language/Buttons/Heading6/Caption": {
"title": "$:/language/Buttons/Heading6/Caption",
"text": "heading 6"
},
"$:/language/Buttons/Heading6/Hint": {
"title": "$:/language/Buttons/Heading6/Hint",
"text": "Apply heading level 6 formatting to lines containing selection"
},
"$:/language/Buttons/Italic/Caption": {
"title": "$:/language/Buttons/Italic/Caption",
"text": "italic"
},
"$:/language/Buttons/Italic/Hint": {
"title": "$:/language/Buttons/Italic/Hint",
"text": "Apply italic formatting to selection"
},
"$:/language/Buttons/LineWidth/Caption": {
"title": "$:/language/Buttons/LineWidth/Caption",
"text": "line width"
},
"$:/language/Buttons/LineWidth/Hint": {
"title": "$:/language/Buttons/LineWidth/Hint",
"text": "Set line width for painting"
},
"$:/language/Buttons/Link/Caption": {
"title": "$:/language/Buttons/Link/Caption",
"text": "link"
},
"$:/language/Buttons/Link/Hint": {
"title": "$:/language/Buttons/Link/Hint",
"text": "Create wikitext link"
},
"$:/language/Buttons/Linkify/Caption": {
"title": "$:/language/Buttons/Linkify/Caption",
"text": "wikilink"
},
"$:/language/Buttons/Linkify/Hint": {
"title": "$:/language/Buttons/Linkify/Hint",
"text": "Wrap selection in square brackets"
},
"$:/language/Buttons/ListBullet/Caption": {
"title": "$:/language/Buttons/ListBullet/Caption",
"text": "bulleted list"
},
"$:/language/Buttons/ListBullet/Hint": {
"title": "$:/language/Buttons/ListBullet/Hint",
"text": "Apply bulleted list formatting to lines containing selection"
},
"$:/language/Buttons/ListNumber/Caption": {
"title": "$:/language/Buttons/ListNumber/Caption",
"text": "numbered list"
},
"$:/language/Buttons/ListNumber/Hint": {
"title": "$:/language/Buttons/ListNumber/Hint",
"text": "Apply numbered list formatting to lines containing selection"
},
"$:/language/Buttons/MonoBlock/Caption": {
"title": "$:/language/Buttons/MonoBlock/Caption",
"text": "monospaced block"
},
"$:/language/Buttons/MonoBlock/Hint": {
"title": "$:/language/Buttons/MonoBlock/Hint",
"text": "Apply monospaced block formatting to lines containing selection"
},
"$:/language/Buttons/MonoLine/Caption": {
"title": "$:/language/Buttons/MonoLine/Caption",
"text": "monospaced"
},
"$:/language/Buttons/MonoLine/Hint": {
"title": "$:/language/Buttons/MonoLine/Hint",
"text": "Apply monospaced character formatting to selection"
},
"$:/language/Buttons/Opacity/Caption": {
"title": "$:/language/Buttons/Opacity/Caption",
"text": "opacity"
},
"$:/language/Buttons/Opacity/Hint": {
"title": "$:/language/Buttons/Opacity/Hint",
"text": "Set painting opacity"
},
"$:/language/Buttons/Paint/Caption": {
"title": "$:/language/Buttons/Paint/Caption",
"text": "paint colour"
},
"$:/language/Buttons/Paint/Hint": {
"title": "$:/language/Buttons/Paint/Hint",
"text": "Set painting colour"
},
"$:/language/Buttons/Picture/Caption": {
"title": "$:/language/Buttons/Picture/Caption",
"text": "picture"
},
"$:/language/Buttons/Picture/Hint": {
"title": "$:/language/Buttons/Picture/Hint",
"text": "Insert picture"
},
"$:/language/Buttons/Preview/Caption": {
"title": "$:/language/Buttons/Preview/Caption",
"text": "preview"
},
"$:/language/Buttons/Preview/Hint": {
"title": "$:/language/Buttons/Preview/Hint",
"text": "Show preview pane"
},
"$:/language/Buttons/PreviewType/Caption": {
"title": "$:/language/Buttons/PreviewType/Caption",
"text": "preview type"
},
"$:/language/Buttons/PreviewType/Hint": {
"title": "$:/language/Buttons/PreviewType/Hint",
"text": "Choose preview type"
},
"$:/language/Buttons/Quote/Caption": {
"title": "$:/language/Buttons/Quote/Caption",
"text": "quote"
},
"$:/language/Buttons/Quote/Hint": {
"title": "$:/language/Buttons/Quote/Hint",
"text": "Apply quoted text formatting to lines containing selection"
},
"$:/language/Buttons/RotateLeft/Caption": {
"title": "$:/language/Buttons/RotateLeft/Caption",
"text": "rotate left"
},
"$:/language/Buttons/RotateLeft/Hint": {
"title": "$:/language/Buttons/RotateLeft/Hint",
"text": "Rotate image left by 90 degrees"
},
"$:/language/Buttons/Size/Caption": {
"title": "$:/language/Buttons/Size/Caption",
"text": "image size"
},
"$:/language/Buttons/Size/Caption/Height": {
"title": "$:/language/Buttons/Size/Caption/Height",
"text": "Height:"
},
"$:/language/Buttons/Size/Caption/Resize": {
"title": "$:/language/Buttons/Size/Caption/Resize",
"text": "Resize image"
},
"$:/language/Buttons/Size/Caption/Width": {
"title": "$:/language/Buttons/Size/Caption/Width",
"text": "Width:"
},
"$:/language/Buttons/Size/Hint": {
"title": "$:/language/Buttons/Size/Hint",
"text": "Set image size"
},
"$:/language/Buttons/Stamp/Caption": {
"title": "$:/language/Buttons/Stamp/Caption",
"text": "stamp"
},
"$:/language/Buttons/Stamp/Caption/New": {
"title": "$:/language/Buttons/Stamp/Caption/New",
"text": "Add your own"
},
"$:/language/Buttons/Stamp/Hint": {
"title": "$:/language/Buttons/Stamp/Hint",
"text": "Insert a preconfigured snippet of text"
},
"$:/language/Buttons/Stamp/New/Title": {
"title": "$:/language/Buttons/Stamp/New/Title",
"text": "Name as shown in menu"
},
"$:/language/Buttons/Stamp/New/Text": {
"title": "$:/language/Buttons/Stamp/New/Text",
"text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
},
"$:/language/Buttons/Strikethrough/Caption": {
"title": "$:/language/Buttons/Strikethrough/Caption",
"text": "strikethrough"
},
"$:/language/Buttons/Strikethrough/Hint": {
"title": "$:/language/Buttons/Strikethrough/Hint",
"text": "Apply strikethrough formatting to selection"
},
"$:/language/Buttons/Subscript/Caption": {
"title": "$:/language/Buttons/Subscript/Caption",
"text": "subscript"
},
"$:/language/Buttons/Subscript/Hint": {
"title": "$:/language/Buttons/Subscript/Hint",
"text": "Apply subscript formatting to selection"
},
"$:/language/Buttons/Superscript/Caption": {
"title": "$:/language/Buttons/Superscript/Caption",
"text": "superscript"
},
"$:/language/Buttons/Superscript/Hint": {
"title": "$:/language/Buttons/Superscript/Hint",
"text": "Apply superscript formatting to selection"
},
"$:/language/Buttons/ToggleSidebar/Hint": {
"title": "$:/language/Buttons/ToggleSidebar/Hint",
"text": "Toggle the sidebar visibility"
},
"$:/language/Buttons/Transcludify/Caption": {
"title": "$:/language/Buttons/Transcludify/Caption",
"text": "transclusion"
},
"$:/language/Buttons/Transcludify/Hint": {
"title": "$:/language/Buttons/Transcludify/Hint",
"text": "Wrap selection in curly brackets"
},
"$:/language/Buttons/Underline/Caption": {
"title": "$:/language/Buttons/Underline/Caption",
"text": "underline"
},
"$:/language/Buttons/Underline/Hint": {
"title": "$:/language/Buttons/Underline/Hint",
"text": "Apply underline formatting to selection"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "Advanced"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "Internal information about this TiddlyWiki"
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "Appearance"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "Ways to customise the appearance of your TiddlyWiki."
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "Animation duration"
},
"$:/language/ControlPanel/Basics/AutoFocus/Prompt": {
"title": "$:/language/ControlPanel/Basics/AutoFocus/Prompt",
"text": "Default focus field for new tiddlers"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "Basics"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "Default tiddlers"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "Choose which tiddlers are displayed at startup"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "Hello! Current language:"
},
"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
"text": "Title of new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
"text": "Text for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
"text": "Tags for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt",
"text": "Title of new tiddlers"
},
"$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt",
"text": "Tags for new tiddlers"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "Number of overridden shadow tiddlers"
},
"$:/language/ControlPanel/Basics/RemoveTags": {
"title": "$:/language/ControlPanel/Basics/RemoveTags",
"text": "Update to current format"
},
"$:/language/ControlPanel/Basics/RemoveTags/Hint": {
"title": "$:/language/ControlPanel/Basics/RemoveTags/Hint",
"text": "Update the tags configuration to the latest format"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "Number of shadow tiddlers"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "Subtitle"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "Number of system tiddlers"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "Number of tags"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "Number of tiddlers"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "Title of this ~TiddlyWiki"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "Username for signing edits"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "~TiddlyWiki version"
},
"$:/language/ControlPanel/EditorTypes/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Caption",
"text": "Editor Types"
},
"$:/language/ControlPanel/EditorTypes/Editor/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
"text": "Editor"
},
"$:/language/ControlPanel/EditorTypes/Hint": {
"title": "$:/language/ControlPanel/EditorTypes/Hint",
"text": "These tiddlers determine which editor is used to edit specific tiddler types."
},
"$:/language/ControlPanel/EditorTypes/Type/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
"text": "Type"
},
"$:/language/ControlPanel/Info/Caption": {
"title": "$:/language/ControlPanel/Info/Caption",
"text": "Info"
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"text": "Information about this TiddlyWiki"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
"text": "Type shortcut here"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
"text": "add shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
"text": "Keyboard Shortcuts"
},
"$:/language/ControlPanel/KeyboardShortcuts/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
"text": "Manage keyboard shortcut assignments"
},
"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
"text": "No keyboard shortcuts assigned"
},
"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
"text": "remove keyboard shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
"text": "All platforms"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
"text": "Macintosh platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
"text": "Non-Macintosh platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
"text": "Linux platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
"text": "Non-Linux platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
"text": "Windows platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
"text": "Non-Windows platforms only"
},
"$:/language/ControlPanel/LayoutSwitcher/Caption": {
"title": "$:/language/ControlPanel/LayoutSwitcher/Caption",
"text": "Layout"
},
"$:/language/ControlPanel/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/LoadedModules/Caption",
"text": "Loaded Modules"
},
"$:/language/ControlPanel/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/LoadedModules/Hint",
"text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
},
"$:/language/ControlPanel/Palette/Caption": {
"title": "$:/language/ControlPanel/Palette/Caption",
"text": "Palette"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
"text": "clone"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
"text": "It is recommended that you clone this shadow palette before editing it"
},
"$:/language/ControlPanel/Palette/Editor/Delete/Hint": {
"title": "$:/language/ControlPanel/Palette/Editor/Delete/Hint",
"text": "delete this entry from the current palette"
},
"$:/language/ControlPanel/Palette/Editor/Names/External/Show": {
"title": "$:/language/ControlPanel/Palette/Editor/Names/External/Show",
"text": "Show color names that are not part of the current palette"
},
"$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
"text": "This shadow palette has been modified"
},
"$:/language/ControlPanel/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt",
"text": "Editing"
},
"$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
"text": "reset"
},
"$:/language/ControlPanel/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
"text": "hide editor"
},
"$:/language/ControlPanel/Palette/Prompt": {
"title": "$:/language/ControlPanel/Palette/Prompt",
"text": "Current palette:"
},
"$:/language/ControlPanel/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
"text": "show editor"
},
"$:/language/ControlPanel/Parsing/Caption": {
"title": "$:/language/ControlPanel/Parsing/Caption",
"text": "Parsing"
},
"$:/language/ControlPanel/Parsing/Hint": {
"title": "$:/language/ControlPanel/Parsing/Hint",
"text": "Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text=\"TiddlyWiki\"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation."
},
"$:/language/ControlPanel/Parsing/Block/Caption": {
"title": "$:/language/ControlPanel/Parsing/Block/Caption",
"text": "Block Parse Rules"
},
"$:/language/ControlPanel/Parsing/Inline/Caption": {
"title": "$:/language/ControlPanel/Parsing/Inline/Caption",
"text": "Inline Parse Rules"
},
"$:/language/ControlPanel/Parsing/Pragma/Caption": {
"title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
"text": "Pragma Parse Rules"
},
"$:/language/ControlPanel/Plugins/Add/Caption": {
"title": "$:/language/ControlPanel/Plugins/Add/Caption",
"text": "Get more plugins"
},
"$:/language/ControlPanel/Plugins/Add/Hint": {
"title": "$:/language/ControlPanel/Plugins/Add/Hint",
"text": "Install plugins from the official library"
},
"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
"text": "This plugin is already installed at version <$text text=<<installedVersion>>/>"
},
"$:/language/ControlPanel/Plugins/AlsoRequires": {
"title": "$:/language/ControlPanel/Plugins/AlsoRequires",
"text": "Also requires:"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Disable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Disable/Caption",
"text": "disable"
},
"$:/language/ControlPanel/Plugins/Disable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Disable/Hint",
"text": "Disable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Disabled/Status": {
"title": "$:/language/ControlPanel/Plugins/Disabled/Status",
"text": "(disabled)"
},
"$:/language/ControlPanel/Plugins/Downgrade/Caption": {
"title": "$:/language/ControlPanel/Plugins/Downgrade/Caption",
"text": "downgrade"
},
"$:/language/ControlPanel/Plugins/Empty/Hint": {
"title": "$:/language/ControlPanel/Plugins/Empty/Hint",
"text": "None"
},
"$:/language/ControlPanel/Plugins/Enable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Enable/Caption",
"text": "enable"
},
"$:/language/ControlPanel/Plugins/Enable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Enable/Hint",
"text": "Enable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Install/Caption": {
"title": "$:/language/ControlPanel/Plugins/Install/Caption",
"text": "install"
},
"$:/language/ControlPanel/Plugins/Installed/Hint": {
"title": "$:/language/ControlPanel/Plugins/Installed/Hint",
"text": "Currently installed plugins:"
},
"$:/language/ControlPanel/Plugins/Languages/Caption": {
"title": "$:/language/ControlPanel/Plugins/Languages/Caption",
"text": "Languages"
},
"$:/language/ControlPanel/Plugins/Languages/Hint": {
"title": "$:/language/ControlPanel/Plugins/Languages/Hint",
"text": "Language pack plugins"
},
"$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
"text": "No ''\"<$text text=<<currentTab>>/>\"'' found"
},
"$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
"text": "This plugin is not currently installed"
},
"$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
"text": "open plugin library"
},
"$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
"text": "close plugin library"
},
"$:/language/ControlPanel/Plugins/PluginWillRequireReload": {
"title": "$:/language/ControlPanel/Plugins/PluginWillRequireReload",
"text": "(requires reload)"
},
"$:/language/ControlPanel/Plugins/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Plugins/Hint": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Reinstall/Caption": {
"title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
"text": "reinstall"
},
"$:/language/ControlPanel/Plugins/Themes/Caption": {
"title": "$:/language/ControlPanel/Plugins/Themes/Caption",
"text": "Themes"
},
"$:/language/ControlPanel/Plugins/Themes/Hint": {
"title": "$:/language/ControlPanel/Plugins/Themes/Hint",
"text": "Theme plugins"
},
"$:/language/ControlPanel/Plugins/Update/Caption": {
"title": "$:/language/ControlPanel/Plugins/Update/Caption",
"text": "update"
},
"$:/language/ControlPanel/Plugins/Updates/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/Caption",
"text": "Updates"
},
"$:/language/ControlPanel/Plugins/Updates/Hint": {
"title": "$:/language/ControlPanel/Plugins/Updates/Hint",
"text": "Available updates to installed plugins"
},
"$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption",
"text": "Update <<update-count>> plugins"
},
"$:/language/ControlPanel/Plugins/SubPluginPrompt": {
"title": "$:/language/ControlPanel/Plugins/SubPluginPrompt",
"text": "With <<count>> sub-plugins available"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "Saving"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
"text": "Permit automatic saving for the download saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
"text": "Enable Autosave for Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
"text": "Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
"text": "These settings apply to the HTML5-compatible download saver"
},
"$:/language/ControlPanel/Saving/General/Caption": {
"title": "$:/language/ControlPanel/Saving/General/Caption",
"text": "General"
},
"$:/language/ControlPanel/Saving/General/Hint": {
"title": "$:/language/ControlPanel/Saving/General/Hint",
"text": "These settings apply to all the loaded savers"
},
"$:/language/ControlPanel/Saving/Hint": {
"title": "$:/language/ControlPanel/Saving/Hint",
"text": "Settings used for saving the entire TiddlyWiki as a single file via a saver module"
},
"$:/language/ControlPanel/Saving/GitService/Branch": {
"title": "$:/language/ControlPanel/Saving/GitService/Branch",
"text": "Target branch for saving"
},
"$:/language/ControlPanel/Saving/GitService/CommitMessage": {
"title": "$:/language/ControlPanel/Saving/GitService/CommitMessage",
"text": "Saved by TiddlyWiki"
},
"$:/language/ControlPanel/Saving/GitService/Description": {
"title": "$:/language/ControlPanel/Saving/GitService/Description",
"text": "These settings are only used when saving to <<service-name>>"
},
"$:/language/ControlPanel/Saving/GitService/Filename": {
"title": "$:/language/ControlPanel/Saving/GitService/Filename",
"text": "Filename of target file (e.g. `index.html`)"
},
"$:/language/ControlPanel/Saving/GitService/Path": {
"title": "$:/language/ControlPanel/Saving/GitService/Path",
"text": "Path to target file (e.g. `/wiki/`)"
},
"$:/language/ControlPanel/Saving/GitService/Repo": {
"title": "$:/language/ControlPanel/Saving/GitService/Repo",
"text": "Target repository (e.g. `Jermolene/TiddlyWiki5`)"
},
"$:/language/ControlPanel/Saving/GitService/ServerURL": {
"title": "$:/language/ControlPanel/Saving/GitService/ServerURL",
"text": "Server API URL"
},
"$:/language/ControlPanel/Saving/GitService/UserName": {
"title": "$:/language/ControlPanel/Saving/GitService/UserName",
"text": "Username"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Caption",
"text": "~GitHub Saver"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Password",
"text": "Password, OAUTH token, or personal access token (see [[GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]] for details)"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Caption",
"text": "~GitLab Saver"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Password",
"text": "Personal access token for API (see [[GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]] for details)"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Caption",
"text": "Gitea Saver"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Password",
"text": "Personal access token for API (via Gitea’s web interface: `Settings | Applications | Generate New Token`)"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "Advanced Settings"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "Backup Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel",
"text": "~TiddlySpot Control Panel"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "Backups"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
"text": "~TiddlySpot Saver"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Description": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
"text": "These settings are only used when saving to [[TiddlySpot|http://tiddlyspot.com]], [[TiddlyHost|https://tiddlyhost.com]], or a compatible remote server. See [[here|https://github.com/simonbaird/tiddlyhost/wiki/TiddlySpot-Saver-configuration-for-Tiddlyhost-and-Tiddlyspot]] for information on ~TiddlySpot and ~TiddlyHost saving configuration."
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "Upload Filename"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
"text": "~TiddlySpot"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "Password"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly",
"text": "Note that [[TiddlySpot|http://tiddlyspot.com]] no longer allows the creation of new sites. For new sites, you can use [[TiddlyHost|https://tiddlyhost.com]], a new hosting service that replaces ~TiddlySpot."
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "Server URL"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "Upload Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "Wiki Name"
},
"$:/language/ControlPanel/Settings/AutoSave/Caption": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
"text": "Autosave"
},
"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
"text": "Do not save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
"text": "Save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
"text": "Attempt to automatically save changes during editing when using a supporting saver"
},
"$:/language/ControlPanel/Settings/CamelCase/Caption": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
"text": "Camel Case Wiki Links"
},
"$:/language/ControlPanel/Settings/CamelCase/Hint": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
"text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/CamelCase/Description": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Description",
"text": "Enable automatic ~CamelCase linking"
},
"$:/language/ControlPanel/Settings/Caption": {
"title": "$:/language/ControlPanel/Settings/Caption",
"text": "Settings"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
"text": "Enable or disable the editor toolbar:"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Description": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
"text": "Show editor toolbar"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
"text": "Tiddler Info Panel Mode"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
"text": "Control when the tiddler info panel closes:"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
"text": "Tiddler info panel closes automatically"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
"text": "Tiddler info panel stays open until explicitly closed"
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"text": "These settings let you customise the behaviour of TiddlyWiki."
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
"text": "Navigation Address Bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
"text": "Behaviour of the browser address bar when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
"text": "Do not update the address bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
"text": "Include the target tiddler"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
"text": "Include the target tiddler and the current story sequence"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
"text": "Navigation History"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
"text": "Update browser history when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
"text": "Do not update history"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
"text": "Update history"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption",
"text": "Permalink/permaview Mode"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint",
"text": "Choose how permalink/permaview is handled:"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description",
"text": "Copy permalink/permaview URL to clipboard"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description",
"text": "Update address bar with permalink/permaview URL"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
"text": "Performance Instrumentation"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
"text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
"text": "Enable performance instrumentation"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
"text": "Toolbar Button Style"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
"text": "Choose the style for toolbar buttons:"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
"text": "Borderless"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
"text": "Boxed"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
"text": "Rounded"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
"text": "Toolbar Buttons"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
"text": "Default toolbar button appearance:"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
"text": "Include icon"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
"text": "Include text"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
"text": "Default Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
"text": "Specify which sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption",
"text": "Default More Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint",
"text": "Specify which More sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
"text": "Tiddler Opening Behaviour"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
"text": "Navigation from //within// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
"text": "Navigation from //outside// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
"text": "Open above the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
"text": "Open below the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
"text": "Open at the top of the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
"text": "Open at the bottom of the story river"
},
"$:/language/ControlPanel/Settings/TitleLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
"text": "Tiddler Titles"
},
"$:/language/ControlPanel/Settings/TitleLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
"text": "Optionally display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
"text": "Do not display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
"text": "Display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
"text": "Wiki Links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
"text": "Choose whether to link to tiddlers that do not exist yet"
},
"$:/language/ControlPanel/Settings/MissingLinks/Description": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
"text": "Enable links to missing tiddlers"
},
"$:/language/ControlPanel/StoryView/Caption": {
"title": "$:/language/ControlPanel/StoryView/Caption",
"text": "Story View"
},
"$:/language/ControlPanel/StoryView/Prompt": {
"title": "$:/language/ControlPanel/StoryView/Prompt",
"text": "Current view:"
},
"$:/language/ControlPanel/Stylesheets/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Caption",
"text": "Stylesheets"
},
"$:/language/ControlPanel/Stylesheets/Expand/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Expand/Caption",
"text": "Expand All"
},
"$:/language/ControlPanel/Stylesheets/Hint": {
"title": "$:/language/ControlPanel/Stylesheets/Hint",
"text": "This is the rendered CSS of the current stylesheet tiddlers tagged with <<tag \"$:/tags/Stylesheet\">>"
},
"$:/language/ControlPanel/Stylesheets/Restore/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Restore/Caption",
"text": "Restore"
},
"$:/language/ControlPanel/Theme/Caption": {
"title": "$:/language/ControlPanel/Theme/Caption",
"text": "Theme"
},
"$:/language/ControlPanel/Theme/Prompt": {
"title": "$:/language/ControlPanel/Theme/Prompt",
"text": "Current theme:"
},
"$:/language/ControlPanel/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/TiddlerFields/Caption",
"text": "Tiddler Fields"
},
"$:/language/ControlPanel/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/TiddlerFields/Hint",
"text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
},
"$:/language/ControlPanel/Toolbars/Caption": {
"title": "$:/language/ControlPanel/Toolbars/Caption",
"text": "Toolbars"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
"text": "Edit Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/Hint": {
"title": "$:/language/ControlPanel/Toolbars/Hint",
"text": "Select which toolbar buttons are displayed"
},
"$:/language/ControlPanel/Toolbars/PageControls/Caption": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
"text": "Page Toolbar"
},
"$:/language/ControlPanel/Toolbars/PageControls/Hint": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
"text": "Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
"text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
"text": "View Toolbar"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "Download full wiki"
},
"$:/language/Date/DaySuffix/1": {
"title": "$:/language/Date/DaySuffix/1",
"text": "st"
},
"$:/language/Date/DaySuffix/2": {
"title": "$:/language/Date/DaySuffix/2",
"text": "nd"
},
"$:/language/Date/DaySuffix/3": {
"title": "$:/language/Date/DaySuffix/3",
"text": "rd"
},
"$:/language/Date/DaySuffix/4": {
"title": "$:/language/Date/DaySuffix/4",
"text": "th"
},
"$:/language/Date/DaySuffix/5": {
"title": "$:/language/Date/DaySuffix/5",
"text": "th"
},
"$:/language/Date/DaySuffix/6": {
"title": "$:/language/Date/DaySuffix/6",
"text": "th"
},
"$:/language/Date/DaySuffix/7": {
"title": "$:/language/Date/DaySuffix/7",
"text": "th"
},
"$:/language/Date/DaySuffix/8": {
"title": "$:/language/Date/DaySuffix/8",
"text": "th"
},
"$:/language/Date/DaySuffix/9": {
"title": "$:/language/Date/DaySuffix/9",
"text": "th"
},
"$:/language/Date/DaySuffix/10": {
"title": "$:/language/Date/DaySuffix/10",
"text": "th"
},
"$:/language/Date/DaySuffix/11": {
"title": "$:/language/Date/DaySuffix/11",
"text": "th"
},
"$:/language/Date/DaySuffix/12": {
"title": "$:/language/Date/DaySuffix/12",
"text": "th"
},
"$:/language/Date/DaySuffix/13": {
"title": "$:/language/Date/DaySuffix/13",
"text": "th"
},
"$:/language/Date/DaySuffix/14": {
"title": "$:/language/Date/DaySuffix/14",
"text": "th"
},
"$:/language/Date/DaySuffix/15": {
"title": "$:/language/Date/DaySuffix/15",
"text": "th"
},
"$:/language/Date/DaySuffix/16": {
"title": "$:/language/Date/DaySuffix/16",
"text": "th"
},
"$:/language/Date/DaySuffix/17": {
"title": "$:/language/Date/DaySuffix/17",
"text": "th"
},
"$:/language/Date/DaySuffix/18": {
"title": "$:/language/Date/DaySuffix/18",
"text": "th"
},
"$:/language/Date/DaySuffix/19": {
"title": "$:/language/Date/DaySuffix/19",
"text": "th"
},
"$:/language/Date/DaySuffix/20": {
"title": "$:/language/Date/DaySuffix/20",
"text": "th"
},
"$:/language/Date/DaySuffix/21": {
"title": "$:/language/Date/DaySuffix/21",
"text": "st"
},
"$:/language/Date/DaySuffix/22": {
"title": "$:/language/Date/DaySuffix/22",
"text": "nd"
},
"$:/language/Date/DaySuffix/23": {
"title": "$:/language/Date/DaySuffix/23",
"text": "rd"
},
"$:/language/Date/DaySuffix/24": {
"title": "$:/language/Date/DaySuffix/24",
"text": "th"
},
"$:/language/Date/DaySuffix/25": {
"title": "$:/language/Date/DaySuffix/25",
"text": "th"
},
"$:/language/Date/DaySuffix/26": {
"title": "$:/language/Date/DaySuffix/26",
"text": "th"
},
"$:/language/Date/DaySuffix/27": {
"title": "$:/language/Date/DaySuffix/27",
"text": "th"
},
"$:/language/Date/DaySuffix/28": {
"title": "$:/language/Date/DaySuffix/28",
"text": "th"
},
"$:/language/Date/DaySuffix/29": {
"title": "$:/language/Date/DaySuffix/29",
"text": "th"
},
"$:/language/Date/DaySuffix/30": {
"title": "$:/language/Date/DaySuffix/30",
"text": "th"
},
"$:/language/Date/DaySuffix/31": {
"title": "$:/language/Date/DaySuffix/31",
"text": "st"
},
"$:/language/Date/Long/Day/0": {
"title": "$:/language/Date/Long/Day/0",
"text": "Sunday"
},
"$:/language/Date/Long/Day/1": {
"title": "$:/language/Date/Long/Day/1",
"text": "Monday"
},
"$:/language/Date/Long/Day/2": {
"title": "$:/language/Date/Long/Day/2",
"text": "Tuesday"
},
"$:/language/Date/Long/Day/3": {
"title": "$:/language/Date/Long/Day/3",
"text": "Wednesday"
},
"$:/language/Date/Long/Day/4": {
"title": "$:/language/Date/Long/Day/4",
"text": "Thursday"
},
"$:/language/Date/Long/Day/5": {
"title": "$:/language/Date/Long/Day/5",
"text": "Friday"
},
"$:/language/Date/Long/Day/6": {
"title": "$:/language/Date/Long/Day/6",
"text": "Saturday"
},
"$:/language/Date/Long/Month/1": {
"title": "$:/language/Date/Long/Month/1",
"text": "January"
},
"$:/language/Date/Long/Month/2": {
"title": "$:/language/Date/Long/Month/2",
"text": "February"
},
"$:/language/Date/Long/Month/3": {
"title": "$:/language/Date/Long/Month/3",
"text": "March"
},
"$:/language/Date/Long/Month/4": {
"title": "$:/language/Date/Long/Month/4",
"text": "April"
},
"$:/language/Date/Long/Month/5": {
"title": "$:/language/Date/Long/Month/5",
"text": "May"
},
"$:/language/Date/Long/Month/6": {
"title": "$:/language/Date/Long/Month/6",
"text": "June"
},
"$:/language/Date/Long/Month/7": {
"title": "$:/language/Date/Long/Month/7",
"text": "July"
},
"$:/language/Date/Long/Month/8": {
"title": "$:/language/Date/Long/Month/8",
"text": "August"
},
"$:/language/Date/Long/Month/9": {
"title": "$:/language/Date/Long/Month/9",
"text": "September"
},
"$:/language/Date/Long/Month/10": {
"title": "$:/language/Date/Long/Month/10",
"text": "October"
},
"$:/language/Date/Long/Month/11": {
"title": "$:/language/Date/Long/Month/11",
"text": "November"
},
"$:/language/Date/Long/Month/12": {
"title": "$:/language/Date/Long/Month/12",
"text": "December"
},
"$:/language/Date/Period/am": {
"title": "$:/language/Date/Period/am",
"text": "am"
},
"$:/language/Date/Period/pm": {
"title": "$:/language/Date/Period/pm",
"text": "pm"
},
"$:/language/Date/Short/Day/0": {
"title": "$:/language/Date/Short/Day/0",
"text": "Sun"
},
"$:/language/Date/Short/Day/1": {
"title": "$:/language/Date/Short/Day/1",
"text": "Mon"
},
"$:/language/Date/Short/Day/2": {
"title": "$:/language/Date/Short/Day/2",
"text": "Tue"
},
"$:/language/Date/Short/Day/3": {
"title": "$:/language/Date/Short/Day/3",
"text": "Wed"
},
"$:/language/Date/Short/Day/4": {
"title": "$:/language/Date/Short/Day/4",
"text": "Thu"
},
"$:/language/Date/Short/Day/5": {
"title": "$:/language/Date/Short/Day/5",
"text": "Fri"
},
"$:/language/Date/Short/Day/6": {
"title": "$:/language/Date/Short/Day/6",
"text": "Sat"
},
"$:/language/Date/Short/Month/1": {
"title": "$:/language/Date/Short/Month/1",
"text": "Jan"
},
"$:/language/Date/Short/Month/2": {
"title": "$:/language/Date/Short/Month/2",
"text": "Feb"
},
"$:/language/Date/Short/Month/3": {
"title": "$:/language/Date/Short/Month/3",
"text": "Mar"
},
"$:/language/Date/Short/Month/4": {
"title": "$:/language/Date/Short/Month/4",
"text": "Apr"
},
"$:/language/Date/Short/Month/5": {
"title": "$:/language/Date/Short/Month/5",
"text": "May"
},
"$:/language/Date/Short/Month/6": {
"title": "$:/language/Date/Short/Month/6",
"text": "Jun"
},
"$:/language/Date/Short/Month/7": {
"title": "$:/language/Date/Short/Month/7",
"text": "Jul"
},
"$:/language/Date/Short/Month/8": {
"title": "$:/language/Date/Short/Month/8",
"text": "Aug"
},
"$:/language/Date/Short/Month/9": {
"title": "$:/language/Date/Short/Month/9",
"text": "Sep"
},
"$:/language/Date/Short/Month/10": {
"title": "$:/language/Date/Short/Month/10",
"text": "Oct"
},
"$:/language/Date/Short/Month/11": {
"title": "$:/language/Date/Short/Month/11",
"text": "Nov"
},
"$:/language/Date/Short/Month/12": {
"title": "$:/language/Date/Short/Month/12",
"text": "Dec"
},
"$:/language/RelativeDate/Future/Days": {
"title": "$:/language/RelativeDate/Future/Days",
"text": "<<period>> days from now"
},
"$:/language/RelativeDate/Future/Hours": {
"title": "$:/language/RelativeDate/Future/Hours",
"text": "<<period>> hours from now"
},
"$:/language/RelativeDate/Future/Minutes": {
"title": "$:/language/RelativeDate/Future/Minutes",
"text": "<<period>> minutes from now"
},
"$:/language/RelativeDate/Future/Months": {
"title": "$:/language/RelativeDate/Future/Months",
"text": "<<period>> months from now"
},
"$:/language/RelativeDate/Future/Second": {
"title": "$:/language/RelativeDate/Future/Second",
"text": "1 second from now"
},
"$:/language/RelativeDate/Future/Seconds": {
"title": "$:/language/RelativeDate/Future/Seconds",
"text": "<<period>> seconds from now"
},
"$:/language/RelativeDate/Future/Years": {
"title": "$:/language/RelativeDate/Future/Years",
"text": "<<period>> years from now"
},
"$:/language/RelativeDate/Past/Days": {
"title": "$:/language/RelativeDate/Past/Days",
"text": "<<period>> days ago"
},
"$:/language/RelativeDate/Past/Hours": {
"title": "$:/language/RelativeDate/Past/Hours",
"text": "<<period>> hours ago"
},
"$:/language/RelativeDate/Past/Minutes": {
"title": "$:/language/RelativeDate/Past/Minutes",
"text": "<<period>> minutes ago"
},
"$:/language/RelativeDate/Past/Months": {
"title": "$:/language/RelativeDate/Past/Months",
"text": "<<period>> months ago"
},
"$:/language/RelativeDate/Past/Second": {
"title": "$:/language/RelativeDate/Past/Second",
"text": "1 second ago"
},
"$:/language/RelativeDate/Past/Seconds": {
"title": "$:/language/RelativeDate/Past/Seconds",
"text": "<<period>> seconds ago"
},
"$:/language/RelativeDate/Past/Years": {
"title": "$:/language/RelativeDate/Past/Years",
"text": "<<period>> years ago"
},
"$:/language/Docs/ModuleTypes/allfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/allfilteroperator",
"text": "A sub-operator for the ''all'' filter operator."
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "Animations that may be used with the RevealWidget."
},
"$:/language/Docs/ModuleTypes/authenticator": {
"title": "$:/language/Docs/ModuleTypes/authenticator",
"text": "Defines how requests are authenticated by the built-in HTTP server."
},
"$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
"title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
"text": "A bitmap editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "Commands that can be executed under Node.js."
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "Data to be inserted into `$tw.config`."
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "Individual filter operator methods."
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "Global data to be inserted into `$tw`."
},
"$:/language/Docs/ModuleTypes/info": {
"title": "$:/language/Docs/ModuleTypes/info",
"text": "Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin."
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "Operands for the ''is'' filter operator."
},
"$:/language/Docs/ModuleTypes/library": {
"title": "$:/language/Docs/ModuleTypes/library",
"text": "Generic module type for general purpose JavaScript modules."
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "JavaScript macro definitions."
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "Parsers for different content types."
},
"$:/language/Docs/ModuleTypes/route": {
"title": "$:/language/Docs/ModuleTypes/route",
"text": "Defines how individual URL patterns are handled by the built-in HTTP server."
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "Savers handle different methods for saving files from the browser."
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "Startup functions."
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "Story views customise the animation and behaviour of list widgets."
},
"$:/language/Docs/ModuleTypes/texteditoroperation": {
"title": "$:/language/Docs/ModuleTypes/texteditoroperation",
"text": "A text editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "Converts different content types into tiddlers."
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "Defines the behaviour of an individual tiddler field."
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "Adds methods to the `$tw.Tiddler` prototype."
},
"$:/language/Docs/ModuleTypes/upgrader": {
"title": "$:/language/Docs/ModuleTypes/upgrader",
"text": "Applies upgrade processing to tiddlers during an upgrade/import."
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "Adds methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/utils-browser": {
"title": "$:/language/Docs/ModuleTypes/utils-browser",
"text": "Adds browser-specific methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "Adds Node.js-specific methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "Widgets encapsulate DOM rendering and refreshing."
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "Adds methods to `$tw.Wiki`."
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "Individual parser rules for the main WikiText parser."
},
"$:/language/Docs/PaletteColours/alert-background": {
"title": "$:/language/Docs/PaletteColours/alert-background",
"text": "Alert background"
},
"$:/language/Docs/PaletteColours/alert-border": {
"title": "$:/language/Docs/PaletteColours/alert-border",
"text": "Alert border"
},
"$:/language/Docs/PaletteColours/alert-highlight": {
"title": "$:/language/Docs/PaletteColours/alert-highlight",
"text": "Alert highlight"
},
"$:/language/Docs/PaletteColours/alert-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
"text": "Alert muted foreground"
},
"$:/language/Docs/PaletteColours/background": {
"title": "$:/language/Docs/PaletteColours/background",
"text": "General background"
},
"$:/language/Docs/PaletteColours/blockquote-bar": {
"title": "$:/language/Docs/PaletteColours/blockquote-bar",
"text": "Blockquote bar"
},
"$:/language/Docs/PaletteColours/button-background": {
"title": "$:/language/Docs/PaletteColours/button-background",
"text": "Default button background"
},
"$:/language/Docs/PaletteColours/button-border": {
"title": "$:/language/Docs/PaletteColours/button-border",
"text": "Default button border"
},
"$:/language/Docs/PaletteColours/button-foreground": {
"title": "$:/language/Docs/PaletteColours/button-foreground",
"text": "Default button foreground"
},
"$:/language/Docs/PaletteColours/dirty-indicator": {
"title": "$:/language/Docs/PaletteColours/dirty-indicator",
"text": "Unsaved changes indicator"
},
"$:/language/Docs/PaletteColours/code-background": {
"title": "$:/language/Docs/PaletteColours/code-background",
"text": "Code background"
},
"$:/language/Docs/PaletteColours/code-border": {
"title": "$:/language/Docs/PaletteColours/code-border",
"text": "Code border"
},
"$:/language/Docs/PaletteColours/code-foreground": {
"title": "$:/language/Docs/PaletteColours/code-foreground",
"text": "Code foreground"
},
"$:/language/Docs/PaletteColours/download-background": {
"title": "$:/language/Docs/PaletteColours/download-background",
"text": "Download button background"
},
"$:/language/Docs/PaletteColours/download-foreground": {
"title": "$:/language/Docs/PaletteColours/download-foreground",
"text": "Download button foreground"
},
"$:/language/Docs/PaletteColours/dragger-background": {
"title": "$:/language/Docs/PaletteColours/dragger-background",
"text": "Dragger background"
},
"$:/language/Docs/PaletteColours/dragger-foreground": {
"title": "$:/language/Docs/PaletteColours/dragger-foreground",
"text": "Dragger foreground"
},
"$:/language/Docs/PaletteColours/dropdown-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-background",
"text": "Dropdown background"
},
"$:/language/Docs/PaletteColours/dropdown-border": {
"title": "$:/language/Docs/PaletteColours/dropdown-border",
"text": "Dropdown border"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
"text": "Dropdown tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
"text": "Dropdown tab background"
},
"$:/language/Docs/PaletteColours/dropzone-background": {
"title": "$:/language/Docs/PaletteColours/dropzone-background",
"text": "Dropzone background"
},
"$:/language/Docs/PaletteColours/external-link-background-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-background-hover",
"text": "External link background hover"
},
"$:/language/Docs/PaletteColours/external-link-background-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-background-visited",
"text": "External link background visited"
},
"$:/language/Docs/PaletteColours/external-link-background": {
"title": "$:/language/Docs/PaletteColours/external-link-background",
"text": "External link background"
},
"$:/language/Docs/PaletteColours/external-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
"text": "External link foreground hover"
},
"$:/language/Docs/PaletteColours/external-link-foreground-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
"text": "External link foreground visited"
},
"$:/language/Docs/PaletteColours/external-link-foreground": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground",
"text": "External link foreground"
},
"$:/language/Docs/PaletteColours/foreground": {
"title": "$:/language/Docs/PaletteColours/foreground",
"text": "General foreground"
},
"$:/language/Docs/PaletteColours/menubar-background": {
"title": "$:/language/Docs/PaletteColours/menubar-background",
"text": "Menu bar background"
},
"$:/language/Docs/PaletteColours/menubar-foreground": {
"title": "$:/language/Docs/PaletteColours/menubar-foreground",
"text": "Menu bar foreground"
},
"$:/language/Docs/PaletteColours/message-background": {
"title": "$:/language/Docs/PaletteColours/message-background",
"text": "Message box background"
},
"$:/language/Docs/PaletteColours/message-border": {
"title": "$:/language/Docs/PaletteColours/message-border",
"text": "Message box border"
},
"$:/language/Docs/PaletteColours/message-foreground": {
"title": "$:/language/Docs/PaletteColours/message-foreground",
"text": "Message box foreground"
},
"$:/language/Docs/PaletteColours/modal-backdrop": {
"title": "$:/language/Docs/PaletteColours/modal-backdrop",
"text": "Modal backdrop"
},
"$:/language/Docs/PaletteColours/modal-background": {
"title": "$:/language/Docs/PaletteColours/modal-background",
"text": "Modal background"
},
"$:/language/Docs/PaletteColours/modal-border": {
"title": "$:/language/Docs/PaletteColours/modal-border",
"text": "Modal border"
},
"$:/language/Docs/PaletteColours/modal-footer-background": {
"title": "$:/language/Docs/PaletteColours/modal-footer-background",
"text": "Modal footer background"
},
"$:/language/Docs/PaletteColours/modal-footer-border": {
"title": "$:/language/Docs/PaletteColours/modal-footer-border",
"text": "Modal footer border"
},
"$:/language/Docs/PaletteColours/modal-header-border": {
"title": "$:/language/Docs/PaletteColours/modal-header-border",
"text": "Modal header border"
},
"$:/language/Docs/PaletteColours/muted-foreground": {
"title": "$:/language/Docs/PaletteColours/muted-foreground",
"text": "General muted foreground"
},
"$:/language/Docs/PaletteColours/notification-background": {
"title": "$:/language/Docs/PaletteColours/notification-background",
"text": "Notification background"
},
"$:/language/Docs/PaletteColours/notification-border": {
"title": "$:/language/Docs/PaletteColours/notification-border",
"text": "Notification border"
},
"$:/language/Docs/PaletteColours/page-background": {
"title": "$:/language/Docs/PaletteColours/page-background",
"text": "Page background"
},
"$:/language/Docs/PaletteColours/pre-background": {
"title": "$:/language/Docs/PaletteColours/pre-background",
"text": "Preformatted code background"
},
"$:/language/Docs/PaletteColours/pre-border": {
"title": "$:/language/Docs/PaletteColours/pre-border",
"text": "Preformatted code border"
},
"$:/language/Docs/PaletteColours/primary": {
"title": "$:/language/Docs/PaletteColours/primary",
"text": "General primary"
},
"$:/language/Docs/PaletteColours/select-tag-background": {
"title": "$:/language/Docs/PaletteColours/select-tag-background",
"text": "`<select>` element background"
},
"$:/language/Docs/PaletteColours/select-tag-foreground": {
"title": "$:/language/Docs/PaletteColours/select-tag-foreground",
"text": "`<select>` element text"
},
"$:/language/Docs/PaletteColours/sidebar-button-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
"text": "Sidebar button foreground"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
"text": "Sidebar controls foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
"text": "Sidebar controls foreground"
},
"$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
"text": "Sidebar foreground shadow"
},
"$:/language/Docs/PaletteColours/sidebar-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground",
"text": "Sidebar foreground"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
"text": "Sidebar muted foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
"text": "Sidebar muted foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
"text": "Sidebar tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
"text": "Sidebar tab background"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
"text": "Sidebar tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
"text": "Sidebar tab border"
},
"$:/language/Docs/PaletteColours/sidebar-tab-divider": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
"text": "Sidebar tab divider"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
"text": "Sidebar tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
"text": "Sidebar tab foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
"text": "Sidebar tiddler link foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
"text": "Sidebar tiddler link foreground"
},
"$:/language/Docs/PaletteColours/site-title-foreground": {
"title": "$:/language/Docs/PaletteColours/site-title-foreground",
"text": "Site title foreground"
},
"$:/language/Docs/PaletteColours/static-alert-foreground": {
"title": "$:/language/Docs/PaletteColours/static-alert-foreground",
"text": "Static alert foreground"
},
"$:/language/Docs/PaletteColours/tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/tab-background-selected",
"text": "Tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-background": {
"title": "$:/language/Docs/PaletteColours/tab-background",
"text": "Tab background"
},
"$:/language/Docs/PaletteColours/tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/tab-border-selected",
"text": "Tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-border": {
"title": "$:/language/Docs/PaletteColours/tab-border",
"text": "Tab border"
},
"$:/language/Docs/PaletteColours/tab-divider": {
"title": "$:/language/Docs/PaletteColours/tab-divider",
"text": "Tab divider"
},
"$:/language/Docs/PaletteColours/tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
"text": "Tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-foreground": {
"title": "$:/language/Docs/PaletteColours/tab-foreground",
"text": "Tab foreground"
},
"$:/language/Docs/PaletteColours/table-border": {
"title": "$:/language/Docs/PaletteColours/table-border",
"text": "Table border"
},
"$:/language/Docs/PaletteColours/table-footer-background": {
"title": "$:/language/Docs/PaletteColours/table-footer-background",
"text": "Table footer background"
},
"$:/language/Docs/PaletteColours/table-header-background": {
"title": "$:/language/Docs/PaletteColours/table-header-background",
"text": "Table header background"
},
"$:/language/Docs/PaletteColours/tag-background": {
"title": "$:/language/Docs/PaletteColours/tag-background",
"text": "Tag background"
},
"$:/language/Docs/PaletteColours/tag-foreground": {
"title": "$:/language/Docs/PaletteColours/tag-foreground",
"text": "Tag foreground"
},
"$:/language/Docs/PaletteColours/tiddler-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-background",
"text": "Tiddler background"
},
"$:/language/Docs/PaletteColours/tiddler-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-border",
"text": "Tiddler border"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
"text": "Tiddler controls foreground hover"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
"text": "Tiddler controls foreground for selected controls"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
"text": "Tiddler controls foreground"
},
"$:/language/Docs/PaletteColours/tiddler-editor-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
"text": "Tiddler editor background"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
"text": "Tiddler editor border image"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
"text": "Tiddler editor border"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
"text": "Tiddler editor background for even fields"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
"text": "Tiddler editor background for odd fields"
},
"$:/language/Docs/PaletteColours/tiddler-info-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-background",
"text": "Tiddler info panel background"
},
"$:/language/Docs/PaletteColours/tiddler-info-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-border",
"text": "Tiddler info panel border"
},
"$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
"text": "Tiddler info panel tab background"
},
"$:/language/Docs/PaletteColours/tiddler-link-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-background",
"text": "Tiddler link background"
},
"$:/language/Docs/PaletteColours/tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
"text": "Tiddler link foreground"
},
"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
"text": "Tiddler subtitle foreground"
},
"$:/language/Docs/PaletteColours/tiddler-title-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
"text": "Tiddler title foreground"
},
"$:/language/Docs/PaletteColours/toolbar-new-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-new-button",
"text": "Toolbar 'new tiddler' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-options-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-options-button",
"text": "Toolbar 'options' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-save-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-save-button",
"text": "Toolbar 'save' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-info-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-info-button",
"text": "Toolbar 'info' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-edit-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
"text": "Toolbar 'edit' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-close-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-close-button",
"text": "Toolbar 'close' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-delete-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
"text": "Toolbar 'delete' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-cancel-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
"text": "Toolbar 'cancel' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-done-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-done-button",
"text": "Toolbar 'done' button foreground"
},
"$:/language/Docs/PaletteColours/untagged-background": {
"title": "$:/language/Docs/PaletteColours/untagged-background",
"text": "Untagged pill background"
},
"$:/language/Docs/PaletteColours/very-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/very-muted-foreground",
"text": "Very muted foreground"
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"text": "This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "Type the text for this tiddler"
},
"$:/language/EditTemplate/Body/Preview/Type/Output": {
"title": "$:/language/EditTemplate/Body/Preview/Type/Output",
"text": "output"
},
"$:/language/EditTemplate/Body/Preview/Type/DiffShadow": {
"title": "$:/language/EditTemplate/Body/Preview/Type/DiffShadow",
"text": "differences from shadow (if any)"
},
"$:/language/EditTemplate/Body/Preview/Type/DiffCurrent": {
"title": "$:/language/EditTemplate/Body/Preview/Type/DiffCurrent",
"text": "differences from current"
},
"$:/language/EditTemplate/Field/Remove/Caption": {
"title": "$:/language/EditTemplate/Field/Remove/Caption",
"text": "remove field"
},
"$:/language/EditTemplate/Field/Remove/Hint": {
"title": "$:/language/EditTemplate/Field/Remove/Hint",
"text": "Remove field"
},
"$:/language/EditTemplate/Field/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Field/Dropdown/Caption",
"text": "field list"
},
"$:/language/EditTemplate/Field/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Field/Dropdown/Hint",
"text": "Show field list"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Fields/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Fields/Add/Button/Hint",
"text": "Add the new field to the tiddler"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "field name"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "Add a new field:"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "field value"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/System": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
"text": "System fields"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/User": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
"text": "User fields"
},
"$:/language/EditTemplate/Shadow/Warning": {
"title": "$:/language/EditTemplate/Shadow/Warning",
"text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"
},
"$:/language/EditTemplate/Shadow/OverriddenWarning": {
"title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
"text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Tags/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Tags/Add/Button/Hint",
"text": "add tag"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "tag name"
},
"$:/language/EditTemplate/Tags/ClearInput/Caption": {
"title": "$:/language/EditTemplate/Tags/ClearInput/Caption",
"text": "clear input"
},
"$:/language/EditTemplate/Tags/ClearInput/Hint": {
"title": "$:/language/EditTemplate/Tags/ClearInput/Hint",
"text": "Clear tag input"
},
"$:/language/EditTemplate/Tags/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
"text": "tag list"
},
"$:/language/EditTemplate/Tags/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
"text": "Show tag list"
},
"$:/language/EditTemplate/Title/BadCharacterWarning": {
"title": "$:/language/EditTemplate/Title/BadCharacterWarning",
"text": "Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"
},
"$:/language/EditTemplate/Title/Exists/Prompt": {
"title": "$:/language/EditTemplate/Title/Exists/Prompt",
"text": "Target tiddler already exists"
},
"$:/language/EditTemplate/Title/Relink/Prompt": {
"title": "$:/language/EditTemplate/Title/Relink/Prompt",
"text": "Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers"
},
"$:/language/EditTemplate/Title/References/Prompt": {
"title": "$:/language/EditTemplate/Title/References/Prompt",
"text": "The following references to this tiddler will not be automatically updated:"
},
"$:/language/EditTemplate/Type/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Type/Dropdown/Caption",
"text": "content type list"
},
"$:/language/EditTemplate/Type/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Type/Dropdown/Hint",
"text": "Show content type list"
},
"$:/language/EditTemplate/Type/Delete/Caption": {
"title": "$:/language/EditTemplate/Type/Delete/Caption",
"text": "delete content type"
},
"$:/language/EditTemplate/Type/Delete/Hint": {
"title": "$:/language/EditTemplate/Type/Delete/Hint",
"text": "Delete content type"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "content type"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "Type:"
},
"$:/language/Exporters/StaticRiver": {
"title": "$:/language/Exporters/StaticRiver",
"text": "Static HTML"
},
"$:/language/Exporters/JsonFile": {
"title": "$:/language/Exporters/JsonFile",
"text": "JSON file"
},
"$:/language/Exporters/CsvFile": {
"title": "$:/language/Exporters/CsvFile",
"text": "CSV file"
},
"$:/language/Exporters/TidFile": {
"title": "$:/language/Exporters/TidFile",
"text": "\".tid\" file"
},
"$:/language/Docs/Fields/_canonical_uri": {
"title": "$:/language/Docs/Fields/_canonical_uri",
"text": "The full URI of an external image tiddler"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "The name of the bag from which a tiddler came"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "The text to be displayed on a tab or button"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "The CSS color value associated with a tiddler"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "The date a tiddler was created"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "The name of the person who created a tiddler"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "For a plugin, lists the dependent plugin titles"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "The descriptive text for a plugin, or a modal dialogue"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "For draft tiddlers, contains the proposed new title of the tiddler"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "The footer text for a wizard"
},
"$:/language/Docs/Fields/hide-body": {
"title": "$:/language/Docs/Fields/hide-body",
"text": "The view template will hide bodies of tiddlers if set to: ''yes''"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "The title of the tiddler containing the icon associated with a tiddler"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "Indicates that a tiddler should be saved as a JavaScript library if set to: ''yes''"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "An ordered list of tiddler titles associated with a tiddler"
},
"$:/language/Docs/Fields/list-before": {
"title": "$:/language/Docs/Fields/list-before",
"text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
},
"$:/language/Docs/Fields/list-after": {
"title": "$:/language/Docs/Fields/list-after",
"text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "The date and time at which a tiddler was last modified"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "The tiddler title associated with the person who last modified a tiddler"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "The human readable name associated with a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "A numerical value indicating the priority of a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "The type of plugin in a plugin tiddler"
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "The revision of the tiddler held at the server"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "Date of a TiddlyWiki release"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "The source URL associated with a tiddler"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "The subtitle text for a wizard"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "A list of tags associated with a tiddler"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "The body text of a tiddler"
},
"$:/language/Docs/Fields/throttle.refresh": {
"title": "$:/language/Docs/Fields/throttle.refresh",
"text": "If present, throttles refreshes of this tiddler"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "The unique name of a tiddler"
},
"$:/language/Docs/Fields/toc-link": {
"title": "$:/language/Docs/Fields/toc-link",
"text": "Suppresses the tiddler's link in a Table of Contents tree if set to: ''no''"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "The content type of a tiddler"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "Version information for a plugin"
},
"$:/language/Docs/Fields/_is_skinny": {
"title": "$:/language/Docs/Fields/_is_skinny",
"text": "If present, indicates that the tiddler text field must be loaded from the server"
},
"$:/language/Filters/AllTiddlers": {
"title": "$:/language/Filters/AllTiddlers",
"text": "All tiddlers except system tiddlers"
},
"$:/language/Filters/RecentSystemTiddlers": {
"title": "$:/language/Filters/RecentSystemTiddlers",
"text": "Recently modified tiddlers, including system tiddlers"
},
"$:/language/Filters/RecentTiddlers": {
"title": "$:/language/Filters/RecentTiddlers",
"text": "Recently modified tiddlers"
},
"$:/language/Filters/AllTags": {
"title": "$:/language/Filters/AllTags",
"text": "All tags except system tags"
},
"$:/language/Filters/Missing": {
"title": "$:/language/Filters/Missing",
"text": "Missing tiddlers"
},
"$:/language/Filters/Drafts": {
"title": "$:/language/Filters/Drafts",
"text": "Draft tiddlers"
},
"$:/language/Filters/Orphans": {
"title": "$:/language/Filters/Orphans",
"text": "Orphan tiddlers"
},
"$:/language/Filters/SystemTiddlers": {
"title": "$:/language/Filters/SystemTiddlers",
"text": "System tiddlers"
},
"$:/language/Filters/ShadowTiddlers": {
"title": "$:/language/Filters/ShadowTiddlers",
"text": "Shadow tiddlers"
},
"$:/language/Filters/OverriddenShadowTiddlers": {
"title": "$:/language/Filters/OverriddenShadowTiddlers",
"text": "Overridden shadow tiddlers"
},
"$:/language/Filters/SessionTiddlers": {
"title": "$:/language/Filters/SessionTiddlers",
"text": "Tiddlers modified since the wiki was loaded"
},
"$:/language/Filters/SystemTags": {
"title": "$:/language/Filters/SystemTags",
"text": "System tags"
},
"$:/language/Filters/StoryList": {
"title": "$:/language/Filters/StoryList",
"text": "Tiddlers in the story river, excluding <$text text=\"$:/AdvancedSearch\"/>"
},
"$:/language/Filters/TypedTiddlers": {
"title": "$:/language/Filters/TypedTiddlers",
"text": "Non wiki-text tiddlers"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
},
"$:/language/Help/build": {
"title": "$:/language/Help/build",
"description": "Automatically run configured commands",
"text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
},
"$:/language/Help/clearpassword": {
"title": "$:/language/Help/clearpassword",
"description": "Clear a password for subsequent crypto operations",
"text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
},
"$:/language/Help/deletetiddlers": {
"title": "$:/language/Help/deletetiddlers",
"description": "Deletes a group of tiddlers",
"text": "<<.from-version \"5.1.20\">> Deletes a group of tiddlers identified by a filter.\n\n```\n--deletetiddlers <filter>\n```\n"
},
"$:/language/Help/editions": {
"title": "$:/language/Help/editions",
"description": "Lists the available editions of TiddlyWiki",
"text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
},
"$:/language/Help/fetch": {
"title": "$:/language/Help/fetch",
"description": "Fetch tiddlers from wiki by URL",
"text": "Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\nThe \"file\" and \"files\" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \"raw-file\" and \"raw-files\" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\n\nWith the \"file\" and \"raw-file\" variants only a single file is fetched and the first parameter is the URL of the file to read.\n\nWith the \"files\" and \"raw-files\" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \"remote-server\" that have a field \"url\" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.\n\nFor the \"file\" and \"files\" variants, the `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.\n\nFor all variants, the `<transform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.\n\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\n\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\n\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\nThe following example retrieves the \"favicon\" file from tiddlywiki.com and saves it in a file called \"output.ico\". Note that the intermediate tiddler \"Icon Tiddler\" is quoted in the \"--fetch\" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \"--savetiddler\" command because it is being used directly as a title.\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "Display help for TiddlyWiki commands",
"text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
},
"$:/language/Help/import": {
"title": "$:/language/Help/import",
"description": "Import tiddlers from a file",
"text": "Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\nThe deserializers in the core include:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\nThe title of the imported tiddler defaults to the filename.\n\nThe encoding defaults to \"utf8\", but can be \"base64\" for importing binary files.\n\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "Initialise a new wiki folder",
"text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
},
"$:/language/Help/listen": {
"title": "$:/language/Help/listen",
"description": "Provides an HTTP server interface to TiddlyWiki",
"text": "Serves a wiki over HTTP.\n\nThe listen command uses NamedCommandParameters:\n\n```\n--listen [<name>=<value>]...\n```\n\nAll parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:\n\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''credentials'' - pathname of credentials CSV file (relative to wiki folder)\n* ''anon-username'' - the username for signing edits for anonymous users\n* ''username'' - optional username for basic authentication\n* ''password'' - optional password for basic authentication\n* ''authenticated-user-header'' - optional name of header to be used for trusted authentication\n* ''readers'' - comma-separated list of principals allowed to read from this wiki\n* ''writers'' - comma-separated list of principals allowed to write to this wiki\n* ''csrf-disable'' - set to \"yes\" to disable CSRF checks (defaults to \"no\")\n* ''sse-enabled'' - set to \"yes\" to enable Server-sent events (defaults to \"no\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''tls-cert'' - pathname of TLS certificate file (relative to wiki folder)\n* ''tls-key'' - pathname of TLS key file (relative to wiki folder)\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n* ''gzip'' - set to \"yes\" to enable gzip compression for some http endpoints (defaults to \"no\")\n* ''use-browser-cache'' - set to \"yes\" to allow the browser to cache responses to save bandwidth (defaults to \"no\")\n\nFor information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "Load tiddlers from a file",
"text": "Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\n\n```\n--load <filepath> [noerror]\n--load <dirpath> [noerror]\n```\n\nBy default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional \"noerror\" parameter.\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
},
"$:/language/Help/makelibrary": {
"title": "$:/language/Help/makelibrary",
"description": "Construct library plugin required by upgrade process",
"text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "No such help item"
},
"$:/language/Help/output": {
"title": "$:/language/Help/output",
"description": "Set the base output directory for subsequent commands",
"text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "Set a password for subsequent crypto operations",
"text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"
},
"$:/language/Help/render": {
"title": "$:/language/Help/render",
"description": "Renders individual tiddlers to files",
"text": "Render individual tiddlers identified by a filter and save the results to the specified files.\n\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \"currentTiddler\" variable set to the title of the tiddler that is being rendered.\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [ [<name>] [<value>] ]*\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename\n* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\n* ''template'': Optional template through which each tiddler is rendered\n* ''name'': Name of optional variables\n* ''value'': Value of optional variables\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets: `--render \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* Multiple ''name''/''value'' pairs can be used to pass more than one variable\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\n\nExamples:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- renders all non-system tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles and the extension HTML\n\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "Render an individual tiddler as a specified ContentType",
"text": "(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\n\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n\nFor example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```\n"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "Render tiddlers matching a filter to a specified ContentType",
"text": "(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers '<filter>' <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers '[!is[system]]' $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"
},
"$:/language/Help/save": {
"title": "$:/language/Help/save",
"description": "Saves individual raw tiddlers to files",
"text": "Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets: `--save \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\n\nExamples:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- saves all non-system image tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles\n"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "Saves a raw tiddler to a file",
"text": "(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
},
"$:/language/Help/savetiddlers": {
"title": "$:/language/Help/savetiddlers",
"description": "Saves a group of raw tiddlers to a directory",
"text": "(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
},
"$:/language/Help/savewikifolder": {
"title": "$:/language/Help/savewikifolder",
"description": "Saves a wiki to a new wiki folder",
"text": "<<.from-version \"5.1.20\">> Saves the current wiki as a wiki folder, including tiddlers, plugins and configuration:\n\n```\n--savewikifolder <wikifolderpath> [<filter>]\n```\n\n* The target wiki folder must be empty or non-existent\n* The filter specifies which tiddlers should be included. It is optional, defaulting to `[all[tiddlers]]`\n* Plugins from the official plugin library are replaced with references to those plugins in the `tiddlywiki.info` file\n* Custom plugins are unpacked into their own folder\n\nA common usage is to convert a TiddlyWiki HTML file into a wiki folder:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\n```\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "Provides an HTTP server interface to TiddlyWiki (deprecated in favour of the new listen command)",
"text": "Legacy command to serve a wiki over HTTP.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\nThe parameters are:\n\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password.\n\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nUsing an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called \"MY_PORT_NUMBER\":\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n"
},
"$:/language/Help/setfield": {
"title": "$:/language/Help/setfield",
"description": "Prepares external tiddlers for use",
"text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
},
"$:/language/Help/unpackplugin": {
"title": "$:/language/Help/unpackplugin",
"description": "Unpack the payload tiddlers from a plugin",
"text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "Triggers verbose output mode",
"text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "Displays the version number of TiddlyWiki",
"text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
},
"$:/languages/en-GB/icon": {
"title": "$:/languages/en-GB/icon",
"type": "image/svg+xml",
"text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
},
"$:/language/Import/Editor/Import/Heading": {
"title": "$:/language/Import/Editor/Import/Heading",
"text": "Import images and insert them into the editor."
},
"$:/language/Import/Imported/Hint": {
"title": "$:/language/Import/Imported/Hint",
"text": "The following tiddlers were imported:"
},
"$:/language/Import/Listing/Cancel/Caption": {
"title": "$:/language/Import/Listing/Cancel/Caption",
"text": "Cancel"
},
"$:/language/Import/Listing/Hint": {
"title": "$:/language/Import/Listing/Hint",
"text": "These tiddlers are ready to import:"
},
"$:/language/Import/Listing/Import/Caption": {
"title": "$:/language/Import/Listing/Import/Caption",
"text": "Import"
},
"$:/language/Import/Listing/Select/Caption": {
"title": "$:/language/Import/Listing/Select/Caption",
"text": "Select"
},
"$:/language/Import/Listing/Status/Caption": {
"title": "$:/language/Import/Listing/Status/Caption",
"text": "Status"
},
"$:/language/Import/Listing/Title/Caption": {
"title": "$:/language/Import/Listing/Title/Caption",
"text": "Title"
},
"$:/language/Import/Listing/Preview": {
"title": "$:/language/Import/Listing/Preview",
"text": "Preview:"
},
"$:/language/Import/Listing/Preview/Text": {
"title": "$:/language/Import/Listing/Preview/Text",
"text": "Text"
},
"$:/language/Import/Listing/Preview/TextRaw": {
"title": "$:/language/Import/Listing/Preview/TextRaw",
"text": "Text (Raw)"
},
"$:/language/Import/Listing/Preview/Fields": {
"title": "$:/language/Import/Listing/Preview/Fields",
"text": "Fields"
},
"$:/language/Import/Listing/Preview/Diff": {
"title": "$:/language/Import/Listing/Preview/Diff",
"text": "Diff"
},
"$:/language/Import/Listing/Preview/DiffFields": {
"title": "$:/language/Import/Listing/Preview/DiffFields",
"text": "Diff (Fields)"
},
"$:/language/Import/Listing/Rename/Tooltip": {
"title": "$:/language/Import/Listing/Rename/Tooltip",
"text": "Rename tiddler before importing"
},
"$:/language/Import/Listing/Rename/Prompt": {
"title": "$:/language/Import/Listing/Rename/Prompt",
"text": "Rename to:"
},
"$:/language/Import/Listing/Rename/ConfirmRename": {
"title": "$:/language/Import/Listing/Rename/ConfirmRename",
"text": "Rename tiddler"
},
"$:/language/Import/Listing/Rename/CancelRename": {
"title": "$:/language/Import/Listing/Rename/CancelRename",
"text": "Cancel"
},
"$:/language/Import/Listing/Rename/OverwriteWarning": {
"title": "$:/language/Import/Listing/Rename/OverwriteWarning",
"text": "A tiddler with this title already exists."
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
"text": "Blocked incompatible or obsolete plugin."
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
"text": "Blocked plugin (due to incoming <<incoming>> not being newer than existing <<existing>>)."
},
"$:/language/Import/Upgrader/Plugins/Upgraded": {
"title": "$:/language/Import/Upgrader/Plugins/Upgraded",
"text": "Upgraded plugin from <<incoming>> to <<upgraded>>."
},
"$:/language/Import/Upgrader/State/Suppressed": {
"title": "$:/language/Import/Upgrader/State/Suppressed",
"text": "Blocked temporary state tiddler."
},
"$:/language/Import/Upgrader/System/Disabled": {
"title": "$:/language/Import/Upgrader/System/Disabled",
"text": "Disabled system tiddler."
},
"$:/language/Import/Upgrader/System/Suppressed": {
"title": "$:/language/Import/Upgrader/System/Suppressed",
"text": "Blocked system tiddler."
},
"$:/language/Import/Upgrader/System/Warning": {
"title": "$:/language/Import/Upgrader/System/Warning",
"text": "Core module tiddler."
},
"$:/language/Import/Upgrader/System/Alert": {
"title": "$:/language/Import/Upgrader/System/Alert",
"text": "You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable."
},
"$:/language/Import/Upgrader/ThemeTweaks/Created": {
"title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
"text": "Migrated theme tweak from <$text text=<<from>>/>."
},
"$:/language/Import/Upgrader/Tiddler/Disabled": {
"title": "$:/language/Import/Upgrader/Tiddler/Disabled",
"text": "Disabled tiddler."
},
"$:/language/Import/Upgrader/Tiddler/Selected": {
"title": "$:/language/Import/Upgrader/Tiddler/Selected",
"text": "User selected."
},
"$:/language/Import/Upgrader/Tiddler/Unselected": {
"title": "$:/language/Import/Upgrader/Tiddler/Unselected",
"text": "Unselected tiddler."
},
"$:/language/AboveStory/ClassicPlugin/Warning": {
"title": "$:/language/AboveStory/ClassicPlugin/Warning",
"text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
},
"$:/language/BinaryWarning/Prompt": {
"title": "$:/language/BinaryWarning/Prompt",
"text": "This tiddler contains binary data"
},
"$:/language/ClassicWarning/Hint": {
"title": "$:/language/ClassicWarning/Hint",
"text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details."
},
"$:/language/ClassicWarning/Upgrade/Caption": {
"title": "$:/language/ClassicWarning/Upgrade/Caption",
"text": "upgrade"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "close all"
},
"$:/language/ColourPicker/Recent": {
"title": "$:/language/ColourPicker/Recent",
"text": "Recent:"
},
"$:/language/ConfirmCancelTiddler": {
"title": "$:/language/ConfirmCancelTiddler",
"text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmDeleteTiddler": {
"title": "$:/language/ConfirmDeleteTiddler",
"text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmOverwriteTiddler": {
"title": "$:/language/ConfirmOverwriteTiddler",
"text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmEditShadowTiddler": {
"title": "$:/language/ConfirmEditShadowTiddler",
"text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmAction": {
"title": "$:/language/ConfirmAction",
"text": "Do you wish to proceed?"
},
"$:/language/Count": {
"title": "$:/language/Count",
"text": "count"
},
"$:/language/DefaultNewTiddlerTitle": {
"title": "$:/language/DefaultNewTiddlerTitle",
"text": "New Tiddler"
},
"$:/language/Diffs/CountMessage": {
"title": "$:/language/Diffs/CountMessage",
"text": "<<diff-count>> differences"
},
"$:/language/DropMessage": {
"title": "$:/language/DropMessage",
"text": "Drop here (or use the 'Escape' key to cancel)"
},
"$:/language/Encryption/Cancel": {
"title": "$:/language/Encryption/Cancel",
"text": "Cancel"
},
"$:/language/Encryption/ConfirmClearPassword": {
"title": "$:/language/Encryption/ConfirmClearPassword",
"text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
},
"$:/language/Encryption/PromptSetPassword": {
"title": "$:/language/Encryption/PromptSetPassword",
"text": "Set a new password for this TiddlyWiki"
},
"$:/language/Encryption/Username": {
"title": "$:/language/Encryption/Username",
"text": "Username"
},
"$:/language/Encryption/Password": {
"title": "$:/language/Encryption/Password",
"text": "Password"
},
"$:/language/Encryption/RepeatPassword": {
"title": "$:/language/Encryption/RepeatPassword",
"text": "Repeat password"
},
"$:/language/Encryption/PasswordNoMatch": {
"title": "$:/language/Encryption/PasswordNoMatch",
"text": "Passwords do not match"
},
"$:/language/Encryption/SetPassword": {
"title": "$:/language/Encryption/SetPassword",
"text": "Set password"
},
"$:/language/Error/Caption": {
"title": "$:/language/Error/Caption",
"text": "Error"
},
"$:/language/Error/Filter": {
"title": "$:/language/Error/Filter",
"text": "Filter error"
},
"$:/language/Error/FilterSyntax": {
"title": "$:/language/Error/FilterSyntax",
"text": "Syntax error in filter expression"
},
"$:/language/Error/FilterRunPrefix": {
"title": "$:/language/Error/FilterRunPrefix",
"text": "Filter Error: Unknown prefix for filter run"
},
"$:/language/Error/IsFilterOperator": {
"title": "$:/language/Error/IsFilterOperator",
"text": "Filter Error: Unknown operand for the 'is' filter operator"
},
"$:/language/Error/FormatFilterOperator": {
"title": "$:/language/Error/FormatFilterOperator",
"text": "Filter Error: Unknown suffix for the 'format' filter operator"
},
"$:/language/Error/LoadingPluginLibrary": {
"title": "$:/language/Error/LoadingPluginLibrary",
"text": "Error loading plugin library"
},
"$:/language/Error/NetworkErrorAlert": {
"title": "$:/language/Error/NetworkErrorAlert",
"text": "`<h2>''Network Error''</h2>It looks like the connection to the server has been lost. This may indicate a problem with your network connection. Please attempt to restore network connectivity before continuing.<br><br>''Any unsaved changes will be automatically synchronised when connectivity is restored''.`"
},
"$:/language/Error/PutEditConflict": {
"title": "$:/language/Error/PutEditConflict",
"text": "File changed on server"
},
"$:/language/Error/PutForbidden": {
"title": "$:/language/Error/PutForbidden",
"text": "Permission denied"
},
"$:/language/Error/PutUnauthorized": {
"title": "$:/language/Error/PutUnauthorized",
"text": "Authentication required"
},
"$:/language/Error/RecursiveTransclusion": {
"title": "$:/language/Error/RecursiveTransclusion",
"text": "Recursive transclusion error in transclude widget"
},
"$:/language/Error/RetrievingSkinny": {
"title": "$:/language/Error/RetrievingSkinny",
"text": "Error retrieving skinny tiddler list"
},
"$:/language/Error/SavingToTWEdit": {
"title": "$:/language/Error/SavingToTWEdit",
"text": "Error saving to TWEdit"
},
"$:/language/Error/WhileSaving": {
"title": "$:/language/Error/WhileSaving",
"text": "Error while saving"
},
"$:/language/Error/XMLHttpRequest": {
"title": "$:/language/Error/XMLHttpRequest",
"text": "XMLHttpRequest error code"
},
"$:/language/InternalJavaScriptError/Title": {
"title": "$:/language/InternalJavaScriptError/Title",
"text": "Internal JavaScript Error"
},
"$:/language/InternalJavaScriptError/Hint": {
"title": "$:/language/InternalJavaScriptError/Hint",
"text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
},
"$:/language/InvalidFieldName": {
"title": "$:/language/InvalidFieldName",
"text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
},
"$:/language/LayoutSwitcher/Description": {
"title": "$:/language/LayoutSwitcher/Description",
"text": "Open the layout switcher"
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"text": "<p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>"
},
"$:/language/LoginToTiddlySpace": {
"title": "$:/language/LoginToTiddlySpace",
"text": "Login to TiddlySpace"
},
"$:/language/Manager/Controls/FilterByTag/None": {
"title": "$:/language/Manager/Controls/FilterByTag/None",
"text": "(none)"
},
"$:/language/Manager/Controls/FilterByTag/Prompt": {
"title": "$:/language/Manager/Controls/FilterByTag/Prompt",
"text": "Filter by tag:"
},
"$:/language/Manager/Controls/Order/Prompt": {
"title": "$:/language/Manager/Controls/Order/Prompt",
"text": "Reverse order"
},
"$:/language/Manager/Controls/Search/Placeholder": {
"title": "$:/language/Manager/Controls/Search/Placeholder",
"text": "Search"
},
"$:/language/Manager/Controls/Search/Prompt": {
"title": "$:/language/Manager/Controls/Search/Prompt",
"text": "Search:"
},
"$:/language/Manager/Controls/Show/Option/Tags": {
"title": "$:/language/Manager/Controls/Show/Option/Tags",
"text": "tags"
},
"$:/language/Manager/Controls/Show/Option/Tiddlers": {
"title": "$:/language/Manager/Controls/Show/Option/Tiddlers",
"text": "tiddlers"
},
"$:/language/Manager/Controls/Show/Prompt": {
"title": "$:/language/Manager/Controls/Show/Prompt",
"text": "Show:"
},
"$:/language/Manager/Controls/Sort/Prompt": {
"title": "$:/language/Manager/Controls/Sort/Prompt",
"text": "Sort by:"
},
"$:/language/Manager/Item/Colour": {
"title": "$:/language/Manager/Item/Colour",
"text": "Colour"
},
"$:/language/Manager/Item/Fields": {
"title": "$:/language/Manager/Item/Fields",
"text": "Fields"
},
"$:/language/Manager/Item/Icon/None": {
"title": "$:/language/Manager/Item/Icon/None",
"text": "(none)"
},
"$:/language/Manager/Item/Icon": {
"title": "$:/language/Manager/Item/Icon",
"text": "Icon"
},
"$:/language/Manager/Item/RawText": {
"title": "$:/language/Manager/Item/RawText",
"text": "Raw text"
},
"$:/language/Manager/Item/Tags": {
"title": "$:/language/Manager/Item/Tags",
"text": "Tags"
},
"$:/language/Manager/Item/Tools": {
"title": "$:/language/Manager/Item/Tools",
"text": "Tools"
},
"$:/language/Manager/Item/WikifiedText": {
"title": "$:/language/Manager/Item/WikifiedText",
"text": "Wikified text"
},
"$:/language/MissingTiddler/Hint": {
"title": "$:/language/MissingTiddler/Hint",
"text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" -- click {{||$:/core/ui/Buttons/edit}} to create"
},
"$:/language/No": {
"title": "$:/language/No",
"text": "No"
},
"$:/language/OfficialPluginLibrary": {
"title": "$:/language/OfficialPluginLibrary",
"text": "Official ~TiddlyWiki Plugin Library"
},
"$:/language/OfficialPluginLibrary/Hint": {
"title": "$:/language/OfficialPluginLibrary/Hint",
"text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
},
"$:/language/PageTemplate/Description": {
"title": "$:/language/PageTemplate/Description",
"text": "the default ~TiddlyWiki layout"
},
"$:/language/PageTemplate/Name": {
"title": "$:/language/PageTemplate/Name",
"text": "Default ~PageTemplate"
},
"$:/language/PluginReloadWarning": {
"title": "$:/language/PluginReloadWarning",
"text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to ~JavaScript plugins to take effect"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "DDth MMM YYYY"
},
"$:/language/Shortcuts/Input/AdvancedSearch/Hint": {
"title": "$:/language/Shortcuts/Input/AdvancedSearch/Hint",
"text": "Open the ~AdvancedSearch panel from within the sidebar search field"
},
"$:/language/Shortcuts/Input/Accept/Hint": {
"title": "$:/language/Shortcuts/Input/Accept/Hint",
"text": "Accept the selected item"
},
"$:/language/Shortcuts/Input/AcceptVariant/Hint": {
"title": "$:/language/Shortcuts/Input/AcceptVariant/Hint",
"text": "Accept the selected item (variant)"
},
"$:/language/Shortcuts/Input/Cancel/Hint": {
"title": "$:/language/Shortcuts/Input/Cancel/Hint",
"text": "Clear the input field"
},
"$:/language/Shortcuts/Input/Down/Hint": {
"title": "$:/language/Shortcuts/Input/Down/Hint",
"text": "Select the next item"
},
"$:/language/Shortcuts/Input/Tab-Left/Hint": {
"title": "$:/language/Shortcuts/Input/Tab-Left/Hint",
"text": "Select the previous Tab"
},
"$:/language/Shortcuts/Input/Tab-Right/Hint": {
"title": "$:/language/Shortcuts/Input/Tab-Right/Hint",
"text": "Select the next Tab"
},
"$:/language/Shortcuts/Input/Up/Hint": {
"title": "$:/language/Shortcuts/Input/Up/Hint",
"text": "Select the previous item"
},
"$:/language/Shortcuts/SidebarLayout/Hint": {
"title": "$:/language/Shortcuts/SidebarLayout/Hint",
"text": "Change the sidebar layout"
},
"$:/language/Switcher/Subtitle/theme": {
"title": "$:/language/Switcher/Subtitle/theme",
"text": "Switch Theme"
},
"$:/language/Switcher/Subtitle/layout": {
"title": "$:/language/Switcher/Subtitle/layout",
"text": "Switch Layout"
},
"$:/language/Switcher/Subtitle/language": {
"title": "$:/language/Switcher/Subtitle/language",
"text": "Switch Language"
},
"$:/language/Switcher/Subtitle/palette": {
"title": "$:/language/Switcher/Subtitle/palette",
"text": "Switch Palette"
},
"$:/language/SystemTiddler/Tooltip": {
"title": "$:/language/SystemTiddler/Tooltip",
"text": "This is a system tiddler"
},
"$:/language/SystemTiddlers/Include/Prompt": {
"title": "$:/language/SystemTiddlers/Include/Prompt",
"text": "Include system tiddlers"
},
"$:/language/TagManager/Colour/Heading": {
"title": "$:/language/TagManager/Colour/Heading",
"text": "Colour"
},
"$:/language/TagManager/Count/Heading": {
"title": "$:/language/TagManager/Count/Heading",
"text": "Count"
},
"$:/language/TagManager/Icon/Heading": {
"title": "$:/language/TagManager/Icon/Heading",
"text": "Icon"
},
"$:/language/TagManager/Icons/None": {
"title": "$:/language/TagManager/Icons/None",
"text": "None"
},
"$:/language/TagManager/Info/Heading": {
"title": "$:/language/TagManager/Info/Heading",
"text": "Info"
},
"$:/language/TagManager/Tag/Heading": {
"title": "$:/language/TagManager/Tag/Heading",
"text": "Tag"
},
"$:/language/Tiddler/DateFormat": {
"title": "$:/language/Tiddler/DateFormat",
"text": "DDth MMM YYYY at hh12:0mmam"
},
"$:/language/UnsavedChangesWarning": {
"title": "$:/language/UnsavedChangesWarning",
"text": "You have unsaved changes in TiddlyWiki"
},
"$:/language/Yes": {
"title": "$:/language/Yes",
"text": "Yes"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"subtitle": "Download changes",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/DownloadingChanges.html",
"text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"subtitle": "Save your work",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/SavingChanges.html",
"text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
},
"$:/config/NewJournal/Title": {
"title": "$:/config/NewJournal/Title",
"text": "DDth MMM YYYY"
},
"$:/config/NewJournal/Text": {
"title": "$:/config/NewJournal/Text",
"text": ""
},
"$:/config/NewJournal/Tags": {
"title": "$:/config/NewJournal/Tags",
"text": "Journal\n"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "Saved wiki"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "Starting to save wiki"
},
"$:/language/Notifications/CopiedToClipboard/Succeeded": {
"title": "$:/language/Notifications/CopiedToClipboard/Succeeded",
"text": "Copied to clipboard!"
},
"$:/language/Notifications/CopiedToClipboard/Failed": {
"title": "$:/language/Notifications/CopiedToClipboard/Failed",
"text": "Failed to copy to clipboard!"
},
"$:/language/Search/DefaultResults/Caption": {
"title": "$:/language/Search/DefaultResults/Caption",
"text": "List"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "Filter"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]"
},
"$:/language/Search/Filter/Matches": {
"title": "$:/language/Search/Filter/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches/All": {
"title": "$:/language/Search/Matches/All",
"text": "All matches:"
},
"$:/language/Search/Matches/Title": {
"title": "$:/language/Search/Matches/Title",
"text": "Title matches:"
},
"$:/language/Search/Search": {
"title": "$:/language/Search/Search",
"text": "Search"
},
"$:/language/Search/Search/TooShort": {
"title": "$:/language/Search/Search/TooShort",
"text": "Search text too short"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "Shadows"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "Search for shadow tiddlers"
},
"$:/language/Search/Shadows/Matches": {
"title": "$:/language/Search/Shadows/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Standard/Caption": {
"title": "$:/language/Search/Standard/Caption",
"text": "Standard"
},
"$:/language/Search/Standard/Hint": {
"title": "$:/language/Search/Standard/Hint",
"text": "Search for standard tiddlers"
},
"$:/language/Search/Standard/Matches": {
"title": "$:/language/Search/Standard/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "System"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "Search for system tiddlers"
},
"$:/language/Search/System/Matches": {
"title": "$:/language/Search/System/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "All"
},
"$:/language/SideBar/Contents/Caption": {
"title": "$:/language/SideBar/Contents/Caption",
"text": "Contents"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "Drafts"
},
"$:/language/SideBar/Explorer/Caption": {
"title": "$:/language/SideBar/Explorer/Caption",
"text": "Explorer"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "Missing"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "More"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "Open"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "Orphans"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "Recent"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "Shadows"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "System"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "Tags"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "untagged"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "Tools"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "Types"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "a non-linear personal web notebook"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "My ~TiddlyWiki"
},
"$:/language/Snippets/ListByTag": {
"title": "$:/language/Snippets/ListByTag",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "List of tiddlers by tag",
"text": "<<list-links \"[tag[task]sort[title]]\">>\n"
},
"$:/language/Snippets/MacroDefinition": {
"title": "$:/language/Snippets/MacroDefinition",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Macro definition",
"text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"
},
"$:/language/Snippets/Table4x3": {
"title": "$:/language/Snippets/Table4x3",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table with 4 columns by 3 rows",
"text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"
},
"$:/language/Snippets/TableOfContents": {
"title": "$:/language/Snippets/TableOfContents",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table of Contents",
"text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
},
"$:/language/ThemeTweaks/ThemeTweaks": {
"title": "$:/language/ThemeTweaks/ThemeTweaks",
"text": "Theme Tweaks"
},
"$:/language/ThemeTweaks/ThemeTweaks/Hint": {
"title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
"text": "You can tweak certain aspects of the ''Vanilla'' theme."
},
"$:/language/ThemeTweaks/Options": {
"title": "$:/language/ThemeTweaks/Options",
"text": "Options"
},
"$:/language/ThemeTweaks/Options/SidebarLayout": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout",
"text": "Sidebar layout"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
"text": "Fixed story, fluid sidebar"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
"text": "Fluid story, fixed sidebar"
},
"$:/language/ThemeTweaks/Options/StickyTitles": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles",
"text": "Sticky titles"
},
"$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
"text": "Causes tiddler titles to \"stick\" to the top of the browser window"
},
"$:/language/ThemeTweaks/Options/CodeWrapping": {
"title": "$:/language/ThemeTweaks/Options/CodeWrapping",
"text": "Wrap long lines in code blocks"
},
"$:/language/ThemeTweaks/Settings": {
"title": "$:/language/ThemeTweaks/Settings",
"text": "Settings"
},
"$:/language/ThemeTweaks/Settings/FontFamily": {
"title": "$:/language/ThemeTweaks/Settings/FontFamily",
"text": "Font family"
},
"$:/language/ThemeTweaks/Settings/CodeFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
"text": "Code font family"
},
"$:/language/ThemeTweaks/Settings/EditorFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/EditorFontFamily",
"text": "Editor font family"
},
"$:/language/ThemeTweaks/Settings/BackgroundImage": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
"text": "Page background image"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
"text": "Page background image attachment"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
"text": "Scroll with tiddlers"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
"text": "Fixed to window"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
"text": "Page background image size"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
"text": "Auto"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
"text": "Cover"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
"text": "Contain"
},
"$:/language/ThemeTweaks/Metrics": {
"title": "$:/language/ThemeTweaks/Metrics",
"text": "Sizes"
},
"$:/language/ThemeTweaks/Metrics/FontSize": {
"title": "$:/language/ThemeTweaks/Metrics/FontSize",
"text": "Font size"
},
"$:/language/ThemeTweaks/Metrics/LineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/LineHeight",
"text": "Line height"
},
"$:/language/ThemeTweaks/Metrics/BodyFontSize": {
"title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
"text": "Font size for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
"text": "Line height for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
"text": "Story left position"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
"text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryTop": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop",
"text": "Story top position"
},
"$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
"text": "how far the top margin of the story river<br>is from the top of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryRight": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight",
"text": "Story right"
},
"$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
"text": "how far the left margin of the sidebar <br>is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
"text": "Story width"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
"text": "the overall width of the story river"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
"text": "Tiddler width"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
"text": "within the story river"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
"text": "Sidebar breakpoint"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
"text": "the minimum page width at which the story<br>river and sidebar will appear side by side"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
"text": "Sidebar width"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
"text": "the width of the sidebar in fluid-fixed layout"
},
"$:/language/TiddlerInfo/Advanced/Caption": {
"title": "$:/language/TiddlerInfo/Advanced/Caption",
"text": "Advanced"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
"text": "none"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
"text": "Plugin Details"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
"text": "This plugin contains the following shadow tiddlers:"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
"text": "Shadow Status"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
"text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
"text": "It is overridden by an ordinary tiddler"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "Fields"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "List"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "This tiddler does not have a list"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "Listed"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "This tiddler is not listed by any others"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "Backlinks"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "No tiddlers link to this one"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "Tagging"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "No tiddlers are tagged with this one"
},
"$:/language/TiddlerInfo/Tools/Caption": {
"title": "$:/language/TiddlerInfo/Tools/Caption",
"text": "Tools"
},
"$:/language/Docs/Types/application/javascript": {
"title": "$:/language/Docs/Types/application/javascript",
"description": "JavaScript code",
"name": "application/javascript",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON data",
"name": "application/json",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "Data dictionary",
"name": "application/x-tiddler-dictionary",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF image",
"name": "image/gif",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG image",
"name": "image/jpeg",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG image",
"name": "image/png",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "Structured Vector Graphics image",
"name": "image/svg+xml",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "ICO format icon file",
"name": "image/x-icon",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "Static stylesheet",
"name": "text/css",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/text/html": {
"title": "$:/language/Docs/Types/text/html",
"description": "HTML markup",
"name": "text/html",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "Plain text",
"name": "text/plain",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "TiddlyWiki 5",
"name": "text/vnd.tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "TiddlyWiki Classic",
"name": "text/x-tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/languages/en-GB": {
"title": "$:/languages/en-GB",
"name": "en-GB",
"description": "English (British)",
"author": "JeremyRuston",
"core-version": ">=5.0.0\"",
"text": "Stub pseudo-plugin for the default language"
},
"$:/core/modules/commander.js": {
"title": "$:/core/modules/commander.js",
"text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nLog a string if verbose flag is set\n*/\nCommander.prototype.log = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str + \"\\n\");\n\t}\n};\n\n/*\nWrite a string if verbose flag is set\n*/\nCommander.prototype.write = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str);\n\t}\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\t// Parse named parameters if required\n\t\t\t\tif(command.info.namedParameterMode) {\n\t\t\t\t\tparams = this.extractNamedParameters(params,command.info.mandatoryParameters);\n\t\t\t\t\tif(typeof params === \"string\") {\n\t\t\t\t\t\treturn this.callback(params);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nGiven an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\n*/\nCommander.prototype.extractNamedParameters = function(params,mandatoryParameters) {\n\tmandatoryParameters = mandatoryParameters || [];\n\tvar errors = [],\n\t\tparamsByName = Object.create(null);\n\t// Extract the parameters\n\t$tw.utils.each(params,function(param) {\n\t\tvar index = param.indexOf(\"=\");\n\t\tif(index < 1) {\n\t\t\terrors.push(\"malformed named parameter: '\" + param + \"'\");\n\t\t}\n\t\tparamsByName[param.slice(0,index)] = $tw.utils.trim(param.slice(index+1));\n\t});\n\t// Check the mandatory parameters are present\n\t$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {\n\t\tif(!$tw.utils.hop(paramsByName,mandatoryParameter)) {\n\t\t\terrors.push(\"missing mandatory parameter: '\" + mandatoryParameter + \"'\");\n\t\t}\n\t});\n\t// Return any errors\n\tif(errors.length > 0) {\n\t\treturn errors.join(\" and\\n\");\n\t} else {\n\t\treturn paramsByName;\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/commands/build.js": {
"title": "$:/core/modules/commands/build.js",
"text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/clearpassword.js": {
"title": "$:/core/modules/commands/clearpassword.js",
"text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/deletetiddlers.js": {
"title": "$:/core/modules/commands/deletetiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/deletetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to delete tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"deletetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filter\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\twiki.deleteTiddler(title);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/editions.js": {
"title": "$:/core/modules/commands/editions.js",
"text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\" \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/fetch.js": {
"title": "$:/core/modules/commands/fetch.js",
"text": "/*\\\ntitle: $:/core/modules/commands/fetch.js\ntype: application/javascript\nmodule-type: command\n\nCommands to fetch external tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"fetch\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing subcommand and url\";\n\t}\n\tswitch(this.params[0]) {\n\t\tcase \"raw-file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turl: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turl: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"raw-files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t}\n\treturn null;\n};\n\nCommand.prototype.fetchFiles = function(options) {\n\tvar self = this;\n\t// Get the list of URLs\n\tvar urls;\n\tif(options.url) {\n\t\turls = [options.url]\n\t} else if(options.urlFilter) {\n\t\turls = this.commander.wiki.filterTiddlers(options.urlFilter);\n\t} else {\n\t\treturn \"Missing URL\";\n\t}\n\t// Process each URL in turn\n\tvar next = 0;\n\tvar getNextFile = function(err) {\n\t\tif(err) {\n\t\t\treturn options.callback(err);\n\t\t}\n\t\tif(next < urls.length) {\n\t\t\tself.fetchFile(urls[next++],options,getNextFile);\n\t\t} else {\n\t\t\toptions.callback(null);\n\t\t}\n\t};\n\tgetNextFile(null);\n\t// Success\n\treturn null;\n};\n\nCommand.prototype.fetchFile = function(url,options,callback,redirectCount) {\n\tif(redirectCount > 10) {\n\t\treturn callback(\"Error too many redirects retrieving \" + url);\n\t}\n\tvar self = this,\n\t\tlib = url.substr(0,8) === \"https://\" ? require(\"https\") : require(\"http\");\n\tlib.get(url).on(\"response\",function(response) {\n\t var type = (response.headers[\"content-type\"] || \"\").split(\";\")[0],\n\t \tdata = [];\n\t self.commander.write(\"Reading \" + url + \": \");\n\t response.on(\"data\",function(chunk) {\n\t data.push(chunk);\n\t self.commander.write(\".\");\n\t });\n\t response.on(\"end\",function() {\n\t self.commander.write(\"\\n\");\n\t if(response.statusCode === 200) {\n\t\t self.processBody(Buffer.concat(data),type,options,url);\n\t\t callback(null);\n\t } else {\n\t \tif(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n\t \t\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\n\t \t} else {\n\t\t \treturn callback(\"Error \" + response.statusCode + \" retrieving \" + url)\n\t \t}\n\t }\n\t \t});\n\t \tresponse.on(\"error\",function(e) {\n\t\t\tconsole.log(\"Error on GET request: \" + e);\n\t\t\tcallback(e);\n\t \t});\n\t});\n\treturn null;\n};\n\nCommand.prototype.processBody = function(body,type,options,url) {\n\tvar self = this;\n\t// Collect the tiddlers in a wiki\n\tvar incomingWiki = new $tw.Wiki();\n\tif(options.raw) {\n\t\tvar typeInfo = type ? $tw.config.contentTypeInfo[type] : null,\n\t\t\tencoding = typeInfo ? typeInfo.encoding : \"utf8\";\n\t\tincomingWiki.addTiddler(new $tw.Tiddler({\n\t\t\ttitle: url,\n\t\t\ttype: type,\n\t\t\ttext: body.toString(encoding)\n\t\t}));\n\t} else {\n\t\t// Deserialise the file to extract the tiddlers\n\t\tvar tiddlers = this.commander.wiki.deserializeTiddlers(type || \"text/html\",body.toString(\"utf8\"),{});\n\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t});\n\t}\n\t// Filter the tiddlers to select the ones we want\n\tvar filteredTitles = incomingWiki.filterTiddlers(options.importFilter || \"[all[tiddlers]]\");\n\t// Import the selected tiddlers\n\tvar count = 0;\n\tincomingWiki.each(function(tiddler,title) {\n\t\tif(filteredTitles.indexOf(title) !== -1) {\n\t\t\tvar newTiddler;\n\t\t\tif(options.transformFilter) {\n\t\t\t\tvar transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [\"\"])[0];\n\t\t\t\tif(transformedTitle) {\n\t\t\t\t\tself.commander.log(\"Importing \" + title + \" as \" + transformedTitle)\n\t\t\t\t\tnewTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.commander.log(\"Importing \" + title)\n\t\t\t\tnewTiddler = tiddler;\n\t\t\t}\n\t\t\tself.commander.wiki.importTiddler(newTiddler);\n\t\t\tcount++;\n\t\t}\n\t});\n\tself.commander.log(\"Imported \" + count + \" tiddlers\")\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/help.js": {
"title": "$:/core/modules/commands/help.js",
"text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/import.js": {
"title": "$:/core/modules/commands/import.js",
"text": "/*\\\ntitle: $:/core/modules/commands/import.js\ntype: application/javascript\nmodule-type: command\n\nCommand to import tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"import\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 2) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar filename = self.params[0],\n\t\tdeserializer = self.params[1],\n\t\ttitle = self.params[2] || filename,\n\t\tencoding = self.params[3] || \"utf8\",\n\t\ttext = fs.readFileSync(filename,encoding),\n\t\ttiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\n\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t});\n\tthis.commander.log(tiddlers.length + \" tiddler(s) imported\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/init.js": {
"title": "$:/core/modules/commands/init.js",
"text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/listen.js": {
"title": "$:/core/modules/commands/listen.js",
"text": "/*\\\ntitle: $:/core/modules/commands/listen.js\ntype: application/javascript\nmodule-type: command\n\nListen for HTTP requests and serve tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"listen\",\n\tsynchronous: true,\n\tnamedParameterMode: true,\n\tmandatoryParameters: [],\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: self.params\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/load.js": {
"title": "$:/core/modules/commands/load.js",
"text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file or directory\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar tiddlers = $tw.loadTiddlersFromPath(self.params[0]),\n\t\tcount = 0;\n\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\n\t\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\n\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t\t\tcount++;\n\t\t});\n\t});\n\tif(!count && self.params[1] !== \"noerror\") {\n\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t} else {\n\t\tself.callback(null);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/makelibrary.js": {
"title": "$:/core/modules/commands/makelibrary.js",
"text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = $tw.utils.getSubdirectories(folder) || [];\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = $tw.utils.getSubdirectories(folder) || [];\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.pluginsPath,$tw.config.pluginsEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.themesPath,$tw.config.themesEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.languagesPath,$tw.config.languagesEnvVar),collectPlugins);\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers})\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/output.js": {
"title": "$:/core/modules/commands/output.js",
"text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/password.js": {
"title": "$:/core/modules/commands/password.js",
"text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/render.js": {
"title": "$:/core/modules/commands/render.js",
"text": "/*\\\ntitle: $:/core/modules/commands/render.js\ntype: application/javascript\nmodule-type: command\n\nRender individual tiddlers and save the results to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"render\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing tiddler filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]addsuffix[.html]]\",\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvariableList = this.params.slice(4),\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter),\n\t\tvariables = Object.create(null);\n\t\twhile(variableList.length >= 2) {\n\t\t\tvariables[variableList[0]] = variableList[1];\n\t\t\tvariableList = variableList.slice(2);\n\t\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template || title);\n\t\tvar widgetNode = wiki.makeWidget(parser,{variables: $tw.utils.extend({},variables,{currentTiddler: title})}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Rendering \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddler.js": {
"title": "$:/core/modules/commands/rendertiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tname = this.params[4],\n\t\tvalue = this.params[5],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tif(name && value) {\n\t\tvariables[name] = value;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddlers.js": {
"title": "$:/core/modules/commands/rendertiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/save.js": {
"title": "$:/core/modules/commands/save.js",
"text": "/*\\\ntitle: $:/core/modules/commands/save.js\ntype: application/javascript\nmodule-type: command\n\nSaves individual tiddlers in their raw text or binary format to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"save\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]]\",\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Saving \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savelibrarytiddlers.js": {
"title": "$:/core/modules/commands/savelibrarytiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <tiddler-filter> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe tiddler filter specifies the plugins to be included.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\tdoesRequireReload = !!self.commander.wiki.doesPluginInfoRequireReload(pluginTiddlers),\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{\n\t\t\ttext: undefined,\n\t\t\treadme: readmeContent,\n\t\t\t\"requires-reload\": doesRequireReload ? \"yes\" : \"no\",\n\t\t\ticon: iconContent\n\t\t}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddler.js": {
"title": "$:/core/modules/commands/savetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddlers.js": {
"title": "$:/core/modules/commands/savetiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savewikifolder.js": {
"title": "$:/core/modules/commands/savewikifolder.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savewikifolder.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the current wiki as a wiki folder\n\n--savewikifolder <wikifolderpath> [<filter>]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savewikifolder\",\n\tsynchronous: true\n};\n\nvar fs,path;\nif($tw.node) {\n\tfs = require(\"fs\");\n\tpath = require(\"path\");\n}\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing wiki folder path\";\n\t}\n\tvar wikifoldermaker = new WikiFolderMaker(this.params[0],this.params[1],this.commander);\n\treturn wikifoldermaker.save();\n};\n\nfunction WikiFolderMaker(wikiFolderPath,wikiFilter,commander) {\n\tthis.wikiFolderPath = wikiFolderPath;\n\tthis.wikiFilter = wikiFilter || \"[all[tiddlers]]\";\n\tthis.commander = commander;\n\tthis.wiki = commander.wiki;\n\tthis.savedPaths = []; // So that we can detect filename clashes\n}\n\nWikiFolderMaker.prototype.log = function(str) {\n\tif(this.commander.verbose) {\n\t\tconsole.log(str);\n\t}\n};\n\nWikiFolderMaker.prototype.tiddlersToIgnore = [\n\t\"$:/boot/boot.css\",\n\t\"$:/boot/boot.js\",\n\t\"$:/boot/bootprefix.js\",\n\t\"$:/core\",\n\t\"$:/library/sjcl.js\",\n\t\"$:/temp/info-plugin\"\n];\n\n/*\nReturns null if successful, or an error string if there was an error\n*/\nWikiFolderMaker.prototype.save = function() {\n\tvar self = this;\n\t// Check that the output directory doesn't exist\n\tif(fs.existsSync(this.wikiFolderPath) && !$tw.utils.isDirectoryEmpty(this.wikiFolderPath)) {\n\t\treturn \"The unpackwiki command requires that the output wiki folder be empty\";\n\t}\n\t// Get the tiddlers from the source wiki\n\tvar tiddlerTitles = this.wiki.filterTiddlers(this.wikiFilter);\n\t// Initialise a new tiddlwiki.info file\n\tvar newWikiInfo = {};\n\t// Process each incoming tiddler in turn\n\t$tw.utils.each(tiddlerTitles,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tif(self.tiddlersToIgnore.indexOf(title) !== -1) {\n\t\t\t\t// Ignore the core plugin and the ephemeral info plugin\n\t\t\t\tself.log(\"Ignoring tiddler: \" + title);\n\t\t\t} else {\n\t\t\t\tvar type = tiddler.fields.type,\n\t\t\t\t\tpluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif(type === \"application/json\" && pluginType) {\n\t\t\t\t\t// Plugin tiddler\n\t\t\t\t\tvar libraryDetails = self.findPluginInLibrary(title);\n\t\t\t\t\tif(libraryDetails) {\n\t\t\t\t\t\t// A plugin from the core library\n\t\t\t\t\t\tself.log(\"Adding built-in plugin: \" + libraryDetails.name);\n\t\t\t\t\t\tnewWikiInfo[libraryDetails.type] = newWikiInfo[libraryDetails.type] || [];\n\t\t\t\t\t\t$tw.utils.pushTop(newWikiInfo[libraryDetails.type],libraryDetails.name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// A custom plugin\n\t\t\t\t\t\tself.log(\"Processing custom plugin: \" + title);\n\t\t\t\t\t\tself.saveCustomPlugin(tiddler);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Ordinary tiddler\n\t\t\t\t\tself.saveTiddler(\"tiddlers\",tiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Save the tiddlywiki.info file\n\tthis.saveJSONFile(\"tiddlywiki.info\",newWikiInfo);\n\tself.log(\"Writing tiddlywiki.info: \" + JSON.stringify(newWikiInfo,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\n/*\nTest whether the specified tiddler is a plugin in the plugin library\n*/\nWikiFolderMaker.prototype.findPluginInLibrary = function(title) {\n\tvar parts = title.split(\"/\"),\n\t\tpluginPath, type, name;\n\tif(parts[0] === \"$:\") {\n\t\tif(parts[1] === \"languages\" && parts.length === 3) {\n\t\t\tpluginPath = \"languages\" + path.sep + parts[2];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2];\n\t\t} else if(parts[1] === \"plugins\" || parts[1] === \"themes\" && parts.length === 4) {\n\t\t\tpluginPath = parts[1] + path.sep + parts[2] + path.sep + parts[3];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2] + \"/\" + parts[3];\n\t\t}\n\t}\n\tif(pluginPath && type && name) {\n\t\tpluginPath = path.resolve($tw.boot.bootPath,\"..\",pluginPath);\n\t\tif(fs.existsSync(pluginPath)) {\n\t\t\treturn {\n\t\t\t\tpluginPath: pluginPath,\n\t\t\t\ttype: type,\n\t\t\t\tname: name\n\t\t\t};\n\t\t}\n\t}\n\treturn false;\n};\n\nWikiFolderMaker.prototype.saveCustomPlugin = function(pluginTiddler) {\n\tvar self = this,\n\t\tpluginTitle = pluginTiddler.fields.title,\n\t\ttitleParts = pluginTitle.split(\"/\"),\n\t\tdirectory = $tw.utils.generateTiddlerFilepath(titleParts[titleParts.length - 1],{\n\t\t\tdirectory: path.resolve(this.wikiFolderPath,pluginTiddler.fields[\"plugin-type\"] + \"s\")\n\t\t}),\n\t\tpluginInfo = pluginTiddler.getFieldStrings({exclude: [\"text\",\"type\"]});\n\tthis.saveJSONFile(directory + path.sep + \"plugin.info\",pluginInfo);\n\tself.log(\"Writing \" + directory + path.sep + \"plugin.info: \" + JSON.stringify(pluginInfo,null,$tw.config.preferences.jsonSpaces));\n\tvar pluginTiddlers = JSON.parse(pluginTiddler.fields.text).tiddlers; // A hashmap of tiddlers in the plugin\n\t$tw.utils.each(pluginTiddlers,function(tiddler) {\n\t\tself.saveTiddler(directory,new $tw.Tiddler(tiddler));\n\t});\n};\n\nWikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) {\n\tvar title = tiddler.fields.title, fileInfo, pathFilters, extFilters;\n\tif(this.wiki.tiddlerExists(\"$:/config/FileSystemPaths\")) {\n\t\tpathFilters = this.wiki.getTiddlerText(\"$:/config/FileSystemPaths\",\"\").split(\"\\n\");\n\t}\n\tif(this.wiki.tiddlerExists(\"$:/config/FileSystemExtensions\")) {\n\t\textFilters = this.wiki.getTiddlerText(\"$:/config/FileSystemExtensions\",\"\").split(\"\\n\");\n\t}\n\tvar fileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{\n\t\tdirectory: path.resolve(this.wikiFolderPath,directory),\n\t\tpathFilters: pathFilters,\n\t\textFilters: extFilters,\n\t\twiki: this.wiki,\n\t\tfileInfo: {}\n\t});\n\ttry {\n\t\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\n\t} catch (err) {\n\t\tconsole.log(\"SaveWikiFolder: Error saving file '\" + fileInfo.filepath + \"', tiddler: '\" + tiddler.fields.title);\n\t}\n};\n\nWikiFolderMaker.prototype.saveJSONFile = function(filename,json) {\n\tthis.saveTextFile(filename,JSON.stringify(json,null,$tw.config.preferences.jsonSpaces));\n};\n\nWikiFolderMaker.prototype.saveTextFile = function(filename,data) {\n\tthis.saveFile(filename,\"utf8\",data);\n};\n\nWikiFolderMaker.prototype.saveFile = function(filename,encoding,data) {\n\tvar filepath = path.resolve(this.wikiFolderPath,filename);\n\t$tw.utils.createFileDirectories(filepath);\n\tfs.writeFileSync(filepath,data,encoding);\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/server.js": {
"title": "$:/core/modules/commands/server.js",
"text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nDeprecated legacy command for serving tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: {\n\t\t\tport: this.params[0],\n\t\t\thost: this.params[6],\n\t\t\t\"root-tiddler\": this.params[1],\n\t\t\t\"root-render-type\": this.params[2],\n\t\t\t\"root-serve-type\": this.params[3],\n\t\t\tusername: this.params[4],\n\t\t\tpassword: this.params[5],\n\t\t\t\"path-prefix\": this.params[7],\n\t\t\t\"debug-level\": this.params[8]\n\t\t}\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/setfield.js": {
"title": "$:/core/modules/commands/setfield.js",
"text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/unpackplugin.js": {
"title": "$:/core/modules/commands/unpackplugin.js",
"text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/verbose.js": {
"title": "$:/core/modules/commands/verbose.js",
"text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n \" + $tw.boot.logMessages.join(\"\\n \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/version.js": {
"title": "$:/core/modules/commands/version.js",
"text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/config.js": {
"title": "$:/core/modules/config.js",
"text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter: \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,details,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,nav,ol,p,pre,section,summary,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
"type": "application/javascript",
"module-type": "config"
},
"$:/core/modules/deserializers.js": {
"title": "$:/core/modules/deserializers.js",
"text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming,\n\t\tresults = [];\n\ttry {\n\t\tincoming = JSON.parse(text);\n\t} catch(e) {\n\t\tincoming = [{\n\t\t\ttitle: \"JSON error: \" + e,\n\t\t\ttext: \"\"\n\t\t}]\n\t}\n\tif(!$tw.utils.isArray(incoming)) {\n\t\tincoming = [incoming];\n\t}\n\tfor(var t=0; t<incoming.length; t++) {\n\t\tvar incomingFields = incoming[t],\n\t\t\tfields = {};\n\t\tfor(var f in incomingFields) {\n\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t}\n\t\t}\n\t\tresults.push(fields);\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/core/modules/editor/engines/framed.js": {
"title": "$:/core/modules/editor/engines/framed.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.iframeNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\tif(this.widget.editAutoComplete) {\n\t\tthis.domNode.setAttribute(\"autocomplete\",this.widget.editAutoComplete);\n\t}\n\tif(this.widget.isDisabled === \"yes\") {\n\t\tthis.domNode.setAttribute(\"disabled\",true);\n\t}\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"click\",handlerObject: this,handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"},\n\t\t{name: \"focus\",handlerObject: this,handlerMethod: \"handleFocusEvent\"}\n\t]);\n\t// Add drag and drop event listeners if fileDrop is enabled\n\tif(this.widget.isFileDropEnabled) {\n\t\t$tw.utils.addEventListeners(this.domNode,[\n\t\t\t{name: \"dragenter\",handlerObject: this.widget,handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\",handlerObject: this.widget,handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\",handlerObject: this.widget,handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"dragend\",handlerObject: this.widget,handlerMethod: \"handleDragEndEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this.widget,handlerMethod: \"handleDropEvent\"},\n\t\t\t{name: \"paste\", handlerObject: this.widget,handlerMethod: \"handlePasteEvent\"},\n\t\t\t{name: \"click\",handlerObject: this.widget,handlerMethod: \"handleClickEvent\"}\n\t\t]);\n\t}\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.updateDomNodeText(text);\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nUpdate the DomNode with the new text\n*/\nFramedEngine.prototype.updateDomNodeText = function(text) {\n\tthis.domNode.value = text;\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a focus event\n*/\nFramedEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editCancelPopups) {\n\t\t$tw.popup.cancel(0);\n\t}\n};\n\n/*\nHandle a click\n*/\nFramedEngine.prototype.handleClickEvent = function(event) {\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\tif(this.widget.editInputActions) {\n\t\tthis.widget.invokeActionString(this.widget.editInputActions);\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/engines/simple.js": {
"title": "$:/core/modules/editor/engines/simple.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.domNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\tif(this.widget.editAutoComplete) {\n\t\tthis.domNode.setAttribute(\"autocomplete\",this.widget.editAutoComplete);\n\t}\n\tif(this.widget.isDisabled === \"yes\") {\n\t\tthis.domNode.setAttribute(\"disabled\",true);\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode || text === \"\") {\n\t\t\tthis.updateDomNodeText(text);\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nUpdate the DomNode with the new text\n*/\nSimpleEngine.prototype.updateDomNodeText = function(text) {\n\tthis.domNode.value = text;\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\tif(this.widget.editInputActions) {\n\t\tthis.widget.invokeActionString(this.widget.editInputActions);\n\t}\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editCancelPopups) {\n\t\t$tw.popup.cancel(0);\n\t}\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/factory.js": {
"title": "$:/core/modules/editor/factory.js",
"text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tif(tiddler.hasField(this.editField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = this.editDefault || \"\";\n\t\t\t\t}\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\t\tthis.editCancelPopups = this.getAttribute(\"cancelPopups\",\"\") === \"yes\";\n\t\tthis.editInputActions = this.getAttribute(\"inputActions\");\n\t\tthis.editRefreshTitle = this.getAttribute(\"refreshTitle\");\n\t\tthis.editAutoComplete = this.getAttribute(\"autocomplete\");\n\t\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t\tthis.isFileDropEnabled = this.getAttribute(\"fileDrop\",\"no\") === \"yes\";\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag) || \"input\";\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0) && (!this.document.isTiddlyWikiFakeDom);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE] || changedAttributes.disabled || changedAttributes.fileDrop) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if (changedTiddlers[this.editRefreshTitle]) {\n\t\t\tthis.engine.updateDomNodeText(this.getEditInfo().value);\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.cloneEvent(event,[\"keyCode\",\"which\",\"metaKey\",\"ctrlKey\",\"altKey\",\"shiftKey\"]);\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\tEditTextWidget.prototype.cloneEvent = function(event,propertiesToCopy) {\n\t\tvar propertiesToCopy = propertiesToCopy || [],\n\t\t\tnewEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(event.type, true, true);\n\t\t}\n\t\t$tw.utils.each(propertiesToCopy,function(prop){\n\t\t\tnewEvent[prop] = event[prop];\n\t\t});\n\t\treturn newEvent;\n\t};\n\n\tEditTextWidget.prototype.dispatchDOMEvent = function(newEvent) {\n\t\tvar dispatchNode = this.engine.iframeNode || this.engine.parentNode;\n\t\treturn dispatchNode.dispatchEvent(newEvent);\n\t};\n\n\t/*\n\tPropogate drag and drop events with File data to our container for the dropzone widgets benefit.\n\tIf there are no Files, let the browser handle it.\n\t*/\n\tEditTextWidget.prototype.handleDropEvent = function(event) {\n\t\tif(event.dataTransfer.files.length) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tthis.dispatchDOMEvent(this.cloneEvent(event,[\"dataTransfer\"]));\n\t\t} \n\t};\n\n\tEditTextWidget.prototype.handlePasteEvent = function(event) {\n\t\tif(event.clipboardData.files.length) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tthis.dispatchDOMEvent(this.cloneEvent(event,[\"clipboardData\"]));\n\t\t}\n\t};\n\n\tEditTextWidget.prototype.handleDragEnterEvent = function(event) {\n\t\tif($tw.utils.dragEventContainsFiles(event)) {\n\t\t\t// Ignore excessive events fired by FF when entering and leaving text nodes in a text area.\n\t\t\tif( event.relatedTarget && (event.relatedTarget.nodeType === 3 || event.target === event.relatedTarget)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\treturn this.dispatchDOMEvent(this.cloneEvent(event,[\"dataTransfer\"]));\n\t\t}\n\t\treturn true;\n\t};\n\n\tEditTextWidget.prototype.handleDragOverEvent = function(event) {\n\t\tif($tw.utils.dragEventContainsFiles(event)) {\n\t\t\t// Call preventDefault() in browsers that default to not allowing drop events on textarea\n\t\t\tif($tw.browser.isFirefox || $tw.browser.isIE) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\tevent.dataTransfer.dropEffect = \"copy\";\n\t\t\treturn this.dispatchDOMEvent(this.cloneEvent(event,[\"dataTransfer\"]));\n\t\t}\n\t\treturn true;\n\t};\n\n\tEditTextWidget.prototype.handleDragLeaveEvent = function(event) {\n\t\t// Ignore excessive events fired by FF when entering and leaving text nodes in a text area.\n\t\tif(event.relatedTarget && ((event.relatedTarget.nodeType === 3) || (event.target === event.relatedTarget))) {\n\t\t\treturn true;\n\t\t}\n\t\tevent.preventDefault();\n\t\tthis.dispatchDOMEvent(this.cloneEvent(event,[\"dataTransfer\"]));\n\t};\n\n\tEditTextWidget.prototype.handleDragEndEvent = function(event) {\n\t\tthis.dispatchDOMEvent(this.cloneEvent(event));\n\t};\n\n\tEditTextWidget.prototype.handleClickEvent = function(event) {\n\t\treturn !this.dispatchDOMEvent(this.cloneEvent(event));\n\t};\n\n\treturn EditTextWidget;\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/operations/bitmap/clear.js": {
"title": "$:/core/modules/editor/operations/bitmap/clear.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/resize.js": {
"title": "$:/core/modules/editor/operations/bitmap/resize.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/rotate-left.js": {
"title": "$:/core/modules/editor/operations/bitmap/rotate-left.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/rotate-left.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to rotate the image left by 90 degrees\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"rotate-left\"] = function(event) {\n\t// Rotate the canvas left by 90 degrees\n\tthis.rotateCanvasLeft();\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/text/excise.js": {
"title": "$:/core/modules/editor/operations/text/excise.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ? [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/insert-text.js": {
"title": "$:/core/modules/editor/operations/text/insert-text.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/insert-text.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation insert text at the caret position. If there is a selection it is replaced.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"insert-text\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/make-link.js": {
"title": "$:/core/modules/editor/operations/text/make-link.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/prefix-lines.js": {
"title": "$:/core/modules/editor/operations/text/prefix-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\tvar targetCount = parseInt(event.paramObject.count + \"\",10);\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,targetCount);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== targetCount) {\n\t\t\t// Apply the prefix\n\t\t\tline = prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-all.js": {
"title": "$:/core/modules/editor/operations/text/replace-all.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-selection.js": {
"title": "$:/core/modules/editor/operations/text/replace-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/save-selection.js": {
"title": "$:/core/modules/editor/operations/text/save-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/save-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to save the current selection in a specified tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"save-selection\"] = function(event,operation) {\n\tvar tiddler = event.paramObject.tiddler,\n\t\tfield = event.paramObject.field || \"text\";\n\tif(tiddler && field) {\n\t\tthis.wiki.setText(tiddler,field,null,operation.text.substring(operation.selStart,operation.selEnd));\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-lines.js": {
"title": "$:/core/modules/editor/operations/text/wrap-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-selection.js": {
"title": "$:/core/modules/editor/operations/text/wrap-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix\n\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\toperation.replacement = \"\";\n\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/filterrunprefixes/all.js": {
"title": "$:/core/modules/filterrunprefixes/all.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/all.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nUnion of sets without de-duplication.\nEquivalent to = filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.all = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.push.apply(results, operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/and.js": {
"title": "$:/core/modules/filterrunprefixes/and.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/and.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nIntersection of sets.\nEquivalent to + filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.and = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\tsource = options.wiki.makeTiddlerIterator(results.toArray());\n\t\tresults.clear();\n\t\tresults.pushTop(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/else.js": {
"title": "$:/core/modules/filterrunprefixes/else.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/else.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nEquivalent to ~ filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.else = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tif(results.length === 0) {\n\t\t\t// Main result so far is empty\n\t\t\tresults.pushTop(operationSubFunction(source,widget));\n\t\t}\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/except.js": {
"title": "$:/core/modules/filterrunprefixes/except.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/except.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nDifference of sets.\nEquivalent to - filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.except = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.remove(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/filter.js": {
"title": "$:/core/modules/filterrunprefixes/filter.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/filter.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.filter = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\tif(results.length > 0) {\n\t\t\tvar resultsToRemove = [];\n\t\t\tresults.each(function(title) {\n\t\t\t\tvar filtered = operationSubFunction(options.wiki.makeTiddlerIterator([title]),{\n\t\t\t\t\tgetVariable: function(name) {\n\t\t\t\t\t\tswitch(name) {\n\t\t\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\t\t\tcase \"..currentTiddler\":\n\t\t\t\t\t\t\t\treturn widget.getVariable(\"currentTiddler\");\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn widget.getVariable(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(filtered.length === 0) {\n\t\t\t\t\tresultsToRemove.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t\tresults.remove(resultsToRemove);\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/intersection.js": {
"title": "$:/core/modules/filterrunprefixes/intersection.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/intersection.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.intersection = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tif(results.length !== 0) {\n\t\t\tvar secondRunResults = operationSubFunction(source,widget);\n\t\t\tvar firstRunResults = results.toArray();\n\t\t\tresults.clear();\n\t\t\t$tw.utils.each(firstRunResults,function(title) {\n\t\t\t\tif(secondRunResults.indexOf(title) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/or.js": {
"title": "$:/core/modules/filterrunprefixes/or.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/or.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nEquivalent to a filter run with no prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.or = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.pushTop(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/reduce.js": {
"title": "$:/core/modules/filterrunprefixes/reduce.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/reduce.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.reduce = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\tif(results.length > 0) {\n\t\t\tvar accumulator = \"\";\n\t\t\tvar index = 0;\n\t\t\tresults.each(function(title) {\n\t\t\t\tvar list = operationSubFunction(options.wiki.makeTiddlerIterator([title]),{\n\t\t\t\t\tgetVariable: function(name) {\n\t\t\t\t\t\tswitch(name) {\n\t\t\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\t\t\tcase \"..currentTiddler\":\n\t\t\t\t\t\t\t\treturn widget.getVariable(\"currentTiddler\");\n\t\t\t\t\t\t\tcase \"accumulator\":\n\t\t\t\t\t\t\t\treturn \"\" + accumulator;\n\t\t\t\t\t\t\tcase \"index\":\n\t\t\t\t\t\t\t\treturn \"\" + index;\n\t\t\t\t\t\t\tcase \"revIndex\":\n\t\t\t\t\t\t\t\treturn \"\" + (results.length - 1 - index);\n\t\t\t\t\t\t\tcase \"length\":\n\t\t\t\t\t\t\t\treturn \"\" + results.length;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn widget.getVariable(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(list.length > 0) {\n\t\t\t\t\taccumulator = \"\" + list[0];\n\t\t\t\t}\n\t\t\t\t++index;\n\t\t\t});\n\t\t\tresults.clear();\n\t\t\tresults.push(accumulator);\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/sort.js": {
"title": "$:/core/modules/filterrunprefixes/sort.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/sort.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.sort = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\tif(results.length > 0) {\n\t\t\tvar suffixes = options.suffixes,\n\t\t\t\tsortType = (suffixes[0] && suffixes[0][0]) ? suffixes[0][0] : \"string\",\n\t\t\t\tinvert = suffixes[1] ? (suffixes[1].indexOf(\"reverse\") !== -1) : false,\n\t\t\t\tisCaseSensitive = suffixes[1] ? (suffixes[1].indexOf(\"casesensitive\") !== -1) : false,\n\t\t\t\tinputTitles = results.toArray(),\n\t\t\t\tsortKeys = [],\n\t\t\t\tindexes = new Array(inputTitles.length),\n\t\t\t\tcompareFn;\n\t\t\tresults.each(function(title) {\n\t\t\t\tvar key = operationSubFunction(options.wiki.makeTiddlerIterator([title]),{\n\t\t\t\t\tgetVariable: function(name) {\n\t\t\t\t\t\tswitch(name) {\n\t\t\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\t\t\tcase \"..currentTiddler\":\n\t\t\t\t\t\t\t\treturn widget.getVariable(\"currentTiddler\");\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn widget.getVariable(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tsortKeys.push(key[0] || \"\");\n\t\t\t});\n\t\t\tresults.clear();\n\t\t\t// Prepare an array of indexes to sort\n\t\t\tfor(var t=0; t<inputTitles.length; t++) {\n\t\t\t\tindexes[t] = t;\n\t\t\t}\n\t\t\t// Sort the indexes\n\t\t\tcompareFn = $tw.utils.makeCompareFunction(sortType,{defaultType: \"string\", invert:invert, isCaseSensitive:isCaseSensitive});\n\t\t\tindexes = indexes.sort(function(a,b) {\n\t\t\t\t\treturn compareFn(sortKeys[a],sortKeys[b]);\n\t\t\t});\n\t\t\t// Add to results in correct order\n\t\t\t$tw.utils.each(indexes,function(index) {\n\t\t\t\tresults.push(inputTitles[index]);\n\t\t\t});\n\t\t}\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filters/addprefix.js": {
"title": "$:/core/modules/filters/addprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/addsuffix.js": {
"title": "$:/core/modules/filters/addsuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/after.js": {
"title": "$:/core/modules/filters/after.js",
"text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/all/current.js": {
"title": "$:/core/modules/filters/all/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/missing.js": {
"title": "$:/core/modules/filters/all/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/orphans.js": {
"title": "$:/core/modules/filters/all/orphans.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/shadows.js": {
"title": "$:/core/modules/filters/all/shadows.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tags.js": {
"title": "$:/core/modules/filters/all/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tags.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tags]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,prefix,options) {\n\treturn Object.keys(options.wiki.getTagMap());\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tiddlers.js": {
"title": "$:/core/modules/filters/all/tiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all.js": {
"title": "$:/core/modules/filters/all.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = new $tw.utils.LinkedList(),\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\tresults.pushTop(subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results.toArray();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/backlinks.js": {
"title": "$:/core/modules/filters/backlinks.js",
"text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/before.js": {
"title": "$:/core/modules/filters/before.js",
"text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/commands.js": {
"title": "$:/core/modules/filters/commands.js",
"text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/compare.js": {
"title": "$:/core/modules/filters/compare.js",
"text": "/*\\\ntitle: $:/core/modules/filters/compare.js\ntype: application/javascript\nmodule-type: filteroperator\n\nGeneral purpose comparison operator\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.compare = function(source,operator,options) {\n\tvar suffixes = operator.suffixes || [],\n\t\ttype = (suffixes[0] || [])[0],\n\t\tmode = (suffixes[1] || [])[0],\n\t\ttypeFn = $tw.utils.makeCompareFunction(type,{defaultType: \"number\"}),\n\t\tmodeFn = modes[mode] || modes.eq,\n\t\tinvert = operator.prefix === \"!\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tif(modeFn(typeFn(title,operator.operand)) !== invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\nvar modes = {\n\t\"eq\": function(value) {return value === 0;},\n\t\"ne\": function(value) {return value !== 0;},\n\t\"gteq\": function(value) {return value >= 0;},\n\t\"gt\": function(value) {return value > 0;},\n\t\"lteq\": function(value) {return value <= 0;},\n\t\"lt\": function(value) {return value < 0;}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/contains.js": {
"title": "$:/core/modules/filters/contains.js",
"text": "/*\\\ntitle: $:/core/modules/filters/contains.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for finding values in array fields\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.contains = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"list\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/count.js": {
"title": "$:/core/modules/filters/count.js",
"text": "/*\\\ntitle: $:/core/modules/filters/count.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the number of entries in the current list.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.count = function(source,operator,options) {\n\tvar count = 0;\n\tsource(function(tiddler,title) {\n\t\tcount++;\n\t});\n\treturn [count + \"\"];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/days.js": {
"title": "$:/core/modules/filters/days.js",
"text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/deserializers.js": {
"title": "$:/core/modules/filters/deserializers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/deserializers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the deserializers in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.deserializers = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.Wiki.tiddlerDeserializerModules,function(deserializer,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/duplicateslugs.js": {
"title": "$:/core/modules/filters/duplicateslugs.js",
"text": "/*\\\ntitle: $:/core/modules/filters/duplicateslugs.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter function for [duplicateslugs[]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.duplicateslugs = function(source,operator,options) {\n\tvar slugs = Object.create(null), // Hashmap by slug of title, replaced with \"true\" if the duplicate title has already been output\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tvar slug = options.wiki.slugify(title);\n\t\tif(slug in slugs) {\n\t\t\tif(slugs[slug] !== true) {\n\t\t\t\tresults.push(slugs[slug]);\n\t\t\t\tslugs[slug] = true;\n\t\t\t}\n\t\t\tresults.push(title);\n\t\t} else {\n\t\t\tslugs[slug] = title;\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/each.js": {
"title": "$:/core/modules/filters/each.js",
"text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\tvalue,values = {},\n\tfield = operator.operand || \"title\";\n\tif(operator.suffix === \"value\" && field === \"title\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(values,title)) {\n\t\t\t\tvalues[title] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else if(operator.suffix !== \"list-item\") {\n\t\tif(field === \"title\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && !$tw.utils.hop(values,title)) {\n\t\t\t\t\tvalues[title] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvalue = tiddler.getFieldString(field);\n\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/eachday.js": {
"title": "$:/core/modules/filters/eachday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editiondescription.js": {
"title": "$:/core/modules/filters/editiondescription.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [];\n\tif($tw.node) {\n\t\tvar editionInfo = $tw.utils.getEditionInfo();\n\t\tif(editionInfo) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\t\tresults.push(editionInfo[title].description || \"\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editions.js": {
"title": "$:/core/modules/filters/editions.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [];\n\tif($tw.node) {\n\t\tvar editionInfo = $tw.utils.getEditionInfo();\n\t\tif(editionInfo) {\n\t\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\t\tresults.push(name);\n\t\t\t});\n\t\t}\n\t\tresults.sort();\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/else.js": {
"title": "$:/core/modules/filters/else.js",
"text": "/*\\\ntitle: $:/core/modules/filters/else.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing an empty input list with a constant, passing a non-empty input list straight through\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.else = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tif(results.length === 0) {\n\t\treturn [operator.operand];\n\t} else {\n\t\treturn results;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/decodeuricomponent.js": {
"title": "$:/core/modules/filters/decodeuricomponent.js",
"text": "/*\\\ntitle: $:/core/modules/filters/decodeuricomponent.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for applying decodeURIComponent() to each item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter functions\n*/\n\nexports.decodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURIComponent(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURIComponent(title));\n\t});\n\treturn results;\n};\n\nexports.decodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURI(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURI(title));\n\t});\n\treturn results;\n};\n\nexports.decodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlDecode(title));\n\t});\n\treturn results;\n};\n\nexports.encodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlEncode(title));\n\t});\n\treturn results;\n};\n\nexports.stringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.stringify(title,(operator.suffix === \"rawunicode\")));\n\t});\n\treturn results;\n};\n\nexports.jsonstringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.jsonStringify(title,(operator.suffix === \"rawunicode\")));\n\t});\n\treturn results;\n};\n\nexports.escaperegexp = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.escapeRegExp(title));\n\t});\n\treturn results;\n};\n\nexports.escapecss = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t// escape any character with a special meaning in CSS using CSS.escape()\n\t\tresults.push($tw.utils.escapeCSS(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/enlist.js": {
"title": "$:/core/modules/filters/enlist.js",
"text": "/*\\\ntitle: $:/core/modules/filters/enlist.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand parsed as a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.enlist = function(source,operator,options) {\n\tvar allowDuplicates = false;\n\tswitch(operator.suffix) {\n\t\tcase \"raw\":\n\t\t\tallowDuplicates = true;\n\t\t\tbreak;\n\t\tcase \"dedupe\":\n\t\t\tallowDuplicates = false;\n\t\t\tbreak;\n\t}\n\tvar list = $tw.utils.parseStringArray(operator.operand,allowDuplicates);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/field.js": {
"title": "$:/core/modules/filters/field.js",
"text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],indexedResults,\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif(source.byField && operator.operand) {\n\t\t\t\tindexedResults = source.byField(fieldname,operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults\n\t\t\t\t}\n\t\t\t}\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/fields.js": {
"title": "$:/core/modules/filters/fields.js",
"text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName,\n\t\tsuffixes = (operator.suffixes || [])[0] || [],\n\t\toperand = $tw.utils.parseStringArray(operator.operand);\n\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(suffixes.indexOf(\"include\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? $tw.utils.pushTop(results,fieldName) : \"\";\n\t\t\t\t}\n\t\t\t} else if (suffixes.indexOf(\"exclude\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? \"\" : $tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else if\n\t\t\telse {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else\n\t\t} // if (tiddler)\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/filter.js": {
"title": "$:/core/modules/filters/filter.js",
"text": "/*\\\ntitle: $:/core/modules/filters/filter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning those input titles that pass a subfilter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.filter = function(source,operator,options) {\n\tvar filterFn = options.wiki.compileFilter(operator.operand),\n\t\tresults = [],\n\t\ttarget = operator.prefix !== \"!\";\n\tsource(function(tiddler,title) {\n\t\tvar list = filterFn.call(options.wiki,options.wiki.makeTiddlerIterator([title]),{\n\t\t\t\tgetVariable: function(name) {\n\t\t\t\t\tswitch(name) {\n\t\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\t\tcase \"..currentTiddler\":\n\t\t\t\t\t\t\treturn options.widget.getVariable(\"currentTiddler\");\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn options.widget.getVariable(name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\tif((list.length > 0) === target) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/format/date.js": {
"title": "$:/core/modules/filters/format/date.js",
"text": "/*\\\ntitle: $:/core/modules/filters/format/date.js\ntype: application/javascript\nmodule-type: formatfilteroperator\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.date = function(source,operand,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = $tw.utils.parseDate(title);\n\t\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\t\tresults.push($tw.utils.formatDateString(value,operand || \"YYYY MM DD 0hh:0mm\"));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();",
"type": "application/javascript",
"module-type": "formatfilteroperator"
},
"$:/core/modules/filters/format/relativedate.js": {
"title": "$:/core/modules/filters/format/relativedate.js",
"text": "/*\\\ntitle: $:/core/modules/filters/format/relativedate.js\ntype: application/javascript\nmodule-type: formatfilteroperator\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.relativedate = function(source,operand,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = $tw.utils.parseDate(title);\n\t\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\t\tresults.push($tw.utils.getRelativeDate((new Date()) - (new Date(value))).description);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();",
"type": "application/javascript",
"module-type": "formatfilteroperator"
},
"$:/core/modules/filters/format/titlelist.js": {
"title": "$:/core/modules/filters/format/titlelist.js",
"text": "/*\\\ntitle: $:/core/modules/filters/format/titlelist.js\ntype: application/javascript\nmodule-type: formatfilteroperator\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.titlelist = function(source,operand,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title && title.length) {\n\t\t\tresults.push($tw.utils.stringifyList([title]));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "formatfilteroperator"
},
"$:/core/modules/filters/format.js": {
"title": "$:/core/modules/filters/format.js",
"text": "/*\\\ntitle: $:/core/modules/filters/format.js\ntype: application/javascript\nmodule-type: filteroperator\nFilter operator for formatting strings\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar formatFilterOperators;\n\nfunction getFormatFilterOperators() {\n\tif(!formatFilterOperators) {\n\t\tformatFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"formatfilteroperator\",formatFilterOperators);\n\t}\n\treturn formatFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.format = function(source,operator,options) {\n\t// Dispatch to the correct formatfilteroperator\n\tvar formatFilterOperators = getFormatFilterOperators();\n\tif(operator.suffix) {\n\t\tvar formatFilterOperator = formatFilterOperators[operator.suffix];\n\t\tif(formatFilterOperator) {\n\t\t\treturn formatFilterOperator(source,operator.operand,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/FormatFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all unchanged if the suffix is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/get.js": {
"title": "$:/core/modules/filters/get.js",
"text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/getindex.js": {
"title": "$:/core/modules/filters/getindex.js",
"text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/getvariable.js": {
"title": "$:/core/modules/filters/getvariable.js",
"text": "/*\\\ntitle: $:/core/modules/filters/getvariable.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing input values by the value of the variable with the same name, or blank if the variable is missing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getvariable = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.widget.getVariable(title) || \"\");\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/has.js": {
"title": "$:/core/modules/filters/has.js",
"text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field or index\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [],\n\t\tinvert = operator.prefix === \"!\";\n\n\tif(operator.suffix === \"field\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse if(operator.suffix === \"index\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(options.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(options.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,operator.operand) || (tiddler.fields[operator.operand].length === 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && (tiddler.fields[operator.operand].length !== 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/haschanged.js": {
"title": "$:/core/modules/filters/haschanged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/indexes.js": {
"title": "$:/core/modules/filters/indexes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/insertbefore.js": {
"title": "$:/core/modules/filters/insertbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/insertbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nInsert an item before another item in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.insertbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar target = options.widget && options.widget.getVariable(operator.suffix || \"currentTiddler\");\n\tif(target !== operator.operand) {\n\t\t// Remove the entry from the list if it is present\n\t\tvar pos = results.indexOf(operator.operand);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,1);\n\t\t}\n\t\t// Insert the entry before the target marker\n\t\tpos = results.indexOf(target);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,0,operator.operand);\n\t\t} else {\n\t\t\tresults.push(operator.operand);\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/is/binary.js": {
"title": "$:/core/modules/filters/is/binary.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/binary.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[binary]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.binary = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/blank.js": {
"title": "$:/core/modules/filters/is/blank.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/blank.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[blank]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.blank = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/current.js": {
"title": "$:/core/modules/filters/is/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/draft.js": {
"title": "$:/core/modules/filters/is/draft.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/draft.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[draft]] analagous to [has[draft.of]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.draft = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,\"draft.of\")) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,\"draft.of\") && (tiddler.fields[\"draft.of\"].length !== 0)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/image.js": {
"title": "$:/core/modules/filters/is/image.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/missing.js": {
"title": "$:/core/modules/filters/is/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/orphan.js": {
"title": "$:/core/modules/filters/is/orphan.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/shadow.js": {
"title": "$:/core/modules/filters/is/shadow.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/system.js": {
"title": "$:/core/modules/filters/is/system.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tag.js": {
"title": "$:/core/modules/filters/is/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tiddler.js": {
"title": "$:/core/modules/filters/is/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/variable.js": {
"title": "$:/core/modules/filters/is/variable.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/variable.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[variable]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variable = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!(title in options.widget.variables)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title in options.widget.variables) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is.js": {
"title": "$:/core/modules/filters/is.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tif(operator.operand) {\n\t\tvar isFilterOperator = isFilterOperators[operator.operand];\n\t\tif(isFilterOperator) {\n\t\t\treturn isFilterOperator(source,operator.prefix,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/IsFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all tiddlers if the operand is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/limit.js": {
"title": "$:/core/modules/filters/limit.js",
"text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/links.js": {
"title": "$:/core/modules/filters/links.js",
"text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = new $tw.utils.LinkedList();\n\tsource(function(tiddler,title) {\n\t\tresults.pushTop(options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results.toArray();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/list.js": {
"title": "$:/core/modules/filters/list.js",
"text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listed.js": {
"title": "$:/core/modules/filters/listed.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listops.js": {
"title": "$:/core/modules/filters/listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.order = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.operand.toLowerCase() === \"reverse\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.unshift(title);\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/lookup.js": {
"title": "$:/core/modules/filters/lookup.js",
"text": "/*\\\ntitle: $:/core/modules/filters/lookup.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that looks up values via a title prefix\n\n[lookup:<field>[<prefix>]]\n\nPrepends the prefix to the selected items and returns the specified field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.lookup = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.getTiddlerText(operator.operand + title) || operator.suffix || '');\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/match.js": {
"title": "$:/core/modules/filters/match.js",
"text": "/*\\\ntitle: $:/core/modules/filters/match.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title matches a string\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.match = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = (operator.suffixes || [])[0] || [];\n\tif(suffixes.indexOf(\"caseinsensitive\") !== -1) {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() !== (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() === (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title !== operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title === operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/math.js": {
"title": "$:/core/modules/filters/math.js",
"text": "/*\\\ntitle: $:/core/modules/filters/math.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for math. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\nNote that strings are converted to numbers automatically. Trailing non-digits are ignored.\n\n* \"\" converts to 0\n* \"12kk\" converts to 12\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.negate = makeNumericBinaryOperator(\n\tfunction(a) {return -a}\n);\n\nexports.abs = makeNumericBinaryOperator(\n\tfunction(a) {return Math.abs(a)}\n);\n\nexports.ceil = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(a)}\n);\n\nexports.floor = makeNumericBinaryOperator(\n\tfunction(a) {return Math.floor(a)}\n);\n\nexports.round = makeNumericBinaryOperator(\n\tfunction(a) {return Math.round(a)}\n);\n\nexports.trunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.trunc(a)}\n);\n\nexports.untrunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(Math.abs(a)) * Math.sign(a)}\n);\n\nexports.sign = makeNumericBinaryOperator(\n\tfunction(a) {return Math.sign(a)}\n);\n\nexports.add = makeNumericBinaryOperator(\n\tfunction(a,b) {return a + b;}\n);\n\nexports.subtract = makeNumericBinaryOperator(\n\tfunction(a,b) {return a - b;}\n);\n\nexports.multiply = makeNumericBinaryOperator(\n\tfunction(a,b) {return a * b;}\n);\n\nexports.divide = makeNumericBinaryOperator(\n\tfunction(a,b) {return a / b;}\n);\n\nexports.remainder = makeNumericBinaryOperator(\n\tfunction(a,b) {return a % b;}\n);\n\nexports.max = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.max(a,b);}\n);\n\nexports.min = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.min(a,b);}\n);\n\nexports.fixed = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toFixed.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.precision = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toPrecision.call(a,Math.min(Math.max(b,1),100));}\n);\n\nexports.exponential = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toExponential.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.power = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.pow(a,b);}\n);\n\nexports.log = makeNumericBinaryOperator(\n\tfunction(a,b) {\n\t\tif(b) {\n\t\t\treturn Math.log(a)/Math.log(b);\n\t\t} else {\n\t\t\treturn Math.log(a);\n\t\t}\n\t}\n);\n\nexports.sum = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0 // Initial value\n);\n\nexports.product = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator * value},\n\t1 // Initial value\n);\n\nexports.maxall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.max(accumulator,value)},\n\t-Infinity // Initial value\n);\n\nexports.minall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.min(accumulator,value)},\n\tInfinity // Initial value\n);\n\nexports.median = makeNumericArrayOperator(\n\tfunction(values) {\n\t\tvar len = values.length, median;\n\t\tvalues.sort();\n\t\tif(len % 2) { \n\t\t\t// Odd, return the middle number\n\t\t\tmedian = values[(len - 1) / 2];\n\t\t} else {\n\t\t\t// Even, return average of two middle numbers\n\t\t\tmedian = (values[len / 2 - 1] + values[len / 2]) / 2;\n\t\t}\n\t\treturn [median];\n\t}\n);\n\nexports.average = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0, // Initial value\n\tfunction(finalValue,numberOfValues) {\n\t\treturn finalValue/numberOfValues;\n\t}\n);\n\nexports.variance = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0,\n\tfunction(finalValue,numberOfValues,originalValues) {\n\t\treturn getVarianceFromArray(originalValues,finalValue/numberOfValues);\n\t}\n);\n\nexports[\"standard-deviation\"] = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0,\n\tfunction(finalValue,numberOfValues,originalValues) {\n\t\tvar variance = getVarianceFromArray(originalValues,finalValue/numberOfValues);\n\t\treturn Math.sqrt(variance);\n\t}\n);\n\n//Calculate the variance of a population of numbers in an array given its mean\nfunction getVarianceFromArray(values,mean) {\n\tvar deviationTotal = values.reduce(function(accumulator,value) {\n\t\treturn accumulator + Math.pow(value - mean, 2);\n\t},0);\n\treturn deviationTotal/values.length;\n};\n\nfunction makeNumericBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [],\n\t\t\tnumOperand = $tw.utils.parseNumber(operator.operand);\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push($tw.utils.stringifyNumber(fnCalc($tw.utils.parseNumber(title),numOperand)));\n\t\t});\n\t\treturn result;\n\t};\n};\n\nfunction makeNumericReducingOperator(fnCalc,initialValue,fnFinal) {\n\tinitialValue = initialValue || 0;\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push($tw.utils.parseNumber(title));\n\t\t});\n\t\tvar value = result.reduce(function(accumulator,currentValue) {\n\t\t\t\treturn fnCalc(accumulator,currentValue);\n\t\t\t},initialValue);\n\t\tif(fnFinal) {\n\t\t\tvalue = fnFinal(value,result.length,result);\n\t\t}\n\t\treturn [$tw.utils.stringifyNumber(value)];\n\t};\n};\n\nfunction makeNumericArrayOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push($tw.utils.parseNumber(title));\n\t\t});\n\t\tresults = fnCalc(results);\n\t\t$tw.utils.each(results,function(value,index) {\n\t\t\tresults[index] = $tw.utils.stringifyNumber(value);\n\t\t});\n\t\treturn results;\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/minlength.js": {
"title": "$:/core/modules/filters/minlength.js",
"text": "/*\\\ntitle: $:/core/modules/filters/minlength.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for filtering out titles that don't meet the minimum length in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.minlength = function(source,operator,options) {\n\tvar results = [],\n\t\tminLength = parseInt(operator.operand || \"\",10) || 0;\n\tsource(function(tiddler,title) {\n\t\tif(title.length >= minLength) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/modules.js": {
"title": "$:/core/modules/filters/modules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/moduletypes.js": {
"title": "$:/core/modules/filters/moduletypes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/next.js": {
"title": "$:/core/modules/filters/next.js",
"text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/plugintiddlers.js": {
"title": "$:/core/modules/filters/plugintiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/prefix.js": {
"title": "$:/core/modules/filters/prefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/previous.js": {
"title": "$:/core/modules/filters/previous.js",
"text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/range.js": {
"title": "$:/core/modules/filters/range.js",
"text": "/*\\\ntitle: $:/core/modules/filters/range.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for generating a numeric range.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.range = function(source,operator,options) {\n\tvar results = [];\n\t// Split the operand into numbers delimited by these symbols\n\tvar parts = operator.operand.split(/[,:;]/g),\n\t\tbeg, end, inc, i, fixed = 0;\n\tfor (i=0; i<parts.length; i++) {\n\t\t// Validate real number\n\t\tif(!/^\\s*[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))\\s*$/.test(parts[i])) {\n\t\t\treturn [\"range: bad number \\\"\" + parts[i] + \"\\\"\"];\n\t\t}\n\t\t// Count digits; the most precise number determines decimal places in output.\n\t\tvar frac = /\\.\\d+/.exec(parts[i]);\n\t\tif(frac) {\n\t\t\tfixed = Math.max(fixed,frac[0].length-1);\n\t\t}\n\t\tparts[i] = parseFloat(parts[i]);\n\t}\n\tswitch(parts.length) {\n\t\tcase 1:\n\t\t\tend = parts[0];\n\t\t\tif (end >= 1) {\n\t\t\t\tbeg = 1;\n\t\t\t}\n\t\t\telse if (end <= -1) {\n\t\t\t\tbeg = -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = Math.abs(parts[2]);\n\t\t\tbreak;\n\t}\n\tif(inc === 0) {\n\t\treturn [\"range: increment 0 causes infinite loop\"];\n\t}\n\t// May need to count backwards\n\tvar direction = ((end < beg) ? -1 : 1);\n\tinc *= direction;\n\t// Estimate number of resulting elements\n\tif((end - beg) / inc > 10000) {\n\t\treturn [\"range: too many steps (over 10K)\"];\n\t}\n\t// Avoid rounding error on last step\n\tend += direction * 0.5 * Math.pow(0.1,fixed);\n\tvar safety = 10010;\n\t// Enumerate the range\n\tif (end<beg) {\n\t\tfor(i=beg; i>end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor(i=beg; i<end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif(safety<0) {\n\t\treturn [\"range: unexpectedly large output\"];\n\t}\n\t// Reverse?\n\tif(operator.prefix === \"!\") {\n\t\tresults.reverse();\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/reduce.js": {
"title": "$:/core/modules/filters/reduce.js",
"text": "/*\\\ntitle: $:/core/modules/filters/reduce.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator evaluates a subfilter for each item, making the running total available in the variable `accumulator`, and the current index available in the variable `index`\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.reduce = function(source,operator,options) {\n\t// Accumulate the list\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Run the filter over each item\n\tvar filterFn = options.wiki.compileFilter(operator.operand),\n\t\taccumulator = operator.operands[1] || \"\";\n\tfor(var index=0; index<results.length; index++) {\n\t\tvar title = results[index],\n\t\t\tlist = filterFn.call(options.wiki,options.wiki.makeTiddlerIterator([title]),{\n\t\t\t\tgetVariable: function(name) {\n\t\t\t\t\tswitch(name) {\n\t\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\t\tcase \"..currentTiddler\":\n\t\t\t\t\t\t\treturn options.widget.getVariable(\"currentTiddler\");\n\t\t\t\t\t\tcase \"accumulator\":\n\t\t\t\t\t\t\treturn \"\" + accumulator;\n\t\t\t\t\t\tcase \"index\":\n\t\t\t\t\t\t\treturn \"\" + index;\n\t\t\t\t\t\tcase \"revIndex\":\n\t\t\t\t\t\t\treturn \"\" + (results.length - 1 - index);\n\t\t\t\t\t\tcase \"length\":\n\t\t\t\t\t\t\treturn \"\" + results.length;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn options.widget.getVariable(name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\tif(list.length > 0) {\n\t\t\taccumulator = \"\" + list[0];\n\t\t}\n\t}\n\tif(results.length > 0) {\n\t\treturn [accumulator];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/regexp.js": {
"title": "$:/core/modules/filters/regexp.js",
"text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removeprefix.js": {
"title": "$:/core/modules/filters/removeprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removesuffix.js": {
"title": "$:/core/modules/filters/removesuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title && title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sameday.js": {
"title": "$:/core/modules/filters/sameday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(tiddler.getFieldDay(fieldName) === targetDate) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/search.js": {
"title": "$:/core/modules/filters/search.js",
"text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffixes) {\n\t\tvar hasFlag = function(flag) {\n\t\t\t\treturn (operator.suffixes[1] || []).indexOf(flag) !== -1;\n\t\t\t},\n\t\t\texcludeFields = false,\n\t\t\tfieldList = operator.suffixes[0] || [],\n\t\t\tfirstField = fieldList[0] || \"\", \n\t\t\tfirstChar = firstField.charAt(0),\n\t\t\tfields;\n\t\tif(firstChar === \"-\") {\n\t\t\tfields = [firstField.slice(1)].concat(fieldList.slice(1));\n\t\t\texcludeFields = true;\n\t\t} else if(fieldList[0] === \"*\"){\n\t\t\tfields = [];\n\t\t\texcludeFields = true;\n\t\t} else {\n\t\t\tfields = fieldList.slice(0);\n\t\t}\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: fields,\n\t\t\texcludeField: excludeFields,\n\t\t\tcaseSensitive: hasFlag(\"casesensitive\"),\n\t\t\tliteral: hasFlag(\"literal\"),\n\t\t\twhitespace: hasFlag(\"whitespace\"),\n\t\t\tanchored: hasFlag(\"anchored\"),\n\t\t\tregexp: hasFlag(\"regexp\"),\n\t\t\twords: hasFlag(\"words\")\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/shadowsource.js": {
"title": "$:/core/modules/filters/shadowsource.js",
"text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/slugify.js": {
"title": "$:/core/modules/filters/slugify.js",
"text": "/*\\\ntitle: $:/core/modules/filters/slugify.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for slugifying a tiddler title\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.slugify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.slugify(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sort.js": {
"title": "$:/core/modules/filters/sort.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortan = function(source, operator, options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results, operator.operand || \"title\", operator.prefix === \"!\",false,false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sortsub.js": {
"title": "$:/core/modules/filters/sortsub.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sortsub.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting by a subfilter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sortsub = function(source,operator,options) {\n\t// Compile the subfilter\n\tvar filterFn = options.wiki.compileFilter(operator.operand);\n\t// Collect the input titles and the corresponding sort keys\n\tvar inputTitles = [],\n\t\tsortKeys = [];\n\tsource(function(tiddler,title) {\n\t\tinputTitles.push(title);\n\t\tvar r = filterFn.call(options.wiki,function(iterator) {\n\t\t\titerator(options.wiki.getTiddler(title),title);\n\t\t},{\n\t\t\tgetVariable: function(name) {\n\t\t\t\tswitch(name) {\n\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\tcase \"..currentTiddler\":\n\t\t\t\t\t\treturn options.widget.getVariable(\"currentTiddler\");\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn options.widget.getVariable(name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tsortKeys.push(r[0] || \"\");\n\t});\n\t// Rather than sorting the titles array, we'll sort the indexes so that we can consult both arrays\n\tvar indexes = new Array(inputTitles.length);\n\tfor(var t=0; t<inputTitles.length; t++) {\n\t\tindexes[t] = t;\n\t}\n\t// Sort the indexes\n\tvar compareFn = $tw.utils.makeCompareFunction(operator.suffix,{defaultType: \"string\",invert: operator.prefix === \"!\"});\n\tindexes = indexes.sort(function(a,b) {\n\t\treturn compareFn(sortKeys[a],sortKeys[b]);\n\t});\n\t// Make the results array in order\n\tvar results = [];\n\t$tw.utils.each(indexes,function(index) {\n\t\tresults.push(inputTitles[index]);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/splitbefore.js": {
"title": "$:/core/modules/filters/splitbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/storyviews.js": {
"title": "$:/core/modules/filters/storyviews.js",
"text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/strings.js": {
"title": "$:/core/modules/filters/strings.js",
"text": "/*\\\ntitle: $:/core/modules/filters/strings.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for strings. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.length = makeStringBinaryOperator(\n\tfunction(a) {return [\"\" + (\"\" + a).length];}\n);\n\nexports.uppercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toUpperCase()];}\n);\n\nexports.lowercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toLowerCase()];}\n);\n\nexports.sentencecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toSentenceCase(a)];}\n);\n\nexports.titlecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toTitleCase(a)];}\n);\n\nexports.trim = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\toperand = (operator.operand || \"\"),\n\t\tfnCalc;\n\tif(suffix === \"prefix\") {\n\t\tfnCalc = function(a,b) {return [$tw.utils.trimPrefix(a,b)];}\n\t} else if(suffix === \"suffix\") {\n\t\tfnCalc = function(a,b) {return [$tw.utils.trimSuffix(a,b)];}\n\t} else {\n\t\tif(operand === \"\") {\n\t\t\tfnCalc = function(a) {return [$tw.utils.trim(a)];}\n\t\t} else {\n\t\t\tfnCalc = function(a,b) {return [$tw.utils.trimSuffix($tw.utils.trimPrefix(a,b),b)];}\n\t\t}\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,fnCalc(title,operand));\n\t});\n\treturn result;\n};\n\nexports.split = makeStringBinaryOperator(\n\tfunction(a,b) {return (\"\" + a).split(b);}\n);\n\nexports[\"enlist-input\"] = makeStringBinaryOperator(\n\tfunction(a,o,s) {return $tw.utils.parseStringArray(\"\" + a,(s === \"raw\"));}\n);\n\nexports.join = makeStringReducingOperator(\n\tfunction(accumulator,value,operand) {\n\t\tif(accumulator === null) {\n\t\t\treturn value;\n\t\t} else {\n\t\t\treturn accumulator + operand + value;\n\t\t}\n\t},null\n);\n\nfunction makeStringBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tArray.prototype.push.apply(result,fnCalc(title,operator.operand || \"\",operator.suffix || \"\"));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeStringReducingOperator(fnCalc,initialValue) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\tif(result.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,currentValue,operator.operand || \"\");\n\t\t},initialValue) || \"\"];\n\t};\n}\n\nexports.splitregexp = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\tflags = (suffix.indexOf(\"m\") !== -1 ? \"m\" : \"\") + (suffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tregExp;\n\ttry {\n\t\tregExp = new RegExp(operator.operand || \"\",flags);\n\t} catch(ex) {\n\t\treturn [\"RegExp error: \" + ex];\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,title.split(regExp));\n\t});\n\treturn result;\n};\n\nexports[\"search-replace\"] = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = operator.suffixes || [],\n\t\tflagSuffix = (suffixes[0] ? (suffixes[0][0] || \"\") : \"\"),\n\t\tflags = (flagSuffix.indexOf(\"g\") !== -1 ? \"g\" : \"\") + (flagSuffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tisRegExp = (suffixes[1] && suffixes[1][0] === \"regexp\") ? true : false,\n\t\tsearchTerm,\n\t\tregExp;\n\n\tsource(function(tiddler,title) {\n\t\tif(title && (operator.operands.length > 1)) {\n\t\t\t//Escape regexp characters if the operand is not a regular expression\n\t\t\tsearchTerm = isRegExp ? operator.operand : $tw.utils.escapeRegExp(operator.operand);\n\t\t\ttry {\n\t\t\t\tregExp = new RegExp(searchTerm,flags);\n\t\t\t} catch(ex) {\n\t\t\t\treturn [\"RegExp error: \" + ex];\n\t\t\t}\n\t\t\tresults.push(\n\t\t\t\ttitle.replace(regExp,operator.operands[1])\n\t\t\t);\n\t\t} else {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\nexports.pad = function(source,operator,options) {\n\tvar results = [],\n\t\ttargetLength = operator.operand ? parseInt(operator.operand) : 0,\n\t\tfill = operator.operands[1] || \"0\";\n\n\tsource(function(tiddler,title) {\n\t\tif(title && title.length) {\n\t\t\tif(title.length >= targetLength) {\n\t\t\t\tresults.push(title);\n\t\t\t} else {\n\t\t\t\tvar padString = \"\",\n\t\t\t\t\tpadStringLength = targetLength - title.length;\n\t\t\t\twhile (padStringLength > padString.length) {\n\t\t\t\t\tpadString += fill;\n\t\t\t\t}\n\t\t\t\t//make sure we do not exceed the specified length\n\t\t\t\tpadString = padString.slice(0,padStringLength);\n\t\t\t\tif(operator.suffix && (operator.suffix === \"suffix\")) {\n\t\t\t\t\ttitle = title + padString;\n\t\t\t\t} else {\n\t\t\t\t\ttitle = padString + title;\n\t\t\t\t}\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/subfilter.js": {
"title": "$:/core/modules/filters/subfilter.js",
"text": "/*\\\ntitle: $:/core/modules/filters/subfilter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand evaluated as a filter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subfilter = function(source,operator,options) {\n\tvar list = options.wiki.filterTiddlers(operator.operand,options.widget,source);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/subtiddlerfields.js": {
"title": "$:/core/modules/filters/subtiddlerfields.js",
"text": "/*\\\ntitle: $:/core/modules/filters/subtiddlerfields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected subtiddlers of the plugin named in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subtiddlerfields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar subtiddler = options.wiki.getSubTiddler(operator.operand,title);\n\t\tif(subtiddler) {\n\t\t\tfor(var fieldName in subtiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/suffix.js": {
"title": "$:/core/modules/filters/suffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tag.js": {
"title": "$:/core/modules/filters/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [],indexedResults;\n\tif((operator.suffix || \"\").toLowerCase() === \"strict\" && !operator.operand) {\n\t\t// New semantics:\n\t\t// Always return copy of input if operator.operand is missing\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t} else {\n\t\t// Old semantics:\n\t\tvar tiddlers;\n\t\tif(operator.prefix === \"!\") {\n\t\t\t// Returns a copy of the input if operator.operand is missing\n\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddlers.indexOf(title) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Returns empty results if operator.operand is missing\n\t\t\tif(source.byTag) {\n\t\t\t\tindexedResults = source.byTag(operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\t\tsource(function(tiddler,title) {\n\t\t\t\t\tif(tiddlers.indexOf(title) !== -1) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tagging.js": {
"title": "$:/core/modules/filters/tagging.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tags.js": {
"title": "$:/core/modules/filters/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/then.js": {
"title": "$:/core/modules/filters/then.js",
"text": "/*\\\ntitle: $:/core/modules/filters/then.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing any titles with a constant\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.then = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/title.js": {
"title": "$:/core/modules/filters/title.js",
"text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/untagged.js": {
"title": "$:/core/modules/filters/untagged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/variables.js": {
"title": "$:/core/modules/filters/variables.js",
"text": "/*\\\ntitle: $:/core/modules/filters/variables.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the active variables\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variables = function(source,operator,options) {\n\tvar names = [];\n\tfor(var variable in options.widget.variables) {\n\t\tnames.push(variable);\n\t}\n\treturn names.sort();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/wikiparserrules.js": {
"title": "$:/core/modules/filters/wikiparserrules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [],\n\t\toperand = operator.operand;\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(!operand || exp.types[operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/x-listops.js": {
"title": "$:/core/modules/filters/x-listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n\t/*jslint node: true, browser: true */\n\t/*global $tw: false */\n\t\"use strict\";\n\n\t/*\n\tFetch titles from the current list\n\t*/\n\tvar prepare_results = function (source) {\n\tvar results = [];\n\t\tsource(function (tiddler, title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list before the item named in the operand\n\t*/\n\texports.putbefore = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -1) :\n\t\t\tresults.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list after the item named in the operand\n\t*/\n\texports.putafter = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -1) :\n\t\t\tresults.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n\t};\n\n\t/*\n\tReplaces the item named in the operand with a number of items from the tail of the current list\n\t*/\n\texports.replace = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -count) :\n\t\t\tresults.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list to the head of the list\n\t*/\n\texports.putfirst = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn results.slice(-count).concat(results.slice(0, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the head of the current list to the tail of the list\n\t*/\n\texports.putlast = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn results.slice(count).concat(results.slice(0, count));\n\t};\n\n\t/*\n\tMoves the item named in the operand a number of places forward or backward in the list\n\t*/\n\texports.move = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1),\n\t\t\tmarker = results.splice(index, 1),\n\t\t\toffset = (index + count) > 0 ? index + count : 0;\n\t\treturn results.slice(0, offset).concat(marker).concat(results.slice(offset));\n\t};\n\n\t/*\n\tReturns the items from the current list that are after the item named in the operand\n\t*/\n\texports.allafter = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand);\n\t\treturn (index === -1) ? [] :\n\t\t\t(operator.suffix) ? results.slice(index) :\n\t\t\tresults.slice(index + 1);\n\t};\n\n\t/*\n\tReturns the items from the current list that are before the item named in the operand\n\t*/\n\texports.allbefore = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand);\n\t\treturn (index === -1) ? [] :\n\t\t\t(operator.suffix) ? results.slice(0, index + 1) :\n\t\t\tresults.slice(0, index);\n\t};\n\n\t/*\n\tAppends the items listed in the operand array to the tail of the current list\n\t*/\n\texports.append = function (source, operator) {\n\t\tvar append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = parseInt(operator.suffix) || append.length;\n\t\treturn (append.length === 0) ? results :\n\t\t\t(operator.prefix) ? results.concat(append.slice(-count)) :\n\t\t\tresults.concat(append.slice(0, count));\n\t};\n\n\t/*\n\tPrepends the items listed in the operand array to the head of the current list\n\t*/\n\texports.prepend = function (source, operator) {\n\t\tvar prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,prepend.length);\n\t\treturn (prepend.length === 0) ? results :\n\t\t\t(operator.prefix) ? prepend.slice(-count).concat(results) :\n\t\t\tprepend.slice(0, count).concat(results);\n\t};\n\n\t/*\n\tReturns all items from the current list except the items listed in the operand array\n\t*/\n\texports.remove = function (source, operator) {\n\t\tvar array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = parseInt(operator.suffix) || array.length,\n\t\t\tp,\n\t\t\tlen,\n\t\t\tindex;\n\t\tlen = array.length - 1;\n\t\tfor (p = 0; p < count; ++p) {\n\t\t\tif (operator.prefix) {\n\t\t\t\tindex = results.indexOf(array[len - p]);\n\t\t\t} else {\n\t\t\t\tindex = results.indexOf(array[p]);\n\t\t\t}\n\t\t\tif (index !== -1) {\n\t\t\t\tresults.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t};\n\n\t/*\n\tReturns all items from the current list sorted in the order of the items in the operand array\n\t*/\n\texports.sortby = function (source, operator) {\n\t\tvar results = prepare_results(source);\n\t\tif (!results || results.length < 2) {\n\t\t\treturn results;\n\t\t}\n\t\tvar lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n\t\tresults.sort(function (a, b) {\n\t\t\treturn lookup.indexOf(a) - lookup.indexOf(b);\n\t\t});\n\t\treturn results;\n\t};\n\n\t/*\n\tRemoves all duplicate items from the current list\n\t*/\n\texports.unique = function (source, operator) {\n\t\tvar results = prepare_results(source);\n\t\tvar set = results.reduce(function (a, b) {\n\t\t\tif (a.indexOf(b) < 0) {\n\t\t\t\ta.push(b);\n\t\t\t}\n\t\t\treturn a;\n\t\t}, []);\n\t\treturn set;\n\t};\n\n\tvar cycleValueInArray = function(results,operands,stepSize) {\n\t\tvar resultsIndex,\n\t\t\tstep = stepSize || 1,\n\t\t\ti = 0,\n\t\t\topLength = operands.length,\n\t\t\tnextOperandIndex;\n\t\tfor(i; i < opLength; i++) {\n\t\t\tresultsIndex = results.indexOf(operands[i]);\n\t\t\tif(resultsIndex !== -1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif(resultsIndex !== -1) {\n\t\t\ti = i + step;\n\t\t\tnextOperandIndex = (i < opLength ? i : i - opLength);\n\t\t\tif(operands.length > 1) {\n\t\t\t\tresults.splice(resultsIndex,1,operands[nextOperandIndex]);\n\t\t\t} else {\n\t\t\t\tresults.splice(resultsIndex,1);\n\t\t\t}\n\t\t} else {\n\t\t\tresults.push(operands[0]);\n\t\t}\n\t\treturn results;\n\t}\n\n\t/*\n\tToggles an item in the current list.\n\t*/\n\texports.toggle = function(source,operator) {\n\t\treturn cycleValueInArray(prepare_results(source),operator.operands);\n\t}\n\n\texports.cycle = function(source,operator) {\n\t\tvar results = prepare_results(source),\n\t\t\toperands = (operator.operand.length ? $tw.utils.parseStringArray(operator.operand, \"true\") : [\"\"]),\n\t\t\tstep = $tw.utils.getInt(operator.operands[1]||\"\",1);\n\t\tif(step < 0) {\n\t\t\toperands.reverse();\n\t\t\tstep = Math.abs(step);\n\t\t}\n\t\treturn cycleValueInArray(results,operands,step);\n\t}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters.js": {
"title": "$:/core/modules/filters.js",
"text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\t// The raw suffix for older filters\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t\t// The processed suffix for newer filters\n\t\t\toperator.suffixes = [];\n\t\t\t$tw.utils.each(operator.suffix.split(\":\"),function(subsuffix) {\n\t\t\t\toperator.suffixes.push([]);\n\t\t\t\t$tw.utils.each(subsuffix.split(\",\"),function(entry) {\n\t\t\t\t\tentry = $tw.utils.trim(entry);\n\t\t\t\t\tif(entry) {\n\t\t\t\t\t\toperator.suffixes[operator.suffixes.length - 1].push(entry); \n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\t\toperator.operands = [];\n\t\tvar parseOperand = function(bracketType) {\n\t\t\tvar operand = {};\n\t\t\tswitch (bracketType) {\n\t\t\t\tcase \"{\": // Curly brackets\n\t\t\t\t\toperand.indirect = true;\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[\": // Square brackets\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"<\": // Angle brackets\n\t\t\t\t\toperand.variable = true;\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"/\": // regexp brackets\n\t\t\t\t\tvar rex = /^((?:[^\\\\\\/]|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\t\tif(rexMatch) {\n\t\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n\t// DEPRECATION WARNING\n\tconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(nextBracketPos === -1) {\n\t\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t\t}\n\t\t\tif(!operator.regexp) {\n\t\t\t\toperand.text = filterString.substring(p,nextBracketPos);\n\t\t\t\toperator.operands.push(operand);\n\t\t\t}\n\t\t\tp = nextBracketPos + 1;\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tparseOperand(bracket);\n\n\t\t// Check for multiple operands\n\t\twhile(filterString.charAt(p) === \",\") {\n\t\t\tp++;\n\t\t\tif(/^[\\[\\{<\\/]/.test(filterString.substring(p))) {\n\t\t\t\tnextBracketPos = p;\n\t\t\t\tp++;\n\t\t\t\tparseOperand(filterString.charAt(nextBracketPos));\n\t\t\t} else {\n\t\t\t\tthrow \"Missing [ in filter expression\";\n\t\t\t}\n\t\t}\n\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-|~|=|\\:(\\w+)(?:\\:([\\w\\:, ]*))?)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp = p + operation.prefix.length;\n\t\t\t\tif(match[2]) {\n\t\t\t\t\toperation.namedPrefix = match[2];\n\t\t\t\t}\n\t\t\t\tif(match[3]) {\n\t\t\t\t\toperation.suffixes = [];\n\t\t\t\t\t $tw.utils.each(match[3].split(\":\"),function(subsuffix) {\n\t\t\t\t\t\toperation.suffixes.push([]);\n\t\t\t\t\t\t$tw.utils.each(subsuffix.split(\",\"),function(entry) {\n\t\t\t\t\t\t\tentry = $tw.utils.trim(entry);\n\t\t\t\t\t\t\tif(entry) {\n\t\t\t\t\t\t\t\toperation.suffixes[operation.suffixes.length -1].push(entry);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t });\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(match[4]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[5] || match[6] || match[7]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operands: [{text: match[5] || match[6] || match[7]}]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.getFilterRunPrefixes = function() {\n\tif(!this.filterRunPrefixes) {\n\t\t$tw.Wiki.prototype.filterRunPrefixes = {};\n\t\t$tw.modules.applyMethods(\"filterrunprefix\",this.filterRunPrefixes);\n\t}\n\treturn this.filterRunPrefixes;\n}\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operands = [],\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\n\t\t\t\t$tw.utils.each(operator.operands,function(operand) {\n\t\t\t\t\tif(operand.indirect) {\n\t\t\t\t\t\toperand.value = self.getTextReference(operand.text,\"\",currTiddlerTitle);\n\t\t\t\t\t} else if(operand.variable) {\n\t\t\t\t\t\toperand.value = widget.getVariable(operand.text,{defaultValue: \"\"});\n\t\t\t\t\t} else {\n\t\t\t\t\t\toperand.value = operand.text;\n\t\t\t\t\t}\n\t\t\t\t\toperands.push(operand.value);\n\t\t\t\t});\n\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operands.length > 0 ? operands[0] : undefined,\n\t\t\t\t\t\t\toperands: operands,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tsuffixes: operator.suffixes,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\tvar filterRunPrefixes = self.getFilterRunPrefixes();\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tvar options = {wiki: self, suffixes: operation.suffixes || []};\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn filterRunPrefixes[\"or\"](operationSubFunction, options);\n\t\t\t\tcase \"=\": // The results of the operation are pushed into the result without deduplication\n\t\t\t\t\treturn filterRunPrefixes[\"all\"](operationSubFunction, options);\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn filterRunPrefixes[\"except\"](operationSubFunction, options);\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn filterRunPrefixes[\"and\"](operationSubFunction, options);\n\t\t\t\tcase \"~\": // This operation is unioned into the result only if the main result so far is empty\n\t\t\t\t\treturn filterRunPrefixes[\"else\"](operationSubFunction, options);\n\t\t\t\tdefault: \n\t\t\t\t\tif(operation.namedPrefix && filterRunPrefixes[operation.namedPrefix]) {\n\t\t\t\t\t\treturn filterRunPrefixes[operation.namedPrefix](operationSubFunction, options);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t\tresults.clear();\n\t\t\t\t\t\t\tresults.push($tw.language.getString(\"Error/FilterRunPrefix\"));\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter: \" + filterString,function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tif(!widget) {\n\t\t\twidget = $tw.rootWidget;\n\t\t}\n\t\tvar results = new $tw.utils.LinkedList();\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results.toArray();\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/indexers/backlinks-indexer.js": {
"title": "$:/core/modules/indexers/backlinks-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/backlinks-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers' backlinks\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\n\nfunction BacklinksIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nBacklinksIndexer.prototype.init = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype.rebuild = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype._getLinks = function(tiddler) {\n\tvar parser = this.wiki.parseText(tiddler.fields.type, tiddler.fields.text, {});\n\tif(parser) {\n\t\treturn this.wiki.extractLinks(parser.tree);\n\t}\n\treturn [];\n}\n\nBacklinksIndexer.prototype.update = function(updateDescriptor) {\n\tif(!this.index) {\n\t\treturn;\n\t}\n\tvar newLinks = [],\n\t oldLinks = [],\n\t self = this;\n\tif(updateDescriptor.old.exists) {\n\t\toldLinks = this._getLinks(updateDescriptor.old.tiddler);\n\t}\n\tif(updateDescriptor.new.exists) {\n\t\tnewLinks = this._getLinks(updateDescriptor.new.tiddler);\n\t}\n\n\t$tw.utils.each(oldLinks,function(link) {\n\t\tif(self.index[link]) {\n\t\t\tdelete self.index[link][updateDescriptor.old.tiddler.fields.title];\n\t\t}\n\t});\n\t$tw.utils.each(newLinks,function(link) {\n\t\tif(!self.index[link]) {\n\t\t\tself.index[link] = Object.create(null);\n\t\t}\n\t\tself.index[link][updateDescriptor.new.tiddler.fields.title] = true;\n\t});\n}\n\nBacklinksIndexer.prototype.lookup = function(title) {\n\tif(!this.index) {\n\t\tthis.index = Object.create(null);\n\t\tvar self = this;\n\t\tthis.wiki.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self._getLinks(tiddler);\n\t\t\t$tw.utils.each(links, function(link) {\n\t\t\t\tif(!self.index[link]) {\n\t\t\t\t\tself.index[link] = Object.create(null);\n\t\t\t\t}\n\t\t\t\tself.index[link][title] = true;\n\t\t\t});\n\t\t});\n\t}\n\tif(this.index[title]) {\n\t\treturn Object.keys(this.index[title]);\n\t} else {\n\t\treturn [];\n\t}\n}\n\nexports.BacklinksIndexer = BacklinksIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/indexers/field-indexer.js": {
"title": "$:/core/modules/indexers/field-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/field-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nvar DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH = 128;\n\nfunction FieldIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nFieldIndexer.prototype.init = function() {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH;\n\tthis.addIndexMethods();\n}\n\n// Provided for testing\nFieldIndexer.prototype.setMaxIndexedValueLength = function(length) {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = length;\n};\n\nFieldIndexer.prototype.addIndexMethods = function() {\n\tvar self = this;\n\tthis.wiki.each.byField = function(name,value) {\n\t\tvar titles = self.wiki.allTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachShadow.byField = function(name,value) {\n\t\tvar titles = self.wiki.allShadowTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachTiddlerPlusShadows.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n\tthis.wiki.eachShadowPlusTiddlers.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n};\n\n/*\nTear down and then rebuild the index as if all tiddlers have changed\n*/\nFieldIndexer.prototype.rebuild = function() {\n\t// Invalidate the index so that it will be rebuilt when it is next used\n\tthis.index = null;\n};\n\n/*\nBuild the index for a particular field\n*/\nFieldIndexer.prototype.buildIndexForField = function(name) {\n\tvar self = this;\n\t// Hashmap by field name of hashmap by field value of array of tiddler titles\n\tthis.index = this.index || Object.create(null);\n\tthis.index[name] = Object.create(null);\n\tvar baseIndex = this.index[name];\n\t// Update the index for each tiddler\n\tthis.wiki.eachTiddlerPlusShadows(function(tiddler,title) {\n\t\tif(name in tiddler.fields) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t// Skip any values above the maximum length\n\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\tbaseIndex[value] = baseIndex[value] || [];\n\t\t\t\tbaseIndex[value].push(title);\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nUpdate the index in the light of a tiddler value changing; note that the title must be identical. (Renames are handled as a separate delete and create)\nupdateDescriptor: {old: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>},new: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>}}\n*/\nFieldIndexer.prototype.update = function(updateDescriptor) {\n\tvar self = this;\n\t// Don't do anything if the index hasn't been built yet\n\tif(this.index === null) {\n\t\treturn;\n\t}\n\t// Remove the old tiddler from the index\n\tif(updateDescriptor.old.tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor.old.tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor.old.tiddler.getFieldString(name),\n\t\t\t\t\ttiddlerList = indexEntry[value];\n\t\t\t\tif(tiddlerList) {\n\t\t\t\t\tvar index = tiddlerList.indexOf(updateDescriptor.old.tiddler.fields.title);\n\t\t\t\t\tif(index !== -1) {\n\t\t\t\t\t\ttiddlerList.splice(index,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// Add the new tiddler to the index\n\tif(updateDescriptor[\"new\"].tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor[\"new\"].tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor[\"new\"].tiddler.getFieldString(name);\n\t\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\t\tindexEntry[value] = indexEntry[value] || [];\n\t\t\t\t\tindexEntry[value].push(updateDescriptor[\"new\"].tiddler.fields.title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n// Lookup the given field returning a list of tiddler titles\nFieldIndexer.prototype.lookup = function(name,value) {\n\t// Fail the lookup if the value is too long\n\tif(value.length >= this.maxIndexedValueLength) {\n\t\treturn null;\n\t}\n\t// Update the index if it has yet to be built\n\tif(this.index === null || !this.index[name]) {\n\t\tthis.buildIndexForField(name);\n\t}\n\treturn this.index[name][value] || [];\n};\n\nexports.FieldIndexer = FieldIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/indexers/tag-indexer.js": {
"title": "$:/core/modules/indexers/tag-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/tag-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nfunction TagIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nTagIndexer.prototype.init = function() {\n\tthis.subIndexers = [\n\t\tnew TagSubIndexer(this,\"each\"),\n\t\tnew TagSubIndexer(this,\"eachShadow\"),\n\t\tnew TagSubIndexer(this,\"eachTiddlerPlusShadows\"),\n\t\tnew TagSubIndexer(this,\"eachShadowPlusTiddlers\")\n\t];\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.addIndexMethod();\n\t});\n};\n\nTagIndexer.prototype.rebuild = function() {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.rebuild();\n\t});\n};\n\nTagIndexer.prototype.update = function(updateDescriptor) {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.update(updateDescriptor);\n\t});\n};\n\nfunction TagSubIndexer(indexer,iteratorMethod) {\n\tthis.indexer = indexer;\n\tthis.iteratorMethod = iteratorMethod;\n\tthis.index = null; // Hashmap of tag title to {isSorted: bool, titles: [array]} or null if not yet initialised\n}\n\nTagSubIndexer.prototype.addIndexMethod = function() {\n\tvar self = this;\n\tthis.indexer.wiki[this.iteratorMethod].byTag = function(tag) {\n\t\treturn self.lookup(tag).slice(0);\n\t};\n};\n\nTagSubIndexer.prototype.rebuild = function() {\n\tvar self = this;\n\t// Hashmap by tag of array of {isSorted:, titles:[]}\n\tthis.index = Object.create(null);\n\t// Add all the tags\n\tthis.indexer.wiki[this.iteratorMethod](function(tiddler,title) {\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\tif(!self.index[tag]) {\n\t\t\t\tself.index[tag] = {isSorted: false, titles: [title]};\n\t\t\t} else {\n\t\t\t\tself.index[tag].titles.push(title);\n\t\t\t}\n\t\t});\n\t});\n};\n\nTagSubIndexer.prototype.update = function(updateDescriptor) {\n\tthis.index = null;\n};\n\nTagSubIndexer.prototype.lookup = function(tag) {\n\t// Update the index if it has yet to be built\n\tif(this.index === null) {\n\t\tthis.rebuild();\n\t}\n\tvar indexRecord = this.index[tag];\n\tif(indexRecord) {\n\t\tif(!indexRecord.isSorted) {\n\t\t\tif(this.indexer.wiki.sortByList) {\n\t\t\t\tindexRecord.titles = this.indexer.wiki.sortByList(indexRecord.titles,tag);\n\t\t\t}\n\t\t\tindexRecord.isSorted = true;\n\t\t}\n\t\treturn indexRecord.titles;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n\nexports.TagIndexer = TagIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/info/platform.js": {
"title": "$:/core/modules/info/platform.js",
"text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function(updateInfoTiddlersCallback) {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\tinfoTiddlerFields.push({title: \"$:/info/startup-timestamp\", text: $tw.utils.stringifyDate(new Date())});\n\tif($tw.browser) {\n\t\t// Document location\n\t\tvar setLocationProperty = function(name,value) {\n\t\t\t\tinfoTiddlerFields.push({title: \"$:/info/url/\" + name, text: value});\n\t\t\t},\n\t\t\tlocation = document.location;\n\t\tsetLocationProperty(\"full\", (location.toString()).split(\"#\")[0]);\n\t\tsetLocationProperty(\"host\", location.host);\n\t\tsetLocationProperty(\"hostname\", location.hostname);\n\t\tsetLocationProperty(\"protocol\", location.protocol);\n\t\tsetLocationProperty(\"port\", location.port);\n\t\tsetLocationProperty(\"pathname\", location.pathname);\n\t\tsetLocationProperty(\"search\", location.search);\n\t\tsetLocationProperty(\"origin\", location.origin);\n\t\t// Screen size\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/width\", text: window.screen.width.toString()});\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/height\", text: window.screen.height.toString()});\n \t\t// Dark mode through event listener on MediaQueryList\n \t\tvar mqList = window.matchMedia(\"(prefers-color-scheme: dark)\"),\n \t\t\tgetDarkModeTiddler = function() {return {title: \"$:/info/darkmode\", text: mqList.matches ? \"yes\" : \"no\"};};\n \t\tinfoTiddlerFields.push(getDarkModeTiddler());\n \t\tmqList.addListener(function(event) {\n \t\t\tupdateInfoTiddlersCallback([getDarkModeTiddler()]);\n \t\t});\n\t\t// Language\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/language\", text: navigator.language || \"\"});\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "info"
},
"$:/core/modules/keyboard.js": {
"title": "$:/core/modules/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n\tthis.shortcutKeysList = [], // Stores the shortcut-key descriptors\n\tthis.shortcutActionList = [], // Stores the corresponding action strings\n\tthis.shortcutParsedList = []; // Stores the parsed key descriptors\n\tthis.lookupNames = [\"shortcuts\"];\n\tthis.lookupNames.push($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\")\n\tthis.lookupNames.push($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\tthis.lookupNames.push($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\tthis.updateShortcutLists(this.getShortcutTiddlerList());\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.handleShortcutChanges(changes);\n\t});\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t$tw.utils.each(self.lookupNames,function(platformDescriptor) {\n\t\t\t\t\tlookupName(platformDescriptor);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.getEventModifierKeyDescriptor = function(event) {\n\treturn event.ctrlKey && !event.shiftKey\t&& !event.altKey && !event.metaKey ? \"ctrl\" : \n\t\tevent.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey ? \"shift\" : \n\t\tevent.ctrlKey && event.shiftKey && !event.altKey && !event.metaKey ? \"ctrl-shift\" : \n\t\tevent.altKey && !event.shiftKey && !event.ctrlKey && !event.metaKey ? \"alt\" : \n\t\tevent.altKey && event.shiftKey && !event.ctrlKey && !event.metaKey ? \"alt-shift\" : \n\t\tevent.altKey && event.ctrlKey && !event.shiftKey && !event.metaKey ? \"ctrl-alt\" : \n\t\tevent.altKey && event.shiftKey && event.ctrlKey && !event.metaKey ? \"ctrl-alt-shift\" : \n\t\tevent.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey ? \"meta\" : \n\t\tevent.metaKey && event.ctrlKey && !event.shiftKey && !event.altKey ? \"meta-ctrl\" :\n\t\tevent.metaKey && event.ctrlKey && event.shiftKey && !event.altKey ? \"meta-ctrl-shift\" :\n\t\tevent.metaKey && event.ctrlKey && event.shiftKey && event.altKey ? \"meta-ctrl-alt-shift\" : \"normal\";\n};\n\nKeyboardManager.prototype.getShortcutTiddlerList = function() {\n\treturn $tw.wiki.getTiddlersWithTag(\"$:/tags/KeyboardShortcut\");\n};\n\nKeyboardManager.prototype.updateShortcutLists = function(tiddlerList) {\n\tthis.shortcutTiddlers = tiddlerList;\n\tfor(var i=0; i<tiddlerList.length; i++) {\n\t\tvar title = tiddlerList[i],\n\t\t\ttiddlerFields = $tw.wiki.getTiddler(title).fields;\n\t\tthis.shortcutKeysList[i] = tiddlerFields.key !== undefined ? tiddlerFields.key : undefined;\n\t\tthis.shortcutActionList[i] = tiddlerFields.text;\n\t\tthis.shortcutParsedList[i] = this.shortcutKeysList[i] !== undefined ? this.parseKeyDescriptors(this.shortcutKeysList[i]) : undefined;\n\t}\n};\n\nKeyboardManager.prototype.handleKeydownEvent = function(event) {\n\tvar key, action;\n\tfor(var i=0; i<this.shortcutTiddlers.length; i++) {\n\t\tif(this.shortcutParsedList[i] !== undefined && this.checkKeyDescriptors(event,this.shortcutParsedList[i])) {\n\t\t\tkey = this.shortcutParsedList[i];\n\t\t\taction = this.shortcutActionList[i];\n\t\t}\n\t}\n\tif(key !== undefined) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\t$tw.rootWidget.invokeActionString(action,$tw.rootWidget);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.detectNewShortcuts = function(changedTiddlers) {\n\tvar shortcutConfigTiddlers = [],\n\t\thandled = false;\n\t$tw.utils.each(this.lookupNames,function(platformDescriptor) {\n\t\tvar descriptorString = \"$:/config/\" + platformDescriptor + \"/\";\n\t\tObject.keys(changedTiddlers).forEach(function(configTiddler) {\n\t\t\tvar configString = configTiddler.substr(0, configTiddler.lastIndexOf(\"/\") + 1);\n\t\t\tif(configString === descriptorString) {\n\t\t\t\tshortcutConfigTiddlers.push(configTiddler);\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t});\n\t});\n\tif(handled) {\n\t\treturn $tw.utils.hopArray(changedTiddlers,shortcutConfigTiddlers);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nKeyboardManager.prototype.handleShortcutChanges = function(changedTiddlers) {\n\tvar newList = this.getShortcutTiddlerList();\n\tvar hasChanged = $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) ? true :\n\t\t($tw.utils.hopArray(changedTiddlers,newList) ? true :\n\t\t(this.detectNewShortcuts(changedTiddlers))\n\t);\n\t// Re-cache shortcuts if something changed\n\tif(hasChanged) {\n\t\tthis.updateShortcutLists(newList);\n\t}\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/language.js": {
"title": "$:/core/modules/language.js",
"text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/macros/changecount.js": {
"title": "$:/core/modules/macros/changecount.js",
"text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/contrastcolour.js": {
"title": "$:/core/modules/macros/contrastcolour.js",
"text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/csvtiddlers.js": {
"title": "$:/core/modules/macros/csvtiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/displayshortcuts.js": {
"title": "$:/core/modules/macros/displayshortcuts.js",
"text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddler.js": {
"title": "$:/core/modules/macros/jsontiddler.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddler.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output a single tiddler to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddler\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\ttitle = title || this.getVariable(\"currentTiddler\");\n\tvar tiddler = !!title && this.wiki.getTiddler(title),\n\t\tfields = new Object();\n\tif(tiddler) {\n\t\tfor(var field in tiddler.fields) {\n\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t}\n\t}\n\treturn JSON.stringify(fields,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddlers.js": {
"title": "$:/core/modules/macros/jsontiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"spaces\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,spaces) {\n\treturn this.wiki.getTiddlersAsJson(filter,$tw.utils.parseInt(spaces));\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/makedatauri.js": {
"title": "$:/core/modules/macros/makedatauri.js",
"text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"},\n\t{name: \"_canonical_uri\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type,_canonical_uri) {\n\treturn $tw.utils.makeDataUri(text,type,_canonical_uri);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/now.js": {
"title": "$:/core/modules/macros/now.js",
"text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/qualify.js": {
"title": "$:/core/modules/macros/qualify.js",
"text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/resolvepath.js": {
"title": "$:/core/modules/macros/resolvepath.js",
"text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/unusedtitle.js": {
"title": "$:/core/modules/macros/unusedtitle.js",
"text": "/*\\\ntitle: $:/core/modules/macros/unusedtitle.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a new title that is unused in the wiki. It can be given a name as a base.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"unusedtitle\";\n\nexports.params = [\n\t{name: \"baseName\"},\n\t{name: \"separator\"},\n\t{name: \"template\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(baseName,separator,template) {\n\tseparator = separator || \" \";\n\tif(!baseName) {\n\t\tbaseName = $tw.language.getString(\"DefaultNewTiddlerTitle\");\n\t}\n\t// $tw.wiki.generateNewTitle = function(baseTitle,options)\n\t// options.prefix must be a string! \n\treturn this.wiki.generateNewTitle(baseName, {\"prefix\": separator, \"template\": template});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/version.js": {
"title": "$:/core/modules/macros/version.js",
"text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/parsers/audioparser.js": {
"title": "$:/core/modules/parsers/audioparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/binaryparser.js": {
"title": "$:/core/modules/parsers/binaryparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/binaryparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe binary parser parses a binary tiddler into a warning message and download link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar BinaryParser = function(type,text,options) {\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on binary tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!title\"}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to external or internal data URI\n\tif(options._canonical_uri) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: options._canonical_uri\n\t\t};\n\t} else if(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/octet-stream\"] = BinaryParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/csvparser.js": {
"title": "$:/core/modules/parsers/csvparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/htmlparser.js": {
"title": "$:/core/modules/parsers/htmlparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src}\n\t\t}\n\t}];\n\tif($tw.wiki.getTiddlerText(\"$:/config/HtmlParser/DisableSandbox\",\"no\") !== \"yes\") {\n\t\tthis.tree[0].attributes.sandbox = {type: \"string\", value: $tw.wiki.getTiddlerText(\"$:/config/HtmlParser/SandboxTokens\",\"\")};\n\t}\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/imageparser.js": {
"title": "$:/core/modules/parsers/imageparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t};\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\tif(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"image/webp\"] = ImageParser;\nexports[\"image/heic\"] = ImageParser;\nexports[\"image/heif\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\nexports[\"image/vnd.microsoft.icon\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/utils/parseutils.js": {
"title": "$:/core/modules/utils/parseutils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|((?:(?:>(?!>))|[^\\s>\"'])+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treFilteredValue = /\\{\\{\\{(.+?)\\}\\}\\}/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for a filtered value\n\t\t\tvar filteredValue = $tw.utils.parseTokenRegExp(source,pos,reFilteredValue);\n\t\t\tif(filteredValue) {\n\t\t\t\tpos = filteredValue.end;\n\t\t\t\tnode.type = \"filtered\";\n\t\t\t\tnode.filter = filteredValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for an indirect value\n\t\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\t\tif(indirectValue) {\n\t\t\t\t\tpos = indirectValue.end;\n\t\t\t\t\tnode.type = \"indirect\";\n\t\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a unquoted value\n\t\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\t\tif(unquotedValue) {\n\t\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/parsers/pdfparser.js": {
"title": "$:/core/modules/parsers/pdfparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/pdfparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"embed\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/pdf\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/textparser.js": {
"title": "$:/core/modules/parsers/textparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/videoparser.js": {
"title": "$:/core/modules/parsers/videoparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar VideoParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/ogg\"] = VideoParser;\nexports[\"video/webm\"] = VideoParser;\nexports[\"video/mp4\"] = VideoParser;\nexports[\"video/quicktime\"] = VideoParser;\n\n})();\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = this.match.index + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = this.match.index + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/dash.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"–\" : \"—\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/entity.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: ©\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/extlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: https://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/heading.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/html.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/html.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\";\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\tvar reEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.slice(1).indexOf(\"$\") !== -1) {\n\t\treturn null;\n\t}\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Check that the tag is terminated by a space, / or >\n\tif(!$tw.utils.parseWhiteSpace(source,pos) && !(source.charAt(pos) === \"/\") && !(source.charAt(pos) === \">\") ) {\n\t\treturn null;\n\t}\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/image.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/image.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[https://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [https://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/import.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/import.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/import.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for importing variable definitions\n\n```\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"import\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\import[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the filter terminated by a line break\n\tvar reMatch = /(.*)(?:$|\\r?\\n)/mg;\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\tthis.parser.pos = reMatch.lastIndex;\n\t// Parse tree nodes to return\n\treturn [{\n\t\ttype: \"importvariables\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: match[1]}\n\t\t},\n\t\tchildren: []\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/list.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/list.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"div\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\tvar nextStart = startPos;\n\t// Try parsing at all possible macrocall openers until we match\n\twhile((nextStart = this.parser.source.indexOf(\"<<\",nextStart)) >= 0) {\n\t\tvar nextCall = $tw.utils.parseMacroInvocation(this.parser.source,nextStart);\n\t\tif(nextCall) {\n\t\t\tvar c = this.parser.source.charAt(nextCall.end);\n\t\t\t// Ensure EOL after parsed macro\n\t\t\t// If we didn't need to support IE, we'd just use /(?:\\r?\\n|$)/ym\n\t\t\tif ((c === \"\") || (c === \"\\n\") || ((c === \"\\r\") && this.parser.source.charAt(nextCall.end+1) === \"\\n\")) {\n\t\t\t\tthis.nextCall = nextCall;\n\t\t\t\treturn nextStart;\n\t\t\t}\n\t\t}\n\t\tnextStart += 2;\n\t}\n\treturn undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar call = this.nextCall;\n\tcall.isBlock = true;\n\tthis.nextCall = null;\n\tthis.parser.pos = call.end;\n\treturn [call];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\tvar nextStart = startPos;\n\t// Try parsing at all possible macrocall openers until we match\n\twhile((nextStart = this.parser.source.indexOf(\"<<\",nextStart)) >= 0) {\n\t\tthis.nextCall = $tw.utils.parseMacroInvocation(this.parser.source,nextStart);\n\t\tif(this.nextCall) {\n\t\t\treturn nextStart;\n\t\t}\n\t\tnextStart += 2;\n\t}\n\treturn undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar call = this.nextCall;\n\tthis.nextCall = null;\n\tthis.parser.pos = call.end;\n\treturn [call];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /($|\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params,\n\t\tisMacroDefinition: true\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[https://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/rules.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/syslink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(\n\t\t\"~?\\\\$:\\\\/[\" +\n\t\t$tw.config.textPrimitives.anyLetter.substr(1,$tw.config.textPrimitives.anyLetter.length - 2) +\n\t\t\"\\/._-]+\",\n\t\t\"mg\"\n\t);\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/table.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/table.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/whitespace.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/whitespace.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/whitespace.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for whitespace specifications\n\n```\n\\whitespace trim\n\\whitespace notrim\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"whitespace\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\whitespace[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\t$tw.utils.each(tokens,function(token) {\n\t\tswitch(token) {\n\t\t\tcase \"trim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = true;\n\t\t\t\tbreak;\n\t\t\tcase \"notrim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = false;\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/wikiparser.js": {
"title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\ntype: content type of text\ntext: text to be parsed\noptions: see below:\n\tparseAsInline: true to parse text as inline instead of block\n\twiki: reference to wiki to use\n\t_canonical_uri: optional URI of content if text is missing or empty\n*/\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Flag for ignoring whitespace\n\tthis.configTrimWhiteSpace = false;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Start with empty output\n\tthis.tree = [];\n\t// Assemble the rule classes we're going to use\n\tvar pragmaRuleClasses, blockRuleClasses, inlineRuleClasses;\n\tif(options.rules) {\n\t\tpragmaRuleClasses = options.rules.pragma;\n\t\tblockRuleClasses = options.rules.block;\n\t\tinlineRuleClasses = options.rules.inline;\n\t} else {\n\t\t// Setup the rule classes if we don't have them already\n\t\tif(!this.pragmaRuleClasses) {\n\t\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t\t}\n\t\tpragmaRuleClasses = this.pragmaRuleClasses;\n\t\tif(!this.blockRuleClasses) {\n\t\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t\t}\n\t\tblockRuleClasses = this.blockRuleClasses;\n\t\tif(!this.inlineRuleClasses) {\n\t\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t\t}\n\t\tinlineRuleClasses = this.inlineRuleClasses;\n\t}\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t// Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\nWikiParser.prototype.pushTextWidget = function(array,text) {\n\tif(this.configTrimWhiteSpace) {\n\t\ttext = $tw.utils.trim(text);\n\t}\n\tif(text) {\n\t\tarray.push({type: \"text\", text: text});\n\t}\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar target;\n\tif(type === \"only\") {\n\t\ttarget = true;\n\t} else if(type === \"except\") {\n\t\ttarget = false;\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif((names.indexOf(ruleArray[t].rule.name) === -1) === target) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/pluginswitcher.js": {
"title": "$:/core/modules/pluginswitcher.js",
"text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\nonSwitch: callback when plugin is switched (single parameter is array of plugin titles)\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\tthis.onSwitch = options.onSwitch;\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Read the plugin info for the incoming plugins\n\tvar changes = $tw.wiki.readPluginInfo(plugins);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Call the switch handler\n\tif(this.onSwitch) {\n\t\tthis.onSwitch(plugins);\n\t}\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/saver-handler.js": {
"title": "$:/core/modules/saver-handler.js",
"text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.preloadDirty = options.preloadDirty || [];\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(self.preloadDirty,function(title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t});\n\t\tthis.numChanges = filteredChanges.length;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\";\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && ($tw.config.disableAutoSave || this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\")) {\n\t\treturn false;\n\t}\n\tvar\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tvar self = this;\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t\t$tw.utils.each($tw.windows,function(win) {\n\t\t\t$tw.utils.toggleClass(win.document.body,\"tc-dirty\",self.isDirty());\n\t\t});\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/savers/andtidwiki.js": {
"title": "$:/core/modules/savers/andtidwiki.js",
"text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback,options) {\n\tvar filename = options && options.variables ? options.variables.filename : null;\n\tif (method === \"download\") {\n\t\t// Support download\n\t\tif (window.twi.saveDownload) {\n\t\t\ttry {\n\t\t\t\twindow.twi.saveDownload(text,filename);\n\t\t\t} catch(err) {\n\t\t\t\tif (err.message === \"Method not found\") {\n\t\t\t\t\twindow.twi.saveDownload(text);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar link = document.createElement(\"a\");\n\t\t\tlink.setAttribute(\"href\",\"data:text/plain,\" + encodeURIComponent(text));\n\t\t\tif (filename) {\n\t\t\t link.setAttribute(\"download\",filename);\n\t\t\t}\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\t\t}\n\t} else if (window.twi.saveWiki) {\n\t\t// Direct save in Tiddloid\n\t\twindow.twi.saveWiki(text);\n\t} else {\n\t\t// Get the pathname of this document\n\t\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t\t// Strip the file://\n\t\tif(pathname.indexOf(\"file://\") === 0) {\n\t\t\tpathname = pathname.substr(7);\n\t\t}\n\t\t// Strip any query or location part\n\t\tvar p = pathname.indexOf(\"?\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\tp = pathname.indexOf(\"#\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\t// Save the file\n\t\twindow.twi.saveFile(pathname,text);\n\t}\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/beaker.js": {
"title": "$:/core/modules/savers/beaker.js",
"text": "/*\\\ntitle: $:/core/modules/savers/beaker.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Beaker browser's (https://beakerbrowser.com) Dat protocol (https://datproject.org/)\nCompatible with beaker >= V0.7.2\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar BeakerSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nBeakerSaver.prototype.save = function(text,method,callback) {\n\tvar dat = new DatArchive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Beaker Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Beaker Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nBeakerSaver.prototype.info = {\n\tname: \"beaker\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.DatArchive && location.protocol===\"dat:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new BeakerSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/custom.js": {
"title": "$:/core/modules/savers/custom.js",
"text": "/*\\\ntitle: $:/core/modules/savers/custom.js\ntype: application/javascript\nmodule-type: saver\n\nLooks for `window.$tw.customSaver` first on the current window, then\non the parent window (of an iframe). If present, the saver must define\n\tsave: function(text,method,callback) { ... }\nand the saver may define\n\tpriority: number\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar findSaver = function(window) {\n\ttry {\n\t\treturn window && window.$tw && window.$tw.customSaver;\n\t} catch (err) {\n\t\t// Catching the exception is the most reliable way to detect cross-origin iframe errors.\n\t\t// For example, instead of saying that `window.parent.$tw` is undefined, Firefox will throw\n\t\t// Uncaught DOMException: Permission denied to access property \"$tw\" on cross-origin object\n\t\tconsole.log({ msg: \"custom saver is disabled\", reason: err });\n\t\treturn null;\n\t}\n}\nvar saver = findSaver(window) || findSaver(window.parent) || {};\n\nvar CustomSaver = function(wiki) {\n};\n\nCustomSaver.prototype.save = function(text,method,callback) {\n\treturn saver.save(text, method, callback);\n};\n\n/*\nInformation about this saver\n*/\nCustomSaver.prototype.info = {\n\tname: \"custom\",\n\tpriority: saver.priority || 4000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!(saver.save);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new CustomSaver(wiki);\n};\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/download.js": {
"title": "$:/core/modules/savers/download.js",
"text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\t// We decode the pathname because document.location is URL encoded by the browser\n\t\t\tfilename = decodeURIComponent(document.location.pathname.substr(p+1));\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100\n};\n\nObject.defineProperty(DownloadSaver.prototype.info, \"capabilities\", {\n\tget: function() {\n\t\tvar capabilities = [\"save\", \"download\"];\n\t\tif(($tw.wiki.getTextReference(\"$:/config/DownloadSaver/AutoSave\") || \"\").toLowerCase() === \"yes\") {\n\t\t\tcapabilities.push(\"autosave\");\n\t\t}\n\t\treturn capabilities;\n\t}\n});\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/fsosaver.js": {
"title": "$:/core/modules/savers/fsosaver.js",
"text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/gitea.js": {
"title": "$:/core/modules/savers/gitea.js",
"text": "/*\\\ntitle: $:/core/modules/savers/gitea.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the gitea\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GiteaSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGiteaSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/Gitea/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"Gitea\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/Gitea/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/Gitea/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/Gitea/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/Gitea/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/Gitea/ServerURL\") || \"https://gitea\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"token \" + password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar use_put = true;\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(sha === \"\"){\n\t\t\t\t\tuse_put = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: endpoint + \"/repos/\" + repo + \"/branches/\" + branch,\n\t\t\t\ttype: \"GET\",\n\t\t\t\theaders: headers,\n\t\t\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\t\t\tif(xhr.status === 404) {\n\t\t\t\t\t\tcallback(\"Please ensure the branch in the Gitea repo exists\");\n\t\t\t\t\t}else{\n\t\t\t\t\t\tdata[\"branch\"] = branch;\n\t\t\t\t\t\tself.upload(uri + filename, use_put?\"PUT\":\"POST\", headers, data, callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\nGiteaSaver.prototype.upload = function(uri,method,headers,data,callback) {\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: method,\n\t\theaders: headers,\n\t\tdata: JSON.stringify(data),\n\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\tcallback(null);\n\t\t}\n\t});\n};\n\n/*\nInformation about this saver\n*/\nGiteaSaver.prototype.info = {\n\tname: \"Gitea\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GiteaSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/github.js": {
"title": "$:/core/modules/savers/github.js",
"text": "/*\\\ntitle: $:/core/modules/savers/github.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitHub v3 REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitHubSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitHubSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitHub/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"github\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitHub/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitHub/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitHub/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitHub/Branch\") || \"main\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitHub/ServerURL\") || \"https://api.github.com\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/vnd.github.v3+json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"Basic \" + window.btoa(username + \":\" + password),\n\t\t\t\"If-None-Match\": \"\"\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a PUT request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + filename,\n\t\t\t\ttype: \"PUT\",\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitHubSaver.prototype.info = {\n\tname: \"github\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitHubSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/gitlab.js": {
"title": "$:/core/modules/savers/gitlab.js",
"text": "/*\\\ntitle: $:/core/modules/savers/gitlab.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitLab REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: true */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitLabSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitLabSaver.prototype.save = function(text,method,callback) {\n\t/* See https://docs.gitlab.com/ee/api/repository_files.html */\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitLab/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"gitlab\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitLab/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitLab/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitLab/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitLab/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitLab/ServerURL\") || \"https://gitlab.com/api/v4\",\n\t\theaders = {\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Private-Token\": password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/projects/\" + encodeURIComponent(repo) + \"/repository/\";\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri + \"tree/?path=\" + encodeURIComponent(path.replace(/^\\/+|\\/$/g, '')) + \"&branch=\" + encodeURIComponent(branch.replace(/^\\/+|\\/$/g, '')),\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar requestType = \"POST\";\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\trequestType = \"PUT\";\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tcommit_message: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: text,\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + \"files/\" + encodeURIComponent(path.replace(/^\\/+/, '') + filename),\n\t\t\t\ttype: requestType,\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitLabSaver.prototype.info = {\n\tname: \"gitlab\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitLabSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/hyperdrive.js": {
"title": "$:/core/modules/savers/hyperdrive.js",
"text": "/*\\\ntitle: $:/core/modules/savers/hyperdrive.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Hyperdrive Protocol (https://hypercore-protocol.org/#hyperdrive) Beaker browser beta-1.0 and later (https://beakerbrowser.com)\nCompatible with beaker >= V1.0.0\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar HyperdriveSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nHyperdriveSaver.prototype.save = function(text,method,callback) {\n\tvar dat = beaker.hyperdrive.drive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Hyperdrive Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Hyperdrive Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nHyperdriveSaver.prototype.info = {\n\tname: \"beaker-1.x\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.beaker && !!beaker.hyperdrive && location.protocol===\"hyper:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new HyperdriveSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/manualdownload.js": {
"title": "$:/core/modules/savers/manualdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/msdownload.js": {
"title": "$:/core/modules/savers/msdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/put.js": {
"title": "$:/core/modules/savers/put.js",
"text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRetrieve ETag if available\n*/\nvar retrieveETag = function(self) {\n\tvar headers = {\n\t\tAccept: \"*/*;charset=UTF-8\"\n\t};\n\t$tw.utils.httpRequest({\n\t\turl: self.uri(),\n\t\ttype: \"HEAD\",\n\t\theaders: headers,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar etag = xhr.getResponseHeader(\"ETag\");\n\t\t\tif(!etag) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.etag = etag.replace(/^W\\//,\"\");\n\t\t}\n\t});\n};\n\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\tvar uri = this.uri();\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"OPTIONS\",\n\t\tcallback: function(err,data,xhr) {\n\t\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\t\tif(!err) {\n\t\t\t\tself.serverAcceptsPuts = xhr.status === 200 && !!xhr.getResponseHeader(\"dav\");\n\t\t\t}\n\t\t}\n\t});\n\tretrieveETag(this);\n};\n\nPutSaver.prototype.uri = function() {\n\treturn document.location.toString().split(\"#\")[0];\n};\n\n// TODO: in case of edit conflict\n// Prompt: Do you want to save over this? Y/N\n// Merging would be ideal, and may be possible using future generic merge flow\nPutSaver.prototype.save = function(text,method,callback) {\n\tif(!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tvar headers = {\n\t\t\"Content-Type\": \"text/html;charset=UTF-8\"\n\t};\n\tif(this.etag) {\n\t\theaders[\"If-Match\"] = this.etag;\n\t}\n\t$tw.utils.httpRequest({\n\t\turl: this.uri(),\n\t\ttype: \"PUT\",\n\t\theaders: headers,\n\t\tdata: text,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\t// response is textual: \"XMLHttpRequest error code: 412\"\n\t\t\t\tvar status = Number(err.substring(err.indexOf(':') + 2, err.length))\n\t\t\t\tif(status === 412) { // file changed on server\n\t\t\t\t\tcallback($tw.language.getString(\"Error/PutEditConflict\"));\n\t\t\t\t} else if(status === 401) { // authentication required\n\t\t\t\t\tcallback($tw.language.getString(\"Error/PutUnauthorized\"));\n\t\t\t\t} else if(status === 403) { // permission denied\n\t\t\t\t\tcallback($tw.language.getString(\"Error/PutForbidden\"));\n\t\t\t\t} else {\n\t\t\t\t\tcallback(err); // fail\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.etag = xhr.getResponseHeader(\"ETag\");\n\t\t\t\tif(self.etag == null) {\n\t\t\t\t\tretrieveETag(self);\n\t\t\t\t}\n\t\t\t\tcallback(null); // success\n\t\t\t}\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyfox.js": {
"title": "$:/core/modules/savers/tiddlyfox.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyie.js": {
"title": "$:/core/modules/savers/tiddlyie.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/twedit.js": {
"title": "$:/core/modules/savers/twedit.js",
"text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/upload.js": {
"title": "$:/core/modules/savers/upload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\tuploadWithUrlOnly = this.wiki.getTextReference(\"$:/UploadWithUrlOnly\") || \"no\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif (uploadWithUrlOnly === \"yes\") {\n\t\t// The url is good enough. No need for a username and password.\n\t\t// Assume the server uses some other kind of auth mechanism.\n\t\tif(!url || url.toString().trim() === \"\") {\n\t\t\treturn false;\n\t\t}\n\t}\n\telse {\n\t\t// Require username and password to be present.\n\t\t// Assume the server uses the standard UploadPlugin username/password.\n\t\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/server/authenticators/basic.js": {
"title": "$:/core/modules/server/authenticators/basic.js",
"text": "/*\\\ntitle: $:/core/modules/server/authenticators/basic.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for WWW basic authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\");\n}\n\nfunction BasicAuthenticator(server) {\n\tthis.server = server;\n\tthis.credentialsData = [];\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nBasicAuthenticator.prototype.init = function() {\n\t// Read the credentials data\n\tthis.credentialsFilepath = this.server.get(\"credentials\");\n\tif(this.credentialsFilepath) {\n\t\tvar resolveCredentialsFilepath = path.resolve(this.server.boot.wikiPath,this.credentialsFilepath);\n\t\tif(fs.existsSync(resolveCredentialsFilepath) && !fs.statSync(resolveCredentialsFilepath).isDirectory()) {\n\t\t\tvar credentialsText = fs.readFileSync(resolveCredentialsFilepath,\"utf8\"),\n\t\t\t\tcredentialsData = $tw.utils.parseCsvStringWithHeader(credentialsText);\n\t\t\tif(typeof credentialsData === \"string\") {\n\t\t\t\treturn \"Error: \" + credentialsData + \" reading credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t\t} else {\n\t\t\t\tthis.credentialsData = credentialsData;\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"Error: Unable to load user credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t}\n\t}\n\t// Add the hardcoded username and password if specified\n\tif(this.server.get(\"username\") && this.server.get(\"password\")) {\n\t\tthis.credentialsData = this.credentialsData || [];\n\t\tthis.credentialsData.push({\n\t\t\tusername: this.server.get(\"username\"),\n\t\t\tpassword: this.server.get(\"password\")\n\t\t});\n\t}\n\treturn this.credentialsData.length > 0;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nBasicAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Extract the incoming username and password from the request\n\tvar header = request.headers.authorization || \"\";\n\tif(!header && state.allowAnon) {\n\t\t// If there's no header and anonymous access is allowed then we don't set authenticatedUsername\n\t\treturn true;\n\t}\n\tvar token = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tincomingUsername = parts[0],\n\t\tincomingPassword = parts[1];\n\t// Check that at least one of the credentials matches\n\tvar matchingCredentials = this.credentialsData.find(function(credential) {\n\t\treturn credential.username === incomingUsername && credential.password === incomingPassword;\n\t});\n\tif(matchingCredentials) {\n\t\t// If so, add the authenticated username to the request state\n\t\tstate.authenticatedUsername = incomingUsername;\n\t\treturn true;\n\t} else {\n\t\t// If not, return an authentication challenge\n\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\n\t\treturn false;\n\t}\n};\n\nexports.AuthenticatorClass = BasicAuthenticator;\n\n})();\n",
"type": "application/javascript",
"module-type": "authenticator"
},
"$:/core/modules/server/authenticators/header.js": {
"title": "$:/core/modules/server/authenticators/header.js",
"text": "/*\\\ntitle: $:/core/modules/server/authenticators/header.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for trusted header authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction HeaderAuthenticator(server) {\n\tthis.server = server;\n\tthis.header = server.get(\"authenticated-user-header\") ? server.get(\"authenticated-user-header\").toLowerCase() : undefined;\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nHeaderAuthenticator.prototype.init = function() {\n\treturn !!this.header;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nHeaderAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Otherwise, authenticate as the username in the specified header\n\tvar username = request.headers[this.header];\n\tif(!username && !state.allowAnon) {\n\t\tresponse.writeHead(401,\"Authorization header required to login to '\" + state.server.servername + \"'\");\n\t\tresponse.end();\n\t\treturn false;\n\t} else {\n\t\t// authenticatedUsername will be undefined for anonymous users\n\t\tstate.authenticatedUsername = username;\n\t\treturn true;\n\t}\n};\n\nexports.AuthenticatorClass = HeaderAuthenticator;\n\n})();\n",
"type": "application/javascript",
"module-type": "authenticator"
},
"$:/core/modules/server/routes/delete-tiddler.js": {
"title": "$:/core/modules/server/routes/delete-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/delete-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nDELETE /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"DELETE\";\n\nexports.path = /^\\/bags\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]);\n\tstate.wiki.deleteTiddler(title);\n\tresponse.writeHead(204, \"OK\", {\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-favicon.js": {
"title": "$:/core/modules/server/routes/get-favicon.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-favicon.js\ntype: application/javascript\nmodule-type: route\n\nGET /favicon.ico\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/favicon.ico$/;\n\nexports.handler = function(request,response,state) {\n\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\tstate.sendResponse(200,{\"Content-Type\": \"image/x-icon\"},buffer,\"base64\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-file.js": {
"title": "$:/core/modules/server/routes/get-file.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-file.js\ntype: application/javascript\nmodule-type: route\n\nGET /files/:filepath\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/files\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar path = require(\"path\"),\n\t\tfs = require(\"fs\"),\n\t\tutil = require(\"util\"),\n\t\tsuppliedFilename = decodeURIComponent(state.params[0]),\n\t\tfilename = path.resolve(state.boot.wikiPath,\"files\",suppliedFilename),\n\t\textension = path.extname(filename);\n\tfs.readFile(filename,function(err,content) {\n\t\tvar status,content,type = \"text/plain\";\n\t\tif(err) {\n\t\t\tconsole.log(\"Error accessing file \" + filename + \": \" + err.toString());\n\t\t\tstatus = 404;\n\t\t\tcontent = \"File '\" + suppliedFilename + \"' not found\";\n\t\t} else {\n\t\t\tstatus = 200;\n\t\t\tcontent = content;\n\t\t\ttype = ($tw.config.fileExtensionInfo[extension] ? $tw.config.fileExtensionInfo[extension].type : \"application/octet-stream\");\n\t\t}\n\t\tstate.sendResponse(status,{\"Content-Type\": type},content);\n\t});\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-index.js": {
"title": "$:/core/modules/server/routes/get-index.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-index.js\ntype: application/javascript\nmodule-type: route\n\nGET /\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/$/;\n\nexports.handler = function(request,response,state) {\n\tvar text = state.wiki.renderTiddler(state.server.get(\"root-render-type\"),state.server.get(\"root-tiddler\")),\n\t\tresponseHeaders = {\n\t\t\"Content-Type\": state.server.get(\"root-serve-type\")\n\t};\n\tstate.sendResponse(200,responseHeaders,text);\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-login-basic.js": {
"title": "$:/core/modules/server/routes/get-login-basic.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-login-basic.js\ntype: application/javascript\nmodule-type: route\n\nGET /login-basic -- force a Basic Authentication challenge\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/login-basic$/;\n\nexports.handler = function(request,response,state) {\n\tif(!state.authenticatedUsername) {\n\t\t// Challenge if there's no username\n\t\tresponse.writeHead(401,{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\n\t} else {\n\t\t// Redirect to the root wiki if login worked\n\t\tvar location = ($tw.syncadaptor && $tw.syncadaptor.host)? $tw.syncadaptor.host: \"/\";\n\t\tresponse.writeHead(302,{\n\t\t\tLocation: location\n\t\t});\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-status.js": {
"title": "$:/core/modules/server/routes/get-status.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-status.js\ntype: application/javascript\nmodule-type: route\n\nGET /status\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/status$/;\n\nexports.handler = function(request,response,state) {\n\tvar text = JSON.stringify({\n\t\tusername: state.authenticatedUsername || state.server.get(\"anon-username\") || \"\",\n\t\tanonymous: !state.authenticatedUsername,\n\t\tread_only: !state.server.isAuthorized(\"writers\",state.authenticatedUsername),\n\t\tsse_enabled: state.server.get(\"sse-enabled\") === \"yes\",\n\t\tspace: {\n\t\t\trecipe: \"default\"\n\t\t},\n\t\ttiddlywiki_version: $tw.version\n\t});\n\tstate.sendResponse(200,{\"Content-Type\": \"application/json\"},text,\"utf8\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddler-html.js": {
"title": "$:/core/modules/server/routes/get-tiddler-html.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler-html.js\ntype: application/javascript\nmodule-type: route\n\nGET /:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/([^\\/]+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar renderType = tiddler.getFieldString(\"_render_type\"),\n\t\t\trenderTemplate = tiddler.getFieldString(\"_render_template\");\n\t\t// Tiddler fields '_render_type' and '_render_template' overwrite\n\t\t// system wide settings for render type and template\n\t\tif(state.wiki.isSystemTiddler(title)) {\n\t\t\trenderType = renderType || state.server.get(\"system-tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"system-tiddler-render-template\");\n\t\t} else {\n\t\t\trenderType = renderType || state.server.get(\"tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"tiddler-render-template\");\n\t\t}\n\t\tvar text = state.wiki.renderTiddler(renderType,renderTemplate,{parseAsInline: true, variables: {currentTiddler: title}});\n\n\t\t// Naughty not to set a content-type, but it's the easiest way to ensure the browser will see HTML pages as HTML, and accept plain text tiddlers as CSS or JS\n\t\tstate.sendResponse(200,{},text,\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddler.js": {
"title": "$:/core/modules/server/routes/get-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title),\n\t\ttiddlerFields = {},\n\t\tknownFields = [\n\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t];\n\tif(tiddler) {\n\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\ttiddlerFields[name] = value;\n\t\t\t} else {\n\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t}\n\t\t});\n\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\ttiddlerFields.bag = \"default\";\n\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\tstate.sendResponse(200,{\"Content-Type\": \"application/json\"},JSON.stringify(tiddlerFields),\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddlers-json.js": {
"title": "$:/core/modules/server/routes/get-tiddlers-json.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddlers-json.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers.json?filter=<filter>\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_FILTER = \"[all[tiddlers]!is[system]sort[title]]\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers.json$/;\n\nexports.handler = function(request,response,state) {\n\tvar filter = state.queryParameters.filter || DEFAULT_FILTER;\n\tif(state.wiki.getTiddlerText(\"$:/config/Server/AllowAllExternalFilters\") !== \"yes\") {\n\t\tif(state.wiki.getTiddlerText(\"$:/config/Server/ExternalFilters/\" + filter) !== \"yes\") {\n\t\t\tconsole.log(\"Blocked attempt to GET /recipes/default/tiddlers.json with filter: \" + filter);\n\t\t\tresponse.writeHead(403);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t}\n\tif(state.wiki.getTiddlerText(\"$:/config/SyncSystemTiddlersFromServer\") === \"no\") {\n\t\tfilter += \"+[!is[system]]\";\n\t}\n\tvar excludeFields = (state.queryParameters.exclude || \"text\").split(\",\"),\n\t\ttitles = state.wiki.filterTiddlers(filter);\n\tvar tiddlers = [];\n\t$tw.utils.each(titles,function(title) {\n\t\tvar tiddler = state.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar tiddlerFields = tiddler.getFieldStrings({exclude: excludeFields});\n\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\ttiddlers.push(tiddlerFields);\n\t\t}\n\t});\n\tvar text = JSON.stringify(tiddlers);\n\tstate.sendResponse(200,{\"Content-Type\": \"application/json\"},text,\"utf8\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/put-tiddler.js": {
"title": "$:/core/modules/server/routes/put-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/put-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nPUT /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"PUT\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\tfields = JSON.parse(state.data);\n\t// Pull up any subfields in the `fields` object\n\tif(fields.fields) {\n\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\tfields[name] = field;\n\t\t});\n\t\tdelete fields.fields;\n\t}\n\t// Remove any revision field\n\tif(fields.revision) {\n\t\tdelete fields.revision;\n\t}\n\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\tresponse.writeHead(204, \"OK\",{\n\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/server-sent-events.js": {
"title": "$:/core/modules/server/server-sent-events.js",
"text": "/*\\\ntitle: $:/core/modules/server/server-sent-events.js\ntype: application/javascript\nmodule-type: library\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nparameters:\n\t\tprefix - usually the plugin path, such as `plugins/tiddlywiki/tiddlyweb`. The\n\t\t\troute will match `/events/${prefix}` exactly.\n\n\t\thandler - a function that will be called each time a request comes in with the\n\t\t\trequest and state from the route and an emit function to call.\n*/\n\nvar ServerSentEvents = function ServerSentEvents(prefix, handler) {\n\tthis.handler = handler;\n\tthis.prefix = prefix;\n};\n\nServerSentEvents.prototype.getExports = function() {\n\treturn {\n\t\tbodyFormat: \"stream\",\n\t\tmethod: \"GET\",\n\t\tpath: new RegExp(\"^/events/\" + this.prefix + \"$\"),\n\t\thandler: this.handleEventRequest.bind(this)\n\t};\n};\n\nServerSentEvents.prototype.handleEventRequest = function(request,response,state) {\n\tif(ServerSentEvents.prototype.isEventStreamRequest(request)) {\n\t\tresponse.writeHead(200, {\n\t\t\t\"Content-Type\": \"text/event-stream\",\n\t\t\t\"Cache-Control\": \"no-cache\",\n\t\t\t\"Connection\": \"keep-alive\"\n\t\t});\n\t\tthis.handler(request,state,this.emit.bind(this,response),this.end.bind(this,response));\n\t} else {\n\t\tresponse.writeHead(406,\"Not Acceptable\",{});\n\t\tresponse.end();\n\t}\n};\n\nServerSentEvents.prototype.isEventStreamRequest = function(request) {\n\treturn request.headers.accept &&\n\t\trequest.headers.accept.match(/^text\\/event-stream/);\n};\n\nServerSentEvents.prototype.emit = function(response,event,data) {\n\tif(typeof event !== \"string\" || event.indexOf(\"\\n\") !== -1) {\n\t\tthrow new Error(\"Type must be a single-line string\");\n\t}\n\tif(typeof data !== \"string\" || data.indexOf(\"\\n\") !== -1) {\n\t\tthrow new Error(\"Data must be a single-line string\");\n\t}\n\tresponse.write(\"event: \" + event + \"\\ndata: \" + data + \"\\n\\n\", \"utf8\");\n};\n\nServerSentEvents.prototype.end = function(response) {\n\tresponse.end();\n};\n\nexports.ServerSentEvents = ServerSentEvents;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/server/server.js": {
"title": "$:/core/modules/server/server.js",
"text": "/*\\\ntitle: $:/core/modules/server/server.js\ntype: application/javascript\nmodule-type: library\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\tquerystring = require(\"querystring\"),\n\t\tcrypto = require(\"crypto\"),\n\t\tzlib = require(\"zlib\");\n}\n\n/*\nA simple HTTP server with regexp-based routes\noptions: variables - optional hashmap of variables to set (a misnomer - they are really constant parameters)\n\t\t routes - optional array of routes to use\n\t\t wiki - reference to wiki object\n*/\nfunction Server(options) {\n\tvar self = this;\n\tthis.routes = options.routes || [];\n\tthis.authenticators = options.authenticators || [];\n\tthis.wiki = options.wiki;\n\tthis.boot = options.boot || $tw.boot;\n\tthis.servername = $tw.utils.transliterateToSafeASCII(this.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\");\n\t// Initialise the variables\n\tthis.variables = $tw.utils.extend({},this.defaultVariables);\n\tif(options.variables) {\n\t\tfor(var variable in options.variables) {\n\t\t\tif(options.variables[variable]) {\n\t\t\t\tthis.variables[variable] = options.variables[variable];\n\t\t\t}\n\t\t}\n\t}\n\t$tw.utils.extend({},this.defaultVariables,options.variables);\n\t// Initialise CSRF\n\tthis.csrfDisable = this.get(\"csrf-disable\") === \"yes\";\n\t// Initialize Gzip compression\n\tthis.enableGzip = this.get(\"gzip\") === \"yes\";\n\t// Initialize browser-caching\n\tthis.enableBrowserCache = this.get(\"use-browser-cache\") === \"yes\";\n\t// Initialise authorization\n\tvar authorizedUserName = (this.get(\"username\") && this.get(\"password\")) ? this.get(\"username\") : \"(anon)\";\n\tthis.authorizationPrincipals = {\n\t\treaders: (this.get(\"readers\") || authorizedUserName).split(\",\").map($tw.utils.trim),\n\t\twriters: (this.get(\"writers\") || authorizedUserName).split(\",\").map($tw.utils.trim)\n\t}\n\t// Load and initialise authenticators\n\t$tw.modules.forEachModuleOfType(\"authenticator\", function(title,authenticatorDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addAuthenticator(authenticatorDefinition.AuthenticatorClass);\n\t});\n\t// Load route handlers\n\t$tw.modules.forEachModuleOfType(\"route\", function(title,routeDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addRoute(routeDefinition);\n\t});\n\t// Initialise the http vs https\n\tthis.listenOptions = null;\n\tthis.protocol = \"http\";\n\tvar tlsKeyFilepath = this.get(\"tls-key\"),\n\t\ttlsCertFilepath = this.get(\"tls-cert\");\n\tif(tlsCertFilepath && tlsKeyFilepath) {\n\t\tthis.listenOptions = {\n\t\t\tkey: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsKeyFilepath),\"utf8\"),\n\t\t\tcert: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsCertFilepath),\"utf8\")\n\t\t};\n\t\tthis.protocol = \"https\";\n\t}\n\tthis.transport = require(this.protocol);\n}\n\n/*\nSend a response to the client. This method checks if the response must be sent\nor if the client alrady has the data cached. If that's the case only a 304\nresponse will be transmitted and the browser will use the cached data.\nOnly requests with status code 200 are considdered for caching.\nrequest: request instance passed to the handler\nresponse: response instance passed to the handler\nstatusCode: stauts code to send to the browser\nheaders: response headers (they will be augmented with an `Etag` header)\ndata: the data to send (passed to the end method of the response instance)\nencoding: the encoding of the data to send (passed to the end method of the response instance)\n*/\nfunction sendResponse(request,response,statusCode,headers,data,encoding) {\n\tif(this.enableBrowserCache && (statusCode == 200)) {\n\t\tvar hash = crypto.createHash('md5');\n\t\t// Put everything into the hash that could change and invalidate the data that\n\t\t// the browser already stored. The headers the data and the encoding.\n\t\thash.update(data);\n\t\thash.update(JSON.stringify(headers));\n\t\tif(encoding) {\n\t\t\thash.update(encoding);\n\t\t}\n\t\tvar contentDigest = hash.digest(\"hex\");\n\t\t// RFC 7232 section 2.3 mandates for the etag to be enclosed in quotes\n\t\theaders[\"Etag\"] = '\"' + contentDigest + '\"';\n\t\theaders[\"Cache-Control\"] = \"max-age=0, must-revalidate\";\n\t\t// Check if any of the hashes contained within the if-none-match header\n\t\t// matches the current hash.\n\t\t// If one matches, do not send the data but tell the browser to use the\n\t\t// cached data.\n\t\t// We do not implement \"*\" as it makes no sense here.\n\t\tvar ifNoneMatch = request.headers[\"if-none-match\"];\n\t\tif(ifNoneMatch) {\n\t\t\tvar matchParts = ifNoneMatch.split(\",\").map(function(etag) {\n\t\t\t\treturn etag.replace(/^[ \"]+|[ \"]+$/g, \"\");\n\t\t\t});\n\t\t\tif(matchParts.indexOf(contentDigest) != -1) {\n\t\t\t\tresponse.writeHead(304,headers);\n\t\t\t\tresponse.end();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\t/*\n\tIf the gzip=yes is set, check if the user agent permits compression. If so,\n\tcompress our response if the raw data is bigger than 2k. Compressing less\n\tdata is inefficient. Note that we use the synchronous functions from zlib\n\tto stay in the imperative style. The current `Server` doesn't depend on\n\tthis, and we may just as well use the async versions.\n\t*/\n\tif(this.enableGzip && (data.length > 2048)) {\n\t\tvar acceptEncoding = request.headers[\"accept-encoding\"] || \"\";\n\t\tif(/\\bdeflate\\b/.test(acceptEncoding)) {\n\t\t\theaders[\"Content-Encoding\"] = \"deflate\";\n\t\t\tdata = zlib.deflateSync(data);\n\t\t} else if(/\\bgzip\\b/.test(acceptEncoding)) {\n\t\t\theaders[\"Content-Encoding\"] = \"gzip\";\n\t\t\tdata = zlib.gzipSync(data);\n\t\t}\n\t}\n\n\tresponse.writeHead(statusCode,headers);\n\tresponse.end(data,encoding);\n}\n\nServer.prototype.defaultVariables = {\n\tport: \"8080\",\n\thost: \"127.0.0.1\",\n\t\"root-tiddler\": \"$:/core/save/all\",\n\t\"root-render-type\": \"text/plain\",\n\t\"root-serve-type\": \"text/html\",\n\t\"tiddler-render-type\": \"text/html\",\n\t\"tiddler-render-template\": \"$:/core/templates/server/static.tiddler.html\",\n\t\"system-tiddler-render-type\": \"text/plain\",\n\t\"system-tiddler-render-template\": \"$:/core/templates/wikified-tiddler\",\n\t\"debug-level\": \"none\",\n\t\"gzip\": \"no\",\n\t\"use-browser-cache\": \"no\"\n};\n\nServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nServer.prototype.addAuthenticator = function(AuthenticatorClass) {\n\t// Instantiate and initialise the authenticator\n\tvar authenticator = new AuthenticatorClass(this),\n\t\tresult = authenticator.init();\n\tif(typeof result === \"string\") {\n\t\t$tw.utils.error(\"Error: \" + result);\n\t} else if(result) {\n\t\t// Only use the authenticator if it initialised successfully\n\t\tthis.authenticators.push(authenticator);\n\t}\n};\n\nServer.prototype.findMatchingRoute = function(request,state) {\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(state.pathPrefix) {\n\t\t\tif(pathname.substr(0,state.pathPrefix.length) === state.pathPrefix) {\n\t\t\t\tpathname = pathname.substr(state.pathPrefix.length) || \"/\";\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nServer.prototype.methodMappings = {\n\t\"GET\": \"readers\",\n\t\"OPTIONS\": \"readers\",\n\t\"HEAD\": \"readers\",\n\t\"PUT\": \"writers\",\n\t\"POST\": \"writers\",\n\t\"DELETE\": \"writers\"\n};\n\n/*\nCheck whether a given user is authorized for the specified authorizationType (\"readers\" or \"writers\"). Pass null or undefined as the username to check for anonymous access\n*/\nServer.prototype.isAuthorized = function(authorizationType,username) {\n\tvar principals = this.authorizationPrincipals[authorizationType] || [];\n\treturn principals.indexOf(\"(anon)\") !== -1 || (username && (principals.indexOf(\"(authenticated)\") !== -1 || principals.indexOf(username) !== -1));\n}\n\nServer.prototype.requestHandler = function(request,response,options) {\n\toptions = options || {};\n\t// Compose the state object\n\tvar self = this;\n\tvar state = {};\n\tstate.wiki = options.wiki || self.wiki;\n\tstate.boot = options.boot || self.boot;\n\tstate.server = self;\n\tstate.urlInfo = url.parse(request.url);\n\tstate.queryParameters = querystring.parse(state.urlInfo.query);\n\tstate.pathPrefix = options.pathPrefix || this.get(\"path-prefix\") || \"\";\n\tstate.sendResponse = sendResponse.bind(self,request,response);\n\t// Get the principals authorized to access this resource\n\tvar authorizationType = this.methodMappings[request.method] || \"readers\";\n\t// Check for the CSRF header if this is a write\n\tif(!this.csrfDisable && authorizationType === \"writers\" && request.headers[\"x-requested-with\"] !== \"TiddlyWiki\") {\n\t\tresponse.writeHead(403,\"'X-Requested-With' header required to login to '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Check whether anonymous access is granted\n\tstate.allowAnon = this.isAuthorized(authorizationType,null);\n\t// Authenticate with the first active authenticator\n\tif(this.authenticators.length > 0) {\n\t\tif(!this.authenticators[0].authenticateRequest(request,response,state)) {\n\t\t\t// Bail if we failed (the authenticator will have sent the response)\n\t\t\treturn;\n\t\t}\n\t}\n\t// Authorize with the authenticated username\n\tif(!this.isAuthorized(authorizationType,state.authenticatedUsername)) {\n\t\tresponse.writeHead(401,\"'\" + state.authenticatedUsername + \"' is not authorized to access '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Find the route that matches this path\n\tvar route = self.findMatchingRoute(request,state);\n\t// Optionally output debug info\n\tif(self.get(\"debug-level\") !== \"none\") {\n\t\tconsole.log(\"Request path:\",JSON.stringify(state.urlInfo));\n\t\tconsole.log(\"Request headers:\",JSON.stringify(request.headers));\n\t\tconsole.log(\"authenticatedUsername:\",state.authenticatedUsername);\n\t}\n\t// Return a 404 if we didn't find a route\n\tif(!route) {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Receive the request body if necessary and hand off to the route handler\n\tif(route.bodyFormat === \"stream\" || request.method === \"GET\" || request.method === \"HEAD\") {\n\t\t// Let the route handle the request stream itself\n\t\troute.handler(request,response,state);\n\t} else if(route.bodyFormat === \"string\" || !route.bodyFormat) {\n\t\t// Set the encoding for the incoming request\n\t\trequest.setEncoding(\"utf8\");\n\t\tvar data = \"\";\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata += chunk.toString();\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = data;\n\t\t\troute.handler(request,response,state);\n\t\t});\n\t} else if(route.bodyFormat === \"buffer\") {\n\t\tvar data = [];\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata.push(chunk);\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = Buffer.concat(data);\n\t\t\troute.handler(request,response,state);\n\t\t})\n\t} else {\n\t\tresponse.writeHead(400,\"Invalid bodyFormat \" + route.bodyFormat + \" in route \" + route.method + \" \" + route.path.source);\n\t\tresponse.end();\n\t}\n};\n\n/*\nListen for requests\nport: optional port number (falls back to value of \"port\" variable)\nhost: optional host address (falls back to value of \"host\" variable)\nprefix: optional prefix (falls back to value of \"path-prefix\" variable)\n*/\nServer.prototype.listen = function(port,host,prefix) {\n\tvar self = this;\n\t// Handle defaults for port and host\n\tport = port || this.get(\"port\");\n\thost = host || this.get(\"host\");\n\tprefix = prefix || this.get(\"path-prefix\") || \"\";\n\t// Check for the port being a string and look it up as an environment variable\n\tif(parseInt(port,10).toString() !== port) {\n\t\tport = process.env[port] || 8080;\n\t}\n\t// Warn if required plugins are missing\n\tif(!this.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !this.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\t// Create the server\n\tvar server;\n\tif(this.listenOptions) {\n\t\tserver = this.transport.createServer(this.listenOptions,this.requestHandler.bind(this));\n\t} else {\n\t\tserver = this.transport.createServer(this.requestHandler.bind(this));\n\t}\n\t// Display the port number after we've started listening (the port number might have been specified as zero, in which case we will get an assigned port)\n\tserver.on(\"listening\",function() {\n\t\tvar address = server.address();\n\t\t$tw.utils.log(\"Serving on \" + self.protocol + \"://\" + address.address + \":\" + address.port + prefix,\"brown/orange\");\n\t\t$tw.utils.log(\"(press ctrl-C to exit)\",\"red\");\n\t});\n\t// Listen\n\treturn server.listen(port,host);\n};\n\nexports.Server = Server;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/browser-messaging.js": {
"title": "$:/core/modules/browser-messaging.js",
"text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\");\n\t\tiframeInfo = {\n\t\t\turl: url,\n\t\t\tstatus: \"loading\",\n\t\t\tdomNode: iframe\n\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tiframe.setAttribute(\"library\",\"true\");\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\n/*\nUnload library iframe for given url\n*/\nfunction unloadIFrame(url){\n\t$tw.utils.each(document.getElementsByTagName('iframe'), function(iframe) {\n\t\tif(iframe.getAttribute(\"library\") === \"true\" &&\n\t\t iframe.getAttribute(\"src\") === url) {\n\t\t\tiframe.parentNode.removeChild(iframe);\n\t\t}\n\t});\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for widget messages to control unloading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-unload-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\t$tw.browserMessaging.iframeInfoMap[url] = undefined;\n\t\tif(url) {\n\t\t\tunloadIFrame(url);\n\t\t\t$tw.utils.each(\n\t\t\t\t$tw.wiki.filterTiddlers(\"[[$:/temp/ServerConnection/\" + url + \"]] [prefix[$:/temp/RemoteAssetInfo/\" + url + \"/]]\"),\n\t\t\t\tfunction(title) {\n\t\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\t// console.log(\"browser-messaging: \",document.location.toString())\n\t\t// console.log(\"browser-messaging: Received message from\",event.origin);\n\t\t// console.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/commands.js": {
"title": "$:/core/modules/startup/commands.js",
"text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/favicon.js": {
"title": "$:/core/modules/startup/favicon.js",
"text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",$tw.utils.makeDataUri(tiddler.fields.text,tiddler.fields.type,tiddler.fields._canonical_uri));\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/info.js": {
"title": "$:/core/modules/startup/info.js",
"text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_INFO_PLUGIN = \"$:/temp/info-plugin\";\n\nexports.startup = function() {\n\t// Function to bake the info plugin with new tiddlers\n\tvar updateInfoPlugin = function(tiddlerFieldsArray) {\n\t\t// Get the existing tiddlers\n\t\tvar json = $tw.wiki.getTiddlerData(TITLE_INFO_PLUGIN,{tiddlers: {}});\n\t\t// Add the new ones\n\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\tif(fields && fields.title) {\n\t\t\t\tjson.tiddlers[fields.title] = fields;\n\t\t\t}\n\t\t});\n\t\t// Bake the info tiddlers into a plugin. We use the non-standard plugin-type \"info\" because ordinary plugins are only registered asynchronously after being loaded dynamically\n\t\tvar fields = {\n\t\t\ttitle: TITLE_INFO_PLUGIN,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"info\",\n\t\t\ttext: JSON.stringify(json,null,$tw.config.preferences.jsonSpaces)\n\t\t};\n\t\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\n\t};\n\t// Collect up the info tiddlers\n\tvar tiddlerFieldsArray = [];\n\t// Give each info module a chance to provide as many info tiddlers as they want as an array, and give them a callback for dynamically updating them\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tArray.prototype.push.apply(tiddlerFieldsArray,moduleExports.getInfoTiddlerFields(updateInfoPlugin));\n\t\t}\n\t});\n\tupdateInfoPlugin(tiddlerFieldsArray);\n\tvar changes = $tw.wiki.readPluginInfo([TITLE_INFO_PLUGIN]);\n\t$tw.wiki.registerPluginTiddlers(\"info\",[TITLE_INFO_PLUGIN]);\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/load-modules.js": {
"title": "$:/core/modules/startup/load-modules.js",
"text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\tif($tw.browser) {\n\t\t$tw.modules.applyMethods(\"utils-browser\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.wiki.addIndexersToWiki();\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/password.js": {
"title": "$:/core/modules/startup/password.js",
"text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/plugins.js": {
"title": "$:/core/modules/startup/plugins.js",
"text": "/*\\\ntitle: $:/core/modules/startup/plugins.js\ntype: application/javascript\nmodule-type: startup\n\nStartup logic concerned with managing plugins\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"plugins\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE = \"$:/status/RequireReloadDueToPluginChange\";\n\nvar PREFIX_CONFIG_REGISTER_PLUGIN_TYPE = \"$:/config/RegisterPluginType/\";\n\nexports.startup = function() {\n\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"no\"});\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t// Work out which of the changed tiddlers are plugins that we need to reregister\n\t\tvar changesToProcess = [],\n\t\t\trequireReloadDueToPluginChange = false;\n\t\t$tw.utils.each(Object.keys(changes),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\t\trequiresReload = $tw.wiki.doesPluginRequireReload(title);\n\t\t\tif(requiresReload) {\n\t\t\t\trequireReloadDueToPluginChange = true;\n\t\t\t} else if(tiddler) {\n\t\t\t\tvar pluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif($tw.wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields[\"plugin-type\"] || \"\"),\"no\") === \"yes\") {\n\t\t\t\t\tchangesToProcess.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t// Issue warning if any of the tiddlers require a reload\n\t\tif(requireReloadDueToPluginChange) {\n\t\t\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"yes\"});\n\t\t}\n\t\t// Read or delete the plugin info of the changed tiddlers\n\t\tif(changesToProcess.length > 0) {\n\t\t\tvar changes = $tw.wiki.readPluginInfo(changesToProcess);\n\t\t\tif(changes.modifiedPlugins.length > 0 || changes.deletedPlugins.length > 0) {\n\t\t\t\tvar changedShadowTiddlers = {};\n\t\t\t\t// Collect the shadow tiddlers of any deleted plugins\n\t\t\t\t$tw.utils.each(changes.deletedPlugins,function(pluginTitle) {\n\t\t\t\t\tvar pluginInfo = $tw.wiki.getPluginInfo(pluginTitle);\n\t\t\t\t\tif(pluginInfo) {\n\t\t\t\t\t\t$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {\n\t\t\t\t\t\t\tchangedShadowTiddlers[title] = true;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// Collect the shadow tiddlers of any modified plugins\n\t\t\t\t$tw.utils.each(changes.modifiedPlugins,function(pluginTitle) {\n\t\t\t\t\tvar pluginInfo = $tw.wiki.getPluginInfo(pluginTitle);\n\t\t\t\t\tif(pluginInfo) {\n\t\t\t\t\t\t$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {\n\t\t\t\t\t\t\tchangedShadowTiddlers[title] = false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// (Re-)register any modified plugins\n\t\t\t\t$tw.wiki.registerPluginTiddlers(null,changes.modifiedPlugins);\n\t\t\t\t// Unregister any deleted plugins\n\t\t\t\t$tw.wiki.unregisterPluginTiddlers(null,changes.deletedPlugins);\n\t\t\t\t// Unpack the shadow tiddlers\n\t\t\t\t$tw.wiki.unpackPluginTiddlers();\n\t\t\t\t// Queue change events for the changed shadow tiddlers\n\t\t\t\t$tw.utils.each(Object.keys(changedShadowTiddlers),function(title) {\n\t\t\t\t\t$tw.wiki.enqueueTiddlerEvent(title,changedShadowTiddlers[title]);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/render.js": {
"title": "$:/core/modules/startup/render.js",
"text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/RootTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar THROTTLE_REFRESH_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget, recursionMarker: \"no\"});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n \t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t})();\n\t// Remove any splash screen elements\n\tvar removeList = document.querySelectorAll(\".tc-remove-when-wiki-loaded\");\n\t$tw.utils.each(removeList,function(removeItem) {\n\t\tif(removeItem.parentNode) {\n\t\t\tremoveItem.parentNode.removeChild(removeItem);\n\t\t}\n\t});\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.hooks.invokeHook(\"th-page-refreshing\");\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only tiddlers that are throttled have changed\n\t\tvar onlyThrottledTiddlersHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!$tw.wiki.isVolatileTiddler(title) && (!tiddler || !(tiddler.hasField(\"draft.of\") || tiddler.hasField(\"throttle.refresh\")))) {\n\t\t\t\tonlyThrottledTiddlersHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyThrottledTiddlersHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = THROTTLE_REFRESH_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n\t// Run any post-render startup actions\n\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/PostRender\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/rootwidget.js": {
"title": "$:/core/modules/startup/rootwidget.js",
"text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject, event: event});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-show-switcher\",function(event) {\n\t\t$tw.modal.display(\"$:/core/ui/SwitcherModal\",{variables: event.paramObject, event: event});\n\t});\n\t// Install the notification mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the copy-to-clipboard mechanism\n\t$tw.rootWidget.addEventListener(\"tm-copy-to-clipboard\",function(event) {\n\t\t$tw.utils.copyToClipboard(event.param);\n\t});\n\t// Install the tm-focus-selector message\n\t$tw.rootWidget.addEventListener(\"tm-focus-selector\",function(event) {\n\t\tvar selector = event.param || \"\",\n\t\t\telement;\n\t\ttry {\n\t\t\telement = document.querySelector(selector);\n\t\t} catch(e) {\n\t\t\tconsole.log(\"Error in selector: \",selector)\n\t\t}\n\t\tif(element && element.focus) {\n\t\t\telement.focus(event.paramObject);\n\t\t}\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tvar fullScreenDocument = event.event ? event.event.target.ownerDocument : document;\n\t\t\tif(event.param === \"enter\") {\n\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t} else if(event.param === \"exit\") {\n\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tif(fullScreenDocument[fullscreen._fullscreenElement]) {\n\t\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t\t} else {\n\t\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup.js": {
"title": "$:/core/modules/startup.js",
"text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.platform);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\t$tw.rootWidget = new widget.widget({\n\t\ttype: \"widget\",\n\t\tchildren: []\n\t},{\n\t\twiki: $tw.wiki,\n\t\tdocument: $tw.browser ? document : $tw.fakeDocument\n\t});\n\t// Execute any startup actions\n\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction\");\n\tif($tw.browser) {\n\t\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/Browser\");\n\t}\n\tif($tw.node) {\n\t\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/Node\");\n\t}\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-GB\"\n\t\t],\n\t\tonSwitch: function(plugins) {\n\t\t\tif($tw.browser) {\n\t\t\t\tvar pluginTiddler = $tw.wiki.getTiddler(plugins[0]);\n\t\t\t\tif(pluginTiddler) {\n\t\t\t\t\tdocument.documentElement.setAttribute(\"dir\",pluginTiddler.getFieldString(\"text-direction\") || \"auto\");\n\t\t\t\t} else {\n\t\t\t\t\tdocument.documentElement.removeAttribute(\"dir\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\n\t// Listen for shortcuts\n\tif($tw.browser) {\n\t\t$tw.utils.addEventListeners(document,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t}\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t}\n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({\n\t\twiki: $tw.wiki,\n\t\tdirtyTracking: !$tw.syncadaptor,\n\t\tpreloadDirty: $tw.boot.preloadDirty || []\n\t});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/story.js": {
"title": "$:/core/modules/startup/story.js",
"text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\nvar CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD = \"$:/config/Navigation/Permalinkview/CopyToClipboard\"; // Can be \"yes\" (default) or \"no\"\nvar CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/Permalinkview/UpdateAddressBar\"; // Can be \"yes\" (default) or \"no\"\n\n\n// Links to help, if there is no param\nvar HELP_OPEN_EXTERNAL_WINDOW = \"http://tiddlywiki.com/#WidgetMessage%3A%20tm-open-external-window\";\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers({\n\t\tdisableHistory: $tw.boot.disableStartupNavigation\n\t});\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for tm-open-external-window message\n\t\t$tw.rootWidget.addEventListener(\"tm-open-external-window\",function(event) {\n\t\t\tvar paramObject = event.paramObject || {},\n\t\t\t\tstrUrl = event.param || HELP_OPEN_EXTERNAL_WINDOW,\n\t\t\t\tstrWindowName = paramObject.windowName,\n\t\t\t\tstrWindowFeatures = paramObject.windowFeatures;\n\t\t\twindow.open(strUrl, strWindowName, strWindowFeatures);\n\t\t});\n\t\t// Listen for the tm-print message\n\t\t$tw.rootWidget.addEventListener(\"tm-print\",function(event) {\n\t\t\t(event.event.view || window).print();\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\"\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\"\n\t\t\t});\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndisableHistory: if true $:/History is NOT updated\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// Update history\n\tvar story = new $tw.Story({\n\t\twiki: $tw.wiki,\n\t\tstoryTitle: DEFAULT_STORY_TITLE,\n\t\thistoryTitle: DEFAULT_HISTORY_TITLE\n\t});\n\tif(!options.disableHistory) {\n\t\t// If a target tiddler was specified add it to the history stack\n\t\tif(target && target !== \"\") {\n\t\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t\t}\n\t\t\tstory.addToHistory(target);\n\t\t} else if(storyList.length > 0) {\n\t\t\tstory.addToHistory(storyList[0]);\n\t\t}\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.copyToClipboard: \"permalink\", \"permaview\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\t// Get the story and the history stack\n\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\ttargetTiddler = \"\";\n\tif(options.targetTiddler) {\n\t\ttargetTiddler = options.targetTiddler;\n\t} else {\n\t\t// The target tiddler is the one at the top of the stack\n\t\tif(historyList.length > 0) {\n\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t}\n\t\t// Blank the target tiddler if it isn't present in the story\n\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\ttargetTiddler = \"\";\n\t\t}\n\t}\n\t// Assemble the location hash\n\tswitch(options.updateAddressBar) {\n\t\tcase \"permalink\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t\tbreak;\n\t}\n\t// Copy URL to the clipboard\n\tswitch(options.copyToClipboard) {\n\t\tcase \"permalink\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler));\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList)));\n\t\t\tbreak;\n\t}\n\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\tif(options.updateHistory === \"yes\") {\n\t\t\t// Assign the location hash so that history is updated\n\t\t\twindow.location.hash = $tw.locationHash;\n\t\t} else {\n\t\t\t// We use replace so that browser history isn't affected\n\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t}\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/windows.js": {
"title": "$:/core/modules/startup/windows.js",
"text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\n$tw.windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\twindowTitle = paramObject.windowTitle || title,\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow,\n\t\t srcDocument;\n\t\t// In case that popup blockers deny opening a new window\n\t\ttry {\n\t\t\tsrcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\t}\n\t\tcatch(e) {\n\t\t\treturn;\n\t\t}\n\t\t$tw.windows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = windowTitle;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete $tw.windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{\n\t\t\t\tdocument: $tw.fakeDocument,\n\t\t\t\tvariables: variables,\n\t\t\t\timportPageMacros: true}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\t// Listen for keyboard shortcuts\n\t\t$tw.utils.addEventListeners(srcDocument,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t\tsrcWindow.document.documentElement.addEventListener(\"click\",$tw.popup,true);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each($tw.windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/story.js": {
"title": "$:/core/modules/story.js",
"text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/storyviews/classic.js": {
"title": "$:/core/modules/storyviews/classic.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration()\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\tif(duration) {\n\t\t// Scroll the node into view\n\t\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n\t} else {\n\t\ttargetElement.scrollIntoView();\n\t}\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Reset the margin once the transition is over\n\t\tsetTimeout(function() {\n\t\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t\t{transition: \"none\"},\n\t\t\t\t{marginBottom: \"\"}\n\t\t\t]);\n\t\t},duration);\n\t\t// Set up the initial position of the element\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t// Transition to the final position\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t]);\n\t}\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode(),\n\t\t\tremoveElement = function() {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t};\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\tremoveElement();\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar currWidth = targetElement.offsetWidth,\n\t\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Remove the dom nodes of the widget at the end of the transition\n\t\tsetTimeout(removeElement,duration);\n\t\t// Animate the closure\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"translateX(0px)\"},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/pop.js": {
"title": "$:/core/modules/storyviews/pop.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t\t$tw.utils.setStyle(widget.document.body,[\n\t\t\t{\"overflow-x\": \"\"}\n\t\t]);\n\t},duration);\n\t// Prevent the page from overscrolling due to the zoom factor\n\t$tw.utils.setStyle(widget.document.body,[\n\t\t{\"overflow-x\": \"hidden\"}\n\t]);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement && targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/zoomin.js": {
"title": "$:/core/modules/storyviews/zoomin.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx = zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty = zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/syncer.js": {
"title": "$:/core/modules/syncer.js",
"text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store and synchronises them to a remote data store represented as a \"sync adaptor\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDefaults\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleIsAnonymous = \"$:/status/IsAnonymous\";\nSyncer.prototype.titleIsReadOnly = \"$:/status/IsReadOnly\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSyncDisablePolling = \"$:/config/SyncDisablePolling\";\nSyncer.prototype.titleSyncPollingInterval = \"$:/config/SyncPollingInterval\";\nSyncer.prototype.titleSyncDisableLazyLoading = \"$:/config/SyncDisableLazyLoading\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.titleSyncThrottleInterval = \"$:/config/SyncThrottleInterval\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.errorRetryInterval = 5 * 1000; // Interval to retry after an error\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\t// Save parameters\n\tthis.syncadaptor = options.syncadaptor;\n\tthis.disableUI = !!options.disableUI;\n\tthis.titleIsLoggedIn = options.titleIsLoggedIn || this.titleIsLoggedIn;\n\tthis.titleUserName = options.titleUserName || this.titleUserName;\n\tthis.titleSyncFilter = options.titleSyncFilter || this.titleSyncFilter;\n\tthis.titleSavedNotification = options.titleSavedNotification || this.titleSavedNotification;\n\tthis.taskTimerInterval = options.taskTimerInterval || this.taskTimerInterval;\n\tthis.throttleInterval = options.throttleInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncThrottleInterval,\"\"),10) || this.throttleInterval;\n\tthis.errorRetryInterval = options.errorRetryInterval || this.errorRetryInterval;\n\tthis.fallbackInterval = options.fallbackInterval || this.fallbackInterval;\n\tthis.pollTimerInterval = options.pollTimerInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncPollingInterval,\"\"),10) || this.pollTimerInterval;\n\tthis.logging = \"logging\" in options ? options.logging : true;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\"),{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging,\n\t\tsaveHistory: true\n\t});\n\t// Make another logger for connection errors\n\tthis.loggerConnection = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\") + \"-connection\",{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging\n\t});\n\t// Ask the syncadaptor to use the main logger\n\tif(this.syncadaptor.setLoggerSaveBuffer) {\n\t\tthis.syncadaptor.setLoggerSaveBuffer(this.logger);\n\t}\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\tthis.titlesToBeLoaded = {}; // Hashmap of titles of tiddlers that need loading from the server\n\tthis.titlesHaveBeenLazyLoaded = {}; // Hashmap of titles of tiddlers that have already been lazily loaded from the server\n\t// Timers\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Number of outstanding requests\n\tthis.numTasksInProgress = 0;\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t// Filter the changes to just include ones that are being synced\n\t\tvar filteredChanges = self.getSyncedTiddlers(function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.tiddlerExists(title) && self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t\tif(filteredChanges.length > 0) {\n\t\t\tself.processTaskQueue();\n\t\t} else {\n\t\t\t// Look for deletions of tiddlers we're already syncing\n\t\t\tvar outstandingDeletion = false\n\t\t\t$tw.utils.each(changes,function(change,title,object) {\n\t\t\t\tif(change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) {\n\t\t\t\t\toutstandingDeletion = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(outstandingDeletion) {\n\t\t\t\tself.processTaskQueue();\n\t\t\t}\n\t\t}\n\t});\n\t// Browser event handlers\n\tif($tw.browser && !this.disableUI) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function(event) {\n\t\t\tvar username = event && event.paramObject && event.paramObject.username,\n\t\t\t\tpassword = event && event.paramObject && event.paramObject.password;\n\t\t\tif(username && password) {\n\t\t\t\t// Login with username and password\n\t\t\t\tself.login(username,password,function() {});\n\t\t\t} else {\n\t\t\t\t// No username and password, so we display a prompt\n\t\t\t\tself.handleLoginEvent();\n\t\t\t}\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-copy-syncer-logs-to-clipboard\",function() {\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getSystemInfo() + \"\\n\\nLog:\\n\" + self.logger.getBuffer());\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tif(!this.disableUI && this.wiki.getTiddlerText(this.titleSyncDisableLazyLoading) !== \"yes\") {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\n\t}\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nShow a generic network error alert\n*/\nSyncer.prototype.displayError = function(msg,err) {\n\tif(err === ($tw.language.getString(\"Error/XMLHttpRequest\") + \": 0\")) {\n\t\tthis.loggerConnection.alert($tw.language.getString(\"Error/NetworkErrorAlert\"));\n\t\tthis.logger.log(msg + \":\",err);\n\t} else {\n\t\tthis.logger.alert(msg + \":\",err);\n\t}\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getSyncedTiddlers = function(source) {\n\treturn this.filterFn.call(this.wiki,source);\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getTiddlerRevision = function(title) {\n\tif(this.syncadaptor && this.syncadaptor.getTiddlerRevision) {\n\t\treturn this.syncadaptor.getTiddlerRevision(title);\n\t} else {\n\t\treturn this.wiki.getTiddler(title).fields.revision;\n\t}\n};\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\t// \"revision\" is the revision of the tiddler last seen on the server, and \"changecount\" is the corresponding local changecount\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.getSyncedTiddlers();\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tself.tiddlerInfo[title] = {\n\t\t\t\trevision: self.getTiddlerRevision(title),\n\t\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\t\tchangeCount: self.wiki.getChangeCount(title)\n\t\t\t};\n\t\t}\n\t});\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\tthis.logger.log(\"Checking dirty status\");\n\t// Check tiddlers that are in the store and included in the filter function\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(this.wiki.tiddlerExists(title)) {\n\t\t\tif(tiddlerInfo) {\n\t\t\t\t// If the tiddler is known on the server and has been modified locally then it needs to be saved to the server\n\t\t\t\tif(this.wiki.getChangeCount(title) > tiddlerInfo.changeCount) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If the tiddler isn't known on the server then it needs to be saved to the server\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\t// Check tiddlers that are known from the server but not currently in the store\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\tif(!this.wiki.tiddlerExists(titles[index])) {\n\t\t\t// There must be a pending delete\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser && !this.disableUI) {\n\t\tvar dirty = this.isDirty();\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",dirty);\n\t\tif(!dirty) {\n\t\t\tthis.loggerConnection.clearAlerts();\n\t\t}\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: this.getTiddlerRevision(tiddlerFields.title),\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username,isReadOnly,isAnonymous,isPollingDisabled) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\t// Set the various status tiddlers\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsReadOnly,text: isReadOnly ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsAnonymous,text: isAnonymous ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\t\tif(isLoggedIn) {\n\t\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t\t}\n\t\t\t\tif(isPollingDisabled) {\n\t\t\t\t\tself.wiki.addTiddler({title: self.titleSyncDisablePolling, text: \"yes\"});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tvar self = this,\n\t\tcancelNextSync = function() {\n\t\t\tif(self.pollTimerId) {\n\t\t\t\tclearTimeout(self.pollTimerId);\n\t\t\t\tself.pollTimerId = null;\n\t\t\t}\n\t\t},\n\t\ttriggerNextSync = function() {\n\t\t\tif(pollingEnabled) {\n\t\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\t\tself.pollTimerId = null;\n\t\t\t\t\tself.syncFromServer.call(self);\n\t\t\t\t},self.pollTimerInterval);\n\t\t\t}\n\t\t},\n\t\tsyncSystemFromServer = (self.wiki.getTiddlerText(\"$:/config/SyncSystemTiddlersFromServer\") === \"yes\"),\n\t\tpollingEnabled = (self.wiki.getTiddlerText(self.titleSyncDisablePolling) !== \"yes\");\n\tif(this.syncadaptor && this.syncadaptor.getUpdatedTiddlers) {\n\t\tthis.logger.log(\"Retrieving updated tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getUpdatedTiddlers(self,function(err,updates) {\n\t\t\ttriggerNextSync();\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(updates) {\n\t\t\t\t$tw.utils.each(updates.modifications,function(title) {\n\t\t\t\t\tself.titlesToBeLoaded[title] = true;\n\t\t\t\t});\n\t\t\t\t$tw.utils.each(updates.deletions,function(title) {\n\t\t\t\t\tif(syncSystemFromServer || !self.wiki.isSystemTiddler(title)) {\n\t\t\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(updates.modifications.length > 0 || updates.deletions.length > 0) {\n\t\t\t\t\tself.processTaskQueue();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else if(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\ttriggerNextSync();\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Keep track of which tiddlers we already know about have been reported this time\n\t\t\tvar previousTitles = Object.keys(self.tiddlerInfo);\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.tiddlerExists(tiddlerFields.title) && self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null,\n\t\t\t\t\tindexInPreviousTitles = previousTitles.indexOf(tiddlerFields.title);\n\t\t\t\tif(indexInPreviousTitles !== -1) {\n\t\t\t\t\tpreviousTitles.splice(indexInPreviousTitles,1);\n\t\t\t\t}\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Only load the skinny version if we don't already have a fat version of the tiddler\n\t\t\t\t\tif(!tiddler || tiddler.fields.text === undefined) {\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\tself.titlesToBeLoaded[tiddlerFields.title] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Delete any tiddlers that were previously reported but missing this time\n\t\t\t$tw.utils.each(previousTitles,function(title) {\n\t\t\t\tif(syncSystemFromServer || !self.wiki.isSystemTiddler(title)) {\n\t\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t});\n\t\t\tself.processTaskQueue();\n\t\t});\n\t}\n};\n\n/*\nForce load a tiddler from the server\n*/\nSyncer.prototype.enqueueLoadTiddler = function(title) {\n\tthis.titlesToBeLoaded[title] = true;\n\tthis.processTaskQueue();\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Ignore if the syncadaptor doesn't handle it\n\tif(!this.syncadaptor.supportsLazyLoading) {\n\t\treturn;\n\t}\n\t// Don't lazy load the same tiddler twice\n\tif(!this.titlesHaveBeenLazyLoaded[title]) {\n\t\t// Don't lazy load if the tiddler isn't included in the sync filter\n\t\tif(this.getSyncedTiddlers().indexOf(title) !== -1) {\n\t\t\t// Mark the tiddler as needing loading, and having already been lazily loaded\n\t\t\tthis.titlesToBeLoaded[title] = true;\n\t\t\tthis.titlesHaveBeenLazyLoaded[title] = true;\n\t\t}\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!err && !isLoggedIn) {\n\t\t\tif(self.syncadaptor && self.syncadaptor.displayLoginPrompt) {\n\t\t\t\tself.syncadaptor.displayLoginPrompt(self);\n\t\t\t} else {\n\t\t\t\tself.displayLoginPrompt();\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nDispay a password prompt\n*/\nSyncer.prototype.displayLoginPrompt = function() {\n\tvar self = this;\n\tvar promptInfo = $tw.passwordPrompt.createPrompt({\n\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\n\t\tcallback: function(data) {\n\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\tself.syncFromServer();\n\t\t\t});\n\t\t\treturn true; // Get rid of the password prompt\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(err,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nProcess the next task\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if the sync adaptor is fully initialised and we're not already performing\n\t// a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif((!this.syncadaptor.isReady || this.syncadaptor.isReady()) && this.numTasksInProgress === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(typeof task === \"object\" && task !== null) {\n\t\t\tthis.numTasksInProgress += 1;\n\t\t\ttask.run(function(err) {\n\t\t\t\tself.numTasksInProgress -= 1;\n\t\t\t\tif(err) {\n\t\t\t\t\tself.displayError(\"Sync error while processing \" + task.type + \" of '\" + task.title + \"'\",err);\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\tself.triggerTimeout(self.errorRetryInterval);\n\t\t\t\t} else {\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\t// Process the next task\n\t\t\t\t\tself.processTaskQueue.call(self);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// No task is ready so update the status\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// And trigger a timeout if there is a pending task\n\t\t\tif(task === true) {\n\t\t\t\tthis.triggerTimeout();\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.updateDirtyStatus();\n\t}\n};\n\nSyncer.prototype.triggerTimeout = function(interval) {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},interval || self.taskTimerInterval);\n\t}\n};\n\n/*\nChoose the next sync task. We prioritise saves, then deletes, then loads from the server\n\nReturns either a task object, null if there's no upcoming tasks, or the boolean true if there are pending tasks that aren't yet due\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar thresholdLastSaved = (new Date()) - this.throttleInterval,\n\t\thavePending = null;\n\t// First we look for tiddlers that have been modified locally and need saving back to the server\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title),\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(tiddler) {\n\t\t\t// If the tiddler is not known on the server, or has been modified locally no more recently than the threshold then it needs to be saved to the server\n\t\t\tvar hasChanged = !tiddlerInfo || this.wiki.getChangeCount(title) > tiddlerInfo.changeCount,\n\t\t\t\tisReadyToSave = !tiddlerInfo || !tiddlerInfo.timestampLastSaved || tiddlerInfo.timestampLastSaved < thresholdLastSaved;\n\t\t\tif(hasChanged) {\n\t\t\t\tif(isReadyToSave) {\n\t\t\t\t\treturn new SaveTiddlerTask(this,title);\n\t\t\t\t} else {\n\t\t\t\t\thavePending = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Second, we check tiddlers that are known from the server but not currently in the store, and so need deleting on the server\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\ttitle = titles[index];\n\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\treturn new DeleteTiddlerTask(this,title);\n\t\t}\n\t}\n\t// Check for tiddlers that need loading\n\ttitle = Object.keys(this.titlesToBeLoaded)[0];\n\tif(title) {\n\t\tdelete this.titlesToBeLoaded[title];\n\t\treturn new LoadTiddlerTask(this,title);\n\t}\n\t// No tasks are ready\n\treturn havePending;\n};\n\nfunction SaveTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"save\";\n}\n\nSaveTiddlerTask.prototype.run = function(callback) {\n\tvar self = this,\n\t\tchangeCount = this.syncer.wiki.getChangeCount(this.title),\n\t\ttiddler = this.syncer.wiki.tiddlerExists(this.title) && this.syncer.wiki.getTiddler(this.title);\n\tthis.syncer.logger.log(\"Dispatching 'save' task:\",this.title);\n\tif(tiddler) {\n\t\tthis.syncer.syncadaptor.saveTiddler(tiddler,{\n\t\t\tchangeCount: changeCount,\n\t\t\ttiddlerInfo: self.syncer.tiddlerInfo[self.title]\n\t\t},function(err,adaptorInfo,revision) {\n\t\t\t// If there's an error, exit without changing any internal state\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Adjust the info stored about this tiddler\n\t\t\tself.syncer.tiddlerInfo[self.title] = {\n\t\t\t\tchangeCount: changeCount,\n\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\trevision: revision,\n\t\t\t\ttimestampLastSaved: new Date()\n\t\t\t};\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else {\n\t\tthis.syncer.logger.log(\" Not Dispatching 'save' task:\",this.title,\"tiddler does not exist\");\n\t\t$tw.utils.nextTick(callback(null));\n\t}\n};\n\nfunction DeleteTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"delete\";\n}\n\nDeleteTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'delete' task:\",this.title);\n\tthis.syncer.syncadaptor.deleteTiddler(this.title,{\n\t\ttiddlerInfo: self.syncer.tiddlerInfo[this.title]\n\t},function(err,adaptorInfo) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Remove the info stored about this tiddler\n\t\tdelete self.syncer.tiddlerInfo[self.title];\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t});\n};\n\nfunction LoadTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"load\";\n}\n\nLoadTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'load' task:\",this.title);\n\tthis.syncer.syncadaptor.loadTiddler(this.title,function(err,tiddlerFields) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Update the info stored about this tiddler\n\t\tif(tiddlerFields) {\n\t\t\tself.syncer.storeTiddler(tiddlerFields);\n\t\t}\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t});\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/tiddler.js": {
"title": "$:/core/modules/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet the value of a field as a list\n*/\nexports.getFieldList = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn [];\n\t}\n\treturn $tw.utils.parseStringArray(value);\n};\n\n/*\nGet all the fields as a hashmap of strings. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStrings = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = {};\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields[field] = this.getFieldString(field);\n\t\t\t}\n\t\t}\n\t}\n\treturn fields;\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [],\n\t\tfields = Object.keys(this.fields).sort(),\n\t\tresult = [];\n\tfor(var t=0; t<fields.length; t++) {\n\t\tvar field = fields[t];\n\t\tif(exclude.indexOf(field) === -1) {\n\t\t\tresult.push(field + \": \" + this.getFieldString(field));\n\t\t}\n\t}\n\treturn result.join(\"\\n\");\n};\n\nexports.getFieldDay = function(field) {\n\tif(this.cache && this.cache.day && $tw.utils.hop(this.cache.day,field) ) {\n\t\treturn this.cache.day[field];\n\t}\n\tvar day = \"\";\n\tif(this.fields[field]) {\n\t\tday = (new Date($tw.utils.parseDate(this.fields[field]))).setHours(0,0,0,0);\n\t}\n\tthis.cache.day = this.cache.day || {};\n\tthis.cache.day[field] = day;\n\treturn day;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlermethod"
},
"$:/core/modules/upgraders/plugins.js": {
"title": "$:/core/modules/upgraders/plugins.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin contains JS modules\n\t\t\tvar requiresReload = wiki.doesPluginInfoRequireReload(JSON.parse(incomingTiddler.text)) ? (wiki.getTiddlerText(\"$:/language/ControlPanel/Plugins/PluginWillRequireReload\") + \" \") : \"\";\n\t\t\tmessages[title] = requiresReload;\n\t\t\tif(incomingTiddler.version) {\n\t\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\t\tmessages[title] = requiresReload + $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/system.js": {
"title": "$:/core/modules/upgraders/system.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/Import\"],\n\tUNSELECT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\",\"$:/StoryList\",\"$:/HistoryList\"],\n\tWARN_IMPORT_PREFIX_LIST = [\"$:/core/modules/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tshowAlert = false;\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<UNSELECT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = UNSELECT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Tiddler/Unselected\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(var t=0; t<WARN_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = WARN_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix && wiki.isShadowTiddler(title)) {\n\t\t\t\t\tshowAlert = true;\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Warning\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tif(showAlert) {\n\t\tvar logger = new $tw.utils.Logger(\"import\");\n\t\tlogger.alert($tw.language.getString(\"Import/Upgrader/System/Alert\"));\n\t}\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/themetweaks.js": {
"title": "$:/core/modules/upgraders/themetweaks.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/utils/base64-utf8/base64-utf8.module.js": {
"text": "(function(){// From https://gist.github.com/Nijikokun/5192472\n//\n// UTF8 Module\n//\n// Cleaner and modularized utf-8 encoding and decoding library for javascript.\n//\n// copyright: MIT\n// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com\n!function(r,e,o,t){void 0!==o.module&&o.module.exports?o.module.exports=e.apply(o):void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"utf8\",[],e):o.utf8=e.apply(o)}(0,function(){return{encode:function(r){if(\"string\"!=typeof r)return r;r=r.replace(/\\r\\n/g,\"\\n\");for(var e,o=\"\",t=0;t<r.length;t++)if((e=r.charCodeAt(t))<128)o+=String.fromCharCode(e);else if(e>127&&e<2048)o+=String.fromCharCode(e>>6|192),o+=String.fromCharCode(63&e|128);else if(e>55295&&e<57344&&r.length>t+1){var i=e,n=r.charCodeAt(t+1);t++;var d=65536+(i-55296<<10|n-56320);o+=String.fromCharCode(d>>18|240),o+=String.fromCharCode(d>>12&63|128),o+=String.fromCharCode(d>>6&63|128),o+=String.fromCharCode(63&d|128)}else o+=String.fromCharCode(e>>12|224),o+=String.fromCharCode(e>>6&63|128),o+=String.fromCharCode(63&e|128);return o},decode:function(r){if(\"string\"!=typeof r)return r;for(var e=\"\",o=0,t=0;o<r.length;)if((t=r.charCodeAt(o))<128)e+=String.fromCharCode(t),o++;else if(t>191&&t<224)e+=String.fromCharCode((31&t)<<6|63&r.charCodeAt(o+1)),o+=2;else if(t>223&&t<240)e+=String.fromCharCode((15&t)<<12|(63&r.charCodeAt(o+1))<<6|63&r.charCodeAt(o+2)),o+=3;else{var i=(7&t)<<18|(63&r.charCodeAt(o+1))<<12|(63&r.charCodeAt(o+2))<<6|63&r.charCodeAt(o+3);e+=String.fromCharCode(55296+(i-65536>>10))+String.fromCharCode(56320+(i-65536&1023)),o+=4}return e}}},this),function(r,e,o,t){if(void 0!==o.module&&o.module.exports){if(t&&o.require)for(var i=0;i<t.length;i++)o[t[i]]=o.require(t[i]);o.module.exports=e.apply(o)}else void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"base64\",t||[],e):o.base64=e.apply(o)}(0,function(r){var e=r||this.utf8,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return{encode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=e.encode(r);for(var t,i,n,d,f,a,h,C=\"\",c=0;c<r.length;)d=(t=r.charCodeAt(c++))>>2,f=(3&t)<<4|(i=r.charCodeAt(c++))>>4,a=(15&i)<<2|(n=r.charCodeAt(c++))>>6,h=63&n,isNaN(i)?a=h=64:isNaN(n)&&(h=64),C+=o.charAt(d)+o.charAt(f)+o.charAt(a)+o.charAt(h);return C},decode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=r.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");for(var t,i,n,d,f,a,h=\"\",C=0;C<r.length;)t=o.indexOf(r.charAt(C++))<<2|(d=o.indexOf(r.charAt(C++)))>>4,i=(15&d)<<4|(f=o.indexOf(r.charAt(C++)))>>2,n=(3&f)<<6|(a=o.indexOf(r.charAt(C++))),h+=String.fromCharCode(t),64!=f&&(h+=String.fromCharCode(i)),64!=a&&(h+=String.fromCharCode(n));return e.decode(h)}}},this,[\"utf8\"]);}).call(exports);",
"type": "application/javascript",
"title": "$:/core/modules/utils/base64-utf8/base64-utf8.module.js",
"module-type": "library"
},
"$:/core/modules/utils/crypto.js": {
"title": "$:/core/modules/utils/crypto.js",
"text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/csv.js": {
"title": "$:/core/modules/utils/csv.js",
"text": "/*\\\ntitle: $:/core/modules/utils/csv.js\ntype: application/javascript\nmodule-type: utils\n\nA barebones CSV parser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a CSV string with a header row and return an array of hashmaps.\n*/\nexports.parseCsvStringWithHeader = function(text,options) {\n\toptions = options || {};\n\tvar separator = options.separator || \",\",\n\t\trows = text.split(/\\r?\\n/mg).map(function(row) {\n\t\t\treturn $tw.utils.trim(row);\n\t\t}).filter(function(row) {\n\t\t\treturn row !== \"\";\n\t\t});\n\tif(rows.length < 1) {\n\t\treturn \"Missing header row\";\n\t}\n\tvar headings = rows[0].split(separator),\n\t\tresults = [];\n\tfor(var row=1; row<rows.length; row++) {\n\t\tvar columns = rows[row].split(separator),\n\t\t\tcolumnResult = Object.create(null);\n\t\tif(columns.length !== headings.length) {\n\t\t\treturn \"Malformed CSV row '\" + rows[row] + \"'\";\n\t\t}\n\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\tvar columnName = headings[column];\n\t\t\tcolumnResult[columnName] = $tw.utils.trim(columns[column] || \"\");\n\t\t}\n\t\tresults.push(columnResult);\n\t}\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/diff-match-patch/diff_match_patch.js": {
"text": "(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=.5;this.Patch_Margin=4;this.Match_MaxBits=32}var DIFF_DELETE=-1,DIFF_INSERT=1,DIFF_EQUAL=0;\ndiff_match_patch.prototype.diff_main=function(a,b,c,d){\"undefined\"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error(\"Null input. (diff_main)\");if(a==b)return a?[[DIFF_EQUAL,a]]:[];\"undefined\"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);f=this.diff_commonSuffix(a,b);var g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,\nb,e,d);c&&a.unshift([DIFF_EQUAL,c]);g&&a.push([DIFF_EQUAL,g]);this.diff_cleanupMerge(a);return a};\ndiff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[DIFF_INSERT,b]];if(!b)return[[DIFF_DELETE,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[DIFF_INSERT,e.substring(0,g)],[DIFF_EQUAL,f],[DIFF_INSERT,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=DIFF_DELETE),c):1==f.length?[[DIFF_DELETE,a],[DIFF_INSERT,b]]:(e=this.diff_halfMatch_(a,b))?(b=e[1],f=e[3],a=e[4],e=this.diff_main(e[0],e[2],c,d),c=this.diff_main(b,f,c,d),e.concat([[DIFF_EQUAL,\na]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,d):this.diff_bisect_(a,b,d)};\ndiff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([DIFF_EQUAL,\"\"]);for(var e=d=b=0,f=\"\",g=\"\";b<a.length;){switch(a[b][0]){case DIFF_INSERT:e++;g+=a[b][1];break;case DIFF_DELETE:d++;f+=a[b][1];break;case DIFF_EQUAL:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=\nd.length}d=e=0;g=f=\"\"}b++}a.pop();return a};\ndiff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=2*f,h=Array(g),l=Array(g),k=0;k<g;k++)h[k]=-1,l[k]=-1;h[f+1]=0;l[f+1]=0;k=d-e;for(var m=0!=k%2,p=0,x=0,w=0,q=0,t=0;t<f&&!((new Date).getTime()>c);t++){for(var v=-t+p;v<=t-x;v+=2){var n=f+v;var r=v==-t||v!=t&&h[n-1]<h[n+1]?h[n+1]:h[n-1]+1;for(var y=r-v;r<d&&y<e&&a.charAt(r)==b.charAt(y);)r++,y++;h[n]=r;if(r>d)x+=2;else if(y>e)p+=2;else if(m&&(n=f+k-v,0<=n&&n<g&&-1!=l[n])){var u=d-l[n];if(r>=\nu)return this.diff_bisectSplit_(a,b,r,y,c)}}for(v=-t+w;v<=t-q;v+=2){n=f+v;u=v==-t||v!=t&&l[n-1]<l[n+1]?l[n+1]:l[n-1]+1;for(r=u-v;u<d&&r<e&&a.charAt(d-u-1)==b.charAt(e-r-1);)u++,r++;l[n]=u;if(u>d)q+=2;else if(r>e)w+=2;else if(!m&&(n=f+k-v,0<=n&&n<g&&-1!=h[n]&&(r=h[n],y=f+r-n,u=d-u,r>=u)))return this.diff_bisectSplit_(a,b,r,y,c)}}return[[DIFF_DELETE,a],[DIFF_INSERT,b]]};\ndiff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};\ndiff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b=\"\",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf(\"\\n\",c);-1==f&&(f=a.length-1);var h=a.substring(c,f+1);c=f+1;(e.hasOwnProperty?e.hasOwnProperty(h):void 0!==e[h])?b+=String.fromCharCode(e[h]):(b+=String.fromCharCode(g),e[h]=g,d[g++]=h)}return b}var d=[],e={};d[0]=\"\";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};\ndiff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join(\"\")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;d=0;for(var e=1;;){var f=a.substring(c-e);f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};\ndiff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g=\"\",h,k,l,m;-1!=(e=b.indexOf(d,e+1));){var p=f.diff_commonPrefix(a.substring(c),b.substring(e)),u=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<u+p&&(g=b.substring(e-u,e)+b.substring(e,e+p),h=a.substring(0,c-u),k=a.substring(c+p),l=b.substring(0,e-u),m=b.substring(e+p))}return 2*g.length>=a.length?[h,k,l,m,g]:null}if(0>=this.Diff_Timeout)return null;\nvar d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4));d=c(d,e,Math.ceil(d.length/2));if(g||d)g=d?g?g[4].length>d[4].length?g:d:d:g;else return null;if(a.length>b.length){d=g[0];e=g[1];var h=g[2];var l=g[3]}else h=g[0],l=g[1],d=g[2],e=g[3];return[d,e,h,l,g[4]]};\ndiff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,l=0,k=0;f<a.length;)a[f][0]==DIFF_EQUAL?(c[d++]=f,g=l,h=k,k=l=0,e=a[f][1]):(a[f][0]==DIFF_INSERT?l+=a[f][1].length:k+=a[f][1].length,e&&e.length<=Math.max(g,h)&&e.length<=Math.max(l,k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,d--,f=0<d?c[d-1]:-1,k=l=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(a[f-1][0]==\nDIFF_DELETE&&a[f][0]==DIFF_INSERT){b=a[f-1][1];c=a[f][1];d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[DIFF_EQUAL,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[DIFF_EQUAL,b.substring(0,e)]),a[f-1][0]=DIFF_INSERT,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=DIFF_DELETE,a[f+1][1]=b.substring(e),f++;f++}f++}};\ndiff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_);c=g&&c.match(diff_match_patch.linebreakRegex_);d=h&&d.match(diff_match_patch.linebreakRegex_);var k=c&&a.match(diff_match_patch.blanklineEndRegex_),l=d&&b.match(diff_match_patch.blanklineStartRegex_);\nreturn k||l?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(a[c-1][0]==DIFF_EQUAL&&a[c+1][0]==DIFF_EQUAL){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g){var h=e.substring(e.length-g);d=d.substring(0,d.length-g);e=h+e.substring(0,e.length-g);f=h+f}g=d;h=e;for(var l=f,k=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){d+=e.charAt(0);e=e.substring(1)+f.charAt(0);f=f.substring(1);var m=b(d,e)+b(e,f);m>=k&&(k=m,g=d,h=e,l=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-\n1,1),c--),a[c][1]=h,l?a[c+1][1]=l:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\\s/;diff_match_patch.linebreakRegex_=/[\\r\\n]/;diff_match_patch.blanklineEndRegex_=/\\n\\r?\\n$/;diff_match_patch.blanklineStartRegex_=/^\\r?\\n\\r?\\n/;\ndiff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,l=!1,k=!1;f<a.length;)a[f][0]==DIFF_EQUAL?(a[f][1].length<this.Diff_EditCost&&(l||k)?(c[d++]=f,g=l,h=k,e=a[f][1]):(d=0,e=null),l=k=!1):(a[f][0]==DIFF_DELETE?k=!0:l=!0,e&&(g&&h&&l&&k||e.length<this.Diff_EditCost/2&&3==g+h+l+k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,e=null,g&&h?(l=k=!0,d=0):(d--,f=0<d?c[d-1]:-1,l=k=!1),b=!0)),f++;b&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([DIFF_EQUAL,\"\"]);for(var b=0,c=0,d=0,e=\"\",f=\"\",g;b<a.length;)switch(a[b][0]){case DIFF_INSERT:d++;f+=a[b][1];b++;break;case DIFF_DELETE:c++;e+=a[b][1];b++;break;case DIFF_EQUAL:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&a[b-c-d-1][0]==DIFF_EQUAL?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[DIFF_EQUAL,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-\ng)+a[b][1],f=f.substring(0,f.length-g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[DIFF_INSERT,f]):0===d?a.splice(b-c,c+d,[DIFF_DELETE,e]):a.splice(b-c-d,c+d,[DIFF_DELETE,e],[DIFF_INSERT,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&a[b-1][0]==DIFF_EQUAL?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=\"\"}\"\"===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)a[b-1][0]==DIFF_EQUAL&&a[b+1][0]==DIFF_EQUAL&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,\na[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){a[g][0]!==DIFF_INSERT&&(c+=a[g][1].length);a[g][0]!==DIFF_DELETE&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&a[g][0]===DIFF_DELETE?f:f+(b-e)};\ndiff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\\n/g,g=0;g<a.length;g++){var h=a[g][0],l=a[g][1].replace(c,\"&\").replace(d,\"<\").replace(e,\">\").replace(f,\"¶<br>\");switch(h){case DIFF_INSERT:b[g]='<ins style=\"background:#e6ffe6;\">'+l+\"</ins>\";break;case DIFF_DELETE:b[g]='<del style=\"background:#ffe6e6;\">'+l+\"</del>\";break;case DIFF_EQUAL:b[g]=\"<span>\"+l+\"</span>\"}}return b.join(\"\")};\ndiff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_INSERT&&(b[c]=a[c][1]);return b.join(\"\")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_DELETE&&(b[c]=a[c][1]);return b.join(\"\")};\ndiff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][1];switch(a[e][0]){case DIFF_INSERT:c+=f.length;break;case DIFF_DELETE:d+=f.length;break;case DIFF_EQUAL:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};\ndiff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case DIFF_INSERT:b[c]=\"+\"+encodeURI(a[c][1]);break;case DIFF_DELETE:b[c]=\"-\"+a[c][1].length;break;case DIFF_EQUAL:b[c]=\"=\"+a[c][1].length}return b.join(\"\\t\").replace(/%20/g,\" \")};\ndiff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case \"+\":try{c[d++]=[DIFF_INSERT,decodeURI(h)]}catch(k){throw Error(\"Illegal escape in diff_fromDelta: \"+h);}break;case \"-\":case \"=\":var l=parseInt(h,10);if(isNaN(l)||0>l)throw Error(\"Invalid number in diff_fromDelta: \"+h);h=a.substring(e,e+=l);\"=\"==f[g].charAt(0)?c[d++]=[DIFF_EQUAL,h]:c[d++]=[DIFF_DELETE,h];break;default:if(f[g])throw Error(\"Invalid diff operation in diff_fromDelta: \"+\nf[g]);}}if(e!=a.length)throw Error(\"Delta length (\"+e+\") does not equal source text length (\"+a.length+\").\");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error(\"Null input. (match_main)\");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};\ndiff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return f.Match_Distance?e+g/f.Match_Distance:g?1:e}if(b.length>this.Match_MaxBits)throw Error(\"Pattern too long for this browser.\");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));var l=1<<b.length-1;h=-1;for(var k,m,p=b.length+a.length,x,w=0;w<b.length;w++){k=0;for(m=p;k<m;)d(w,\nc+m)<=g?k=m:p=m,m=Math.floor((p-k)/2+k);p=m;k=Math.max(1,c-m+1);var q=Math.min(c+m,a.length)+b.length;m=Array(q+2);for(m[q+1]=(1<<w)-1;q>=k;q--){var t=e[a.charAt(q-1)];m[q]=0===w?(m[q+1]<<1|1)&t:(m[q+1]<<1|1)&t|(x[q+1]|x[q])<<1|1|x[q+1];if(m[q]&l&&(t=d(w,q-1),t<=g))if(g=t,h=q-1,h>c)k=Math.max(1,2*c-h);else break}if(d(w+1,c)>g)break;x=m}return h};\ndiff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};\ndiff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([DIFF_EQUAL,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([DIFF_EQUAL,d]);a.start1-=c.length;a.start2-=\nc.length;a.length1+=c.length+d.length;a.length2+=c.length+d.length}};\ndiff_match_patch.prototype.patch_make=function(a,b,c){if(\"string\"==typeof a&&\"string\"==typeof b&&\"undefined\"==typeof c){var d=a;b=this.diff_main(d,b,!0);2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b))}else if(a&&\"object\"==typeof a&&\"undefined\"==typeof b&&\"undefined\"==typeof c)b=a,d=this.diff_text1(b);else if(\"string\"==typeof a&&b&&\"object\"==typeof b&&\"undefined\"==typeof c)d=a;else if(\"string\"==typeof a&&\"string\"==typeof b&&c&&\"object\"==typeof c)d=a,b=c;else throw Error(\"Unknown call format to patch_make.\");\nif(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,l=0;l<b.length;l++){var k=b[l][0],m=b[l][1];e||k===DIFF_EQUAL||(a.start1=f,a.start2=g);switch(k){case DIFF_INSERT:a.diffs[e++]=b[l];a.length2+=m.length;d=d.substring(0,g)+m+d.substring(g);break;case DIFF_DELETE:a.length1+=m.length;a.diffs[e++]=b[l];d=d.substring(0,g)+d.substring(g+m.length);break;case DIFF_EQUAL:m.length<=2*this.Patch_Margin&&e&&b.length!=l+1?(a.diffs[e++]=b[l],a.length1+=m.length,a.length2+=m.length):\nm.length>=2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}k!==DIFF_INSERT&&(f+=m.length);k!==DIFF_DELETE&&(g+=m.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};\ndiff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};\ndiff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),l=-1;if(h.length>this.Match_MaxBits){var k=this.match_main(b,h.substring(0,this.Match_MaxBits),g);-1!=k&&(l=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==l||k>=l)&&(k=-1)}else k=this.match_main(b,h,\ng);if(-1==k)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=k-g,g=-1==l?b.substring(k,k+h.length):b.substring(k,l+this.Match_MaxBits),h==g)b=b.substring(0,k)+this.diff_text2(a[f].diffs)+b.substring(k+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);h=0;var m;for(l=0;l<a[f].diffs.length;l++){var p=a[f].diffs[l];p[0]!==DIFF_EQUAL&&(m=this.diff_xIndex(g,h));p[0]===\nDIFF_INSERT?b=b.substring(0,k+m)+p[1]+b.substring(k+m):p[0]===DIFF_DELETE&&(b=b.substring(0,k+m)+b.substring(k+this.diff_xIndex(g,h+p[1].length)));p[0]!==DIFF_DELETE&&(h+=p[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};\ndiff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c=\"\",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;d=a[0];var e=d.diffs;if(0==e.length||e[0][0]!=DIFF_EQUAL)e.unshift([DIFF_EQUAL,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||e[e.length-\n1][0]!=DIFF_EQUAL?(e.push([DIFF_EQUAL,c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};\ndiff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g=\"\";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,l=!0;h.start1=e-g.length;h.start2=f-g.length;\"\"!==g&&(h.length1=h.length2=g.length,h.diffs.push([DIFF_EQUAL,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){g=d.diffs[0][0];var k=d.diffs[0][1];g===DIFF_INSERT?(h.length2+=k.length,f+=k.length,h.diffs.push(d.diffs.shift()),\nl=!1):g===DIFF_DELETE&&1==h.diffs.length&&h.diffs[0][0]==DIFF_EQUAL&&k.length>2*b?(h.length1+=k.length,e+=k.length,l=!1,h.diffs.push([g,k]),d.diffs.shift()):(k=k.substring(0,b-h.length1-this.Patch_Margin),h.length1+=k.length,e+=k.length,g===DIFF_EQUAL?(h.length2+=k.length,f+=k.length):l=!1,h.diffs.push([g,k]),k==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(k.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);k=this.diff_text1(d.diffs).substring(0,\nthis.Patch_Margin);\"\"!==k&&(h.length1+=k.length,h.length2+=k.length,0!==h.diffs.length&&h.diffs[h.diffs.length-1][0]===DIFF_EQUAL?h.diffs[h.diffs.length-1][1]+=k:h.diffs.push([DIFF_EQUAL,k]));l||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join(\"\")};\ndiff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split(\"\\n\");for(var c=0,d=/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error(\"Invalid patch string: \"+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);\"\"===e[2]?(f.start1--,f.length1=1):\"0\"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);\"\"===e[4]?(f.start2--,f.length2=1):\"0\"==e[4]?f.length2=0:(f.start2--,f.length2=\nparseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error(\"Illegal escape in patch_fromText: \"+g);}if(\"-\"==e)f.diffs.push([DIFF_DELETE,g]);else if(\"+\"==e)f.diffs.push([DIFF_INSERT,g]);else if(\" \"==e)f.diffs.push([DIFF_EQUAL,g]);else if(\"@\"==e)break;else if(\"\"!==e)throw Error('Invalid patch mode \"'+e+'\" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};\ndiff_match_patch.patch_obj.prototype.toString=function(){for(var a=[\"@@ -\"+(0===this.length1?this.start1+\",0\":1==this.length1?this.start1+1:this.start1+1+\",\"+this.length1)+\" +\"+(0===this.length2?this.start2+\",0\":1==this.length2?this.start2+1:this.start2+1+\",\"+this.length2)+\" @@\\n\"],b,c=0;c<this.diffs.length;c++){switch(this.diffs[c][0]){case DIFF_INSERT:b=\"+\";break;case DIFF_DELETE:b=\"-\";break;case DIFF_EQUAL:b=\" \"}a[c+1]=b+encodeURI(this.diffs[c][1])+\"\\n\"}return a.join(\"\").replace(/%20/g,\" \")};\nthis.diff_match_patch=diff_match_patch;this.DIFF_DELETE=DIFF_DELETE;this.DIFF_INSERT=DIFF_INSERT;this.DIFF_EQUAL=DIFF_EQUAL;\n}).call(exports);",
"type": "application/javascript",
"title": "$:/core/modules/utils/diff-match-patch/diff_match_patch.js",
"module-type": "library"
},
"$:/core/modules/utils/dom/animations/slide.js": {
"title": "$:/core/modules/utils/dom/animations/slide.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "animation"
},
"$:/core/modules/utils/dom/animator.js": {
"title": "$:/core/modules/utils/dom/animator.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/browser.js": {
"title": "$:/core/modules/utils/dom/browser.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/csscolorparser.js": {
"title": "$:/core/modules/utils/dom/csscolorparser.js",
"text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom.js": {
"title": "$:/core/modules/utils/dom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.domMatchesSelector = function(node,selector) {\n\treturn node.matches ? node.matches(selector) : node.msMatchesSelector(selector);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.hasAttribute && el.hasAttribute(\"class\") && el.getAttribute(\"class\").split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = (el.getAttribute(\"class\") || \"\").split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t\tel.setAttribute(\"class\",c.join(\" \"));\n\t}\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = (el.getAttribute(\"class\") || \"\").split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.setAttribute(\"class\",c.join(\" \"));\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function(srcWindow) {\n\tvar scrollWindow = srcWindow || window;\n\tif(\"scrollX\" in scrollWindow) {\n\t\treturn {x: scrollWindow.scrollX, y: scrollWindow.scrollY};\n\t} else {\n\t\treturn {x: scrollWindow.document.documentElement.scrollLeft, y: scrollWindow.document.documentElement.scrollTop};\n\t}\n};\n\n/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight || parseInt(minHeight,10);\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(element.ownerDocument.defaultView),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\tvar done = false;\n\ttry {\n\t\twindow.localStorage.setItem(\"tw5-password-\" + name,password);\n\t\tdone = true;\n\t} catch(e) {\n\t}\n\tif(!done) {\n\t\t$tw.savedPasswords = $tw.savedPasswords || Object.create(null);\n\t\t$tw.savedPasswords[name] = password;\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\tvar value;\n\ttry {\n\t\tvalue = window.localStorage.getItem(\"tw5-password-\" + name);\n\t} catch(e) {\n\t}\n\tif(value !== undefined) {\n\t\treturn value;\n\t} else {\n\t\treturn ($tw.savedPasswords || Object.create(null))[name] || \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n/*\nCopy plain text to the clipboard on browsers that support it\n*/\nexports.copyToClipboard = function(text,options) {\n\toptions = options || {};\n\tvar textArea = document.createElement(\"textarea\");\n\ttextArea.style.position = \"fixed\";\n\ttextArea.style.top = 0;\n\ttextArea.style.left = 0;\n\ttextArea.style.fontSize = \"12pt\";\n\ttextArea.style.width = \"2em\";\n\ttextArea.style.height = \"2em\";\n\ttextArea.style.padding = 0;\n\ttextArea.style.border = \"none\";\n\ttextArea.style.outline = \"none\";\n\ttextArea.style.boxShadow = \"none\";\n\ttextArea.style.background = \"transparent\";\n\ttextArea.value = text;\n\tdocument.body.appendChild(textArea);\n\ttextArea.select();\n\ttextArea.setSelectionRange(0,text.length);\n\tvar succeeded = false;\n\ttry {\n\t\tsucceeded = document.execCommand(\"copy\");\n\t} catch (err) {\n\t}\n\tif(!options.doNotNotify) {\n\t\t$tw.notifier.display(succeeded ? \"$:/language/Notifications/CopiedToClipboard/Succeeded\" : \"$:/language/Notifications/CopiedToClipboard/Failed\");\n\t}\n\tdocument.body.removeChild(textArea);\n};\n\nexports.getLocationPath = function() {\n\treturn window.location.toString().split(\"#\")[0];\n};\n\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/dragndrop.js": {
"title": "$:/core/modules/utils/dom/dragndrop.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/dragndrop.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser data transfer utilities, used with the clipboard and drag and drop\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOptions:\n\ndomNode: dom node to make draggable\ndragImageType: \"pill\" or \"dom\"\ndragTiddlerFn: optional function to retrieve the title of tiddler to drag\ndragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag\nwidget: widget to use as the contect for the filter\n*/\nexports.makeDraggable = function(options) {\n\tvar dragImageType = options.dragImageType || \"dom\",\n\t\tdragImage,\n\t\tdomNode = options.domNode;\n\t// Make the dom node draggable (not necessary for anchor tags)\n\tif((domNode.tagName || \"\").toLowerCase() !== \"a\") {\n\t\tdomNode.setAttribute(\"draggable\",\"true\");\n\t}\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragstart\", handlerFunction: function(event) {\n\t\t\tif(event.dataTransfer === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Collect the tiddlers being dragged\n\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \tstartActions = options.startActions;\n\t\t\tif(dragFilter) {\n\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t}\n\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t// Check that we've something to drag\n\t\t\tif(titles.length > 0 && event.target === domNode) {\n\t\t\t\t// Mark the drag in progress\n\t\t\t\t$tw.dragInProgress = domNode;\n\t\t\t\t// Set the dragging class on the element being dragged\n\t\t\t\t$tw.utils.addClass(event.target,\"tc-dragging\");\n\t\t\t\t// Invoke drag-start actions if given\n\t\t\t\tif(startActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(startActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Create the drag image elements\n\t\t\t\tdragImage = options.widget.document.createElement(\"div\");\n\t\t\t\tdragImage.className = \"tc-tiddler-dragger\";\n\t\t\t\tvar inner = options.widget.document.createElement(\"div\");\n\t\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\t\tinner.appendChild(options.widget.document.createTextNode(\n\t\t\t\t\ttitles.length === 1 ? \n\t\t\t\t\t\ttitles[0] :\n\t\t\t\t\t\ttitles.length + \" tiddlers\"\n\t\t\t\t));\n\t\t\t\tdragImage.appendChild(inner);\n\t\t\t\toptions.widget.document.body.appendChild(dragImage);\n\t\t\t\t// Set the data transfer properties\n\t\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t\t// Set up the image\n\t\t\t\tdataTransfer.effectAllowed = \"all\";\n\t\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\t\tif(dragImageType === \"pill\") {\n\t\t\t\t\t\tdataTransfer.setDragImage(dragImage.firstChild,-16,-16);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar r = domNode.getBoundingClientRect();\n\t\t\t\t\t\tdataTransfer.setDragImage(domNode,event.clientX-r.left,event.clientY-r.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set up the data transfer\n\t\t\t\tif(dataTransfer.clearData) {\n\t\t\t\t\tdataTransfer.clearData();\n\t\t\t\t}\n\t\t\t\tvar jsonData = [];\n\t\t\t\tif(titles.length > 1) {\n\t\t\t\t\ttitles.forEach(function(title) {\n\t\t\t\t\t\tjsonData.push(options.widget.wiki.getTiddlerAsJson(title));\n\t\t\t\t\t});\n\t\t\t\t\tjsonData = \"[\" + jsonData.join(\",\") + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\tjsonData = options.widget.wiki.getTiddlerAsJson(titles[0]);\n\t\t\t\t}\n\t\t\t\t// IE doesn't like these content types\n\t\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\t\tdataTransfer.setData(\"text/plain\",titleString);\n\t\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\t}\n\t\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\tdataTransfer.setData(\"Text\",titleString);\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn false;\n\t\t}},\n\t\t{name: \"dragend\", handlerFunction: function(event) {\n\t\t\tif(event.target === domNode) {\n\t\t\t\t// Collect the tiddlers being dragged\n\t\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \t\tendActions = options.endActions;\n\t\t\t\tif(dragFilter) {\n\t\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t\t}\n\t\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t\t$tw.dragInProgress = null;\n\t\t\t\t// Invoke drag-end actions if given\n\t\t\t\tif(endActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(endActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Remove the dragging class on the element being dragged\n\t\t\t\t$tw.utils.removeClass(event.target,\"tc-dragging\");\n\t\t\t\t// Delete the drag image element\n\t\t\t\tif(dragImage) {\n\t\t\t\t\tdragImage.parentNode.removeChild(dragImage);\n\t\t\t\t\tdragImage = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}}\n\t]);\n};\n\nexports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {\n\t// Try each provided data type in turn\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Available data types:\");\n\t\tfor(var type=0; type<dataTransfer.types.length; type++) {\n\t\t\tconsole.log(\"type\",dataTransfer.types[type],dataTransfer.getData(dataTransfer.types[type]))\n\t\t}\n\t}\n\tfor(var t=0; t<importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);\n\t\t\t\tcallback(tiddlerFields);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn parseJSONTiddlers(data,fallbackTitle);\n\t}},\n\t{type: \"URL\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/plain\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"Text\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}}\n];\n\nfunction parseJSONTiddlers(json,fallbackTitle) {\n\tvar data = JSON.parse(json);\n\tif(!$tw.utils.isArray(data)) {\n\t\tdata = [data];\n\t}\n\tdata.forEach(function(fields) {\n\t\tfields.title = fields.title || fallbackTitle;\n\t});\n\treturn data;\n};\n\nexports.dragEventContainsFiles = function(event) {\n\tif(event.dataTransfer.types) {\n\t\tfor(var i=0; i<event.dataTransfer.types.length; i++) {\n\t\t\tif(event.dataTransfer.types[i] === \"Files\") {\n\t\t\t\treturn true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/http.js": {
"title": "$:/core/modules/utils/dom/http.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\theaders: hashmap of headers to send\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data,xhr)\n\treturnProp: string name of the property to return as first argument of callback\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\turl = options.url,\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\thasHeader = function(targetHeader) {\n\t\t\ttargetHeader = targetHeader.toLowerCase();\n\t\t\tvar result = false;\n\t\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\t\tif(headerTitle.toLowerCase() === targetHeader) {\n\t\t\t\t\tresult = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\treturnProp = options.returnProp || \"responseText\",\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tif(type === \"GET\" || type === \"HEAD\") {\n\t\t\t\turl += \"?\" + results.join(\"&\");\n\t\t\t} else {\n\t\t\t\tdata = results.join(\"&\");\n\t\t\t}\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this[returnProp],this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + this.status,null,this);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !hasHeader(\"Content-Type\")) {\n\t\trequest.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\tif(!hasHeader(\"X-Requested-With\")) {\n\t\trequest.setRequestHeader(\"X-Requested-With\",\"TiddlyWiki\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e,null,this);\n\t}\n\treturn request;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/keyboard.js": {
"title": "$:/core/modules/utils/dom/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/modal.js": {
"title": "$:/core/modules/utils/dom/modal.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\nvar navigator = require(\"$:/core/modules/widgets/navigator.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tthis.srcDocument = options.variables && (options.variables.rootwindow === \"true\" ||\n\t\t\t\toptions.variables.rootwindow === \"yes\") ? document :\n\t\t\t\t(options.event && options.event.event && options.event.event.target ? options.event.event.target.ownerDocument : document);\n\tthis.srcWindow = this.srcDocument.defaultView;\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({\n\t\t\tcurrentTiddler: title,\n\t\t\t\"tv-story-list\": (options.event && options.event.widget ? options.event.widget.getVariable(\"tv-story-list\") : \"\"),\n\t\t\t\"tv-history-list\": (options.event && options.event.widget ? options.event.widget.getVariable(\"tv-history-list\") : \"\")\n\t\t},options.variables);\n\n\t// Create the wrapper divs\n\tvar wrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalBackdrop = this.srcDocument.createElement(\"div\"),\n\t\tmodalWrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalHeader = this.srcDocument.createElement(\"div\"),\n\t\theaderTitle = this.srcDocument.createElement(\"h3\"),\n\t\tmodalBody = this.srcDocument.createElement(\"div\"),\n\t\tmodalLink = this.srcDocument.createElement(\"a\"),\n\t\tmodalFooter = this.srcDocument.createElement(\"div\"),\n\t\tmodalFooterHelp = this.srcDocument.createElement(\"span\"),\n\t\tmodalFooterButtons = this.srcDocument.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\tif(tiddler.fields && tiddler.fields.class) {\n\t\t$tw.utils.addClass(wrapper,tiddler.fields.class);\n\t}\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\tvar navigatorTree = {\n\t\t\"type\": \"navigator\",\n\t\t\"attributes\": {\n\t\t\t\"story\": {\n\t\t\t\t\"name\": \"story\",\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"value\": variables[\"tv-story-list\"]\n\t\t\t},\n\t\t\t\"history\": {\n\t\t\t\t\"name\": \"history\",\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"value\": variables[\"tv-history-list\"]\n\t\t\t}\n\t\t},\n\t\t\"tag\": \"$navigator\",\n\t\t\"isBlock\": true,\n\t\t\"children\": []\n\t};\n\tvar navigatorWidgetNode = new navigator.navigator(navigatorTree, {\n\t\twiki: this.wiki,\n\t\tdocument : this.srcDocument,\n\t\tparentWidget: $tw.rootWidget\n\t});\n\tnavigatorWidgetNode.render(modalBody,null);\n\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(this.srcDocument.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler.fields && tiddler.fields.help) {\n\t\tvar link = this.srcDocument.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\tlink.appendChild(this.srcDocument.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: $tw.language.getString(\"Buttons/Close/Caption\")\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + self.srcWindow.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\tself.srcWindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tself.srcDocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-this.srcWindow.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tthis.srcDocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tvar windowContainer = $tw.pageContainer ? ($tw.pageContainer === this.srcDocument.body.firstChild ? $tw.pageContainer : this.srcDocument.body.firstChild) : null;\n\tif(windowContainer) {\n\t\t$tw.utils.toggleClass(windowContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/notifier.js": {
"title": "$:/core/modules/utils/dom/notifier.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/popup.js": {
"title": "$:/core/modules/utils/dom/popup.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned (one of domNode or domNodeRect is required)\n\tdomNodeRect: rectangle to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n\tfloating: if true, skips registering the popup, meaning that it will need manually clearing\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\n\t// Store the popup details if not already there\n\tif(!options.floating && this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode,\n\t\t\tnoStateReference: options.noStateReference\n\t\t});\n\t}\n\t// Set the state tiddler\n\tvar rect;\n\tif(options.domNodeRect) {\n\t\trect = options.domNodeRect;\n\t} else {\n\t\trect = {\n\t\t\tleft: options.domNode.offsetLeft,\n\t\t\ttop: options.domNode.offsetTop,\n\t\t\twidth: options.domNode.offsetWidth,\n\t\t\theight: options.domNode.offsetHeight\n\t\t};\n\t}\n\tvar popupRect = \"(\" + rect.left + \",\" + rect.top + \",\" + \n\t\t\t\trect.width + \",\" + rect.height + \")\";\n\tif(options.noStateReference) {\n\t\toptions.wiki.setText(options.title,\"text\",undefined,popupRect);\n\t} else {\n\t\toptions.wiki.setTextReference(options.title,popupRect);\n\t}\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tif(popup.noStateReference) {\n\t\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t\t} else {\n\t\t\t\tpopup.wiki.deleteTiddler($tw.utils.parseTextReference(popup.title).title);\n \t\t}\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/scroller.js": {
"title": "$:/core/modules/utils/dom/scroller.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.isScrolling = function() {\n\treturn this.idRequestFrame !== null;\n}\n\nPageScroller.prototype.cancelScroll = function(srcWindow) {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(srcWindow,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\tif(event.paramObject && event.paramObject.selector) {\n\t\t\tthis.scrollSelectorIntoView(null,event.paramObject.selector);\n\t\t} else {\n\t\t\tthis.scrollIntoView(event.target);\n\t\t}\n\t\treturn false; // Event was handled\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element,callback) {\n\tvar self = this,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t srcWindow = element ? element.ownerDocument.defaultView : window;\n\t// Now get ready to scroll the body\n\tthis.cancelScroll(srcWindow);\n\tthis.startTime = Date.now();\n\t// Get the height of any position:fixed toolbars\n\tvar toolbar = srcWindow.document.querySelector(\".tc-adjust-top-of-scroll\"),\n\t\toffset = 0;\n\tif(toolbar) {\n\t\toffset = toolbar.offsetHeight;\n\t}\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar getBounds = function() {\n\t\t\tvar clientBounds = typeof callback === 'function' ? callback() : element.getBoundingClientRect(),\n\t\t\t\tscrollPosition = $tw.utils.getScrollPosition(srcWindow);\n\t\t\treturn {\n\t\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\t\ttop: clientBounds.top + scrollPosition.y - offset,\n\t\t\t\twidth: clientBounds.width,\n\t\t\t\theight: clientBounds.height\n\t\t\t};\n\t\t},\n\t\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t\t// targetPos/targetSize - position and size of the target element\n\t\t// currentPos/currentSize - position and size of the current scroll viewport\n\t\t// returns: new position of the scroll viewport\n\t\tgetEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = targetPos;\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tdrawFrame = function drawFrame() {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll(srcWindow);\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tvar scrollPosition = $tw.utils.getScrollPosition(srcWindow),\n\t\t\t\tbounds = getBounds(),\n\t\t\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,srcWindow.innerWidth),\n\t\t\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,srcWindow.innerHeight);\n\t\t\tsrcWindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\tdrawFrame();\n};\n\nPageScroller.prototype.scrollSelectorIntoView = function(baseElement,selector,callback) {\n\tbaseElement = baseElement || document.body;\n\tvar element = baseElement.querySelector(selector);\n\tif(element) {\n\t\tthis.scrollIntoView(element,callback);\n\t}\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/edition-info.js": {
"title": "$:/core/modules/utils/edition-info.js",
"text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/escapecss.js": {
"title": "$:/core/modules/utils/escapecss.js",
"text": "/*\\\ntitle: $:/core/modules/utils/escapecss.js\ntype: application/javascript\nmodule-type: utils\n\nProvides CSS.escape() functionality.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, window: false */\n\"use strict\";\n\nexports.escapeCSS = (function() {\n\t// use browser's native CSS.escape() function if available\n\tif ($tw.browser && window.CSS && window.CSS.escape) {\n\t\treturn window.CSS.escape;\n\t}\n\n\t// otherwise, a utility method is provided\n\t// see also https://drafts.csswg.org/cssom/#serialize-an-identifier\n\n\t/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */\n\treturn function(value) {\n\t\tif (arguments.length == 0) {\n\t\t\tthrow new TypeError('`CSS.escape` requires an argument.');\n\t\t}\n\t\tvar string = String(value);\n\t\tvar length = string.length;\n\t\tvar index = -1;\n\t\tvar codeUnit;\n\t\tvar result = '';\n\t\tvar firstCodeUnit = string.charCodeAt(0);\n\t\twhile (++index < length) {\n\t\t\tcodeUnit = string.charCodeAt(index);\n\t\t\t// Note: there’s no need to special-case astral symbols, surrogate\n\t\t\t// pairs, or lone surrogates.\n\n\t\t\t// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER\n\t\t\t// (U+FFFD).\n\t\t\tif (codeUnit == 0x0000) {\n\t\t\t\tresult += '\\uFFFD';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is in the range [\\1-\\1F] (U+0001 to U+001F) or is\n\t\t\t\t// U+007F, […]\n\t\t\t\t(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||\n\t\t\t\t// If the character is the first character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039), […]\n\t\t\t\t(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n\t\t\t\t// If the character is the second character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]\n\t\t\t\t(\n\t\t\t\t\tindex == 1 &&\n\t\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 &&\n\t\t\t\t\tfirstCodeUnit == 0x002D\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n\t\t\t\tresult += '\\\\' + codeUnit.toString(16) + ' ';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is the first character and is a `-` (U+002D), and\n\t\t\t\t// there is no second character, […]\n\t\t\t\tindex == 0 &&\n\t\t\t\tlength == 1 &&\n\t\t\t\tcodeUnit == 0x002D\n\t\t\t) {\n\t\t\t\tresult += '\\\\' + string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If the character is not handled by one of the above rules and is\n\t\t\t// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\n\t\t\t// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to\n\t\t\t// U+005A), or [a-z] (U+0061 to U+007A), […]\n\t\t\tif (\n\t\t\t\tcodeUnit >= 0x0080 ||\n\t\t\t\tcodeUnit == 0x002D ||\n\t\t\t\tcodeUnit == 0x005F ||\n\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 ||\n\t\t\t\tcodeUnit >= 0x0041 && codeUnit <= 0x005A ||\n\t\t\t\tcodeUnit >= 0x0061 && codeUnit <= 0x007A\n\t\t\t) {\n\t\t\t\t// the character itself\n\t\t\t\tresult += string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Otherwise, the escaped character.\n\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character\n\t\t\tresult += '\\\\' + string.charAt(index);\n\n\t\t}\n\t\treturn result;\n\t};\n})();\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/fakedom.js": {
"title": "$:/core/modules/utils/fakedom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_Node = function (){\n\tthrow TypeError(\"Illegal constructor\");\n};\n\nObject.defineProperty(TW_Node.prototype, 'ELEMENT_NODE', {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nObject.defineProperty(TW_Node.prototype, 'TEXT_NODE', {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text + \"\";\n};\n\nTW_TextNode.prototype = Object.create(TW_Node.prototype);\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn this.TEXT_NODE;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis._style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nTW_Element.prototype = Object.create(TW_Node.prototype);\n\nObject.defineProperty(TW_Element.prototype, \"style\", {\n\tget: function() {\n\t\treturn this._style;\n\t},\n\tset: function(str) {\n\t\tvar self = this;\n\t\tstr = str || \"\";\n\t\t$tw.utils.each(str.split(\";\"),function(declaration) {\n\t\t\tvar parts = declaration.split(\":\"),\n\t\t\t\tname = $tw.utils.trim(parts[0]),\n\t\t\t\tvalue = $tw.utils.trim(parts[1]);\n\t\t\tif(name && value) {\n\t\t\t\tself._style[$tw.utils.convertStyleNameToPropertyName(name)] = value;\n\t\t\t}\n\t\t});\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn this.ELEMENT_NODE;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value + \"\";\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this._style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this._style) {\n\t\t\t\tstyle.push($tw.utils.convertPropertyNameToStyleName(s) + \":\" + this._style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\");\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t\tthis.rawTextContent = null;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textInnerHTML\", {\n\tset: function(value) {\n\t\tif(this.isRaw) {\n\t\t\tthis.rawTextContent = value;\n\t\t} else {\n\t\t\tthrow \"Cannot set textInnerHTML of a non-raw TW_Element\";\n\t\t}\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tif(this.rawTextContent === null) {\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn this.rawTextContent;\n\t\t\t}\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/filesystem.js": {
"title": "$:/core/modules/utils/filesystem.js",
"text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nReturn the subdirectories of a path\n*/\nexports.getSubdirectories = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn null;\n\t}\n\tvar subdirs = [];\n\t$tw.utils.each(fs.readdirSync(dirPath),function(item) {\n\t\tif($tw.utils.isDirectory(path.resolve(dirPath,item))) {\n\t\t\tsubdirs.push(item);\n\t\t}\n\t});\n\treturn subdirs;\n}\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = path.resolve($tw.utils.removeTrailingSeparator(srcPath));\n\tdstPath = path.resolve($tw.utils.removeTrailingSeparator(dstPath));\n\t// Check that neither director is within the other\n\tif(srcPath.substring(0,dstPath.length) === dstPath || dstPath.substring(0,srcPath.length) === srcPath) {\n\t\treturn \"Cannot copy nested directories\";\n\t}\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = Buffer.alloc(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n/*\nCreate a fileInfo object for saving a tiddler:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file on disk (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n\tisEditableFile: true if the tiddler was loaded via non-standard options & marked editable\nOptions include:\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\textFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters,\n\tfileInfo: an existing fileInfo to check against\n*/\nexports.generateTiddlerFileInfo = function(tiddler,options) {\n\tvar fileInfo = {}, metaExt;\n\t// Propagate the isEditableFile flag\n\tif(options.fileInfo && !!options.fileInfo.isEditableFile) {\n\t\tfileInfo.isEditableFile = true;\n\t\tfileInfo.originalpath = options.fileInfo.originalpath;\n\t}\n\t// Check if the tiddler has any unsafe fields that can't be expressed in a .tid or .meta file: containing control characters, or leading/trailing whitespace\n\tvar hasUnsafeFields = false;\n\t$tw.utils.each(tiddler.getFieldStrings(),function(value,fieldName) {\n\t\tif(fieldName !== \"text\") {\n\t\t\thasUnsafeFields = hasUnsafeFields || /[\\x00-\\x1F]/mg.test(value);\n\t\t\thasUnsafeFields = hasUnsafeFields || ($tw.utils.trim(value) !== value);\n\t\t}\n\t});\n\t// Check for field values \n\tif(hasUnsafeFields) {\n\t\t// Save as a JSON file\n\t\tfileInfo.type = \"application/json\";\n\t\tfileInfo.hasMetaFile = false;\n\t} else {\n\t\t// Save as a .tid or a text/binary file plus a .meta file\n\t\tvar tiddlerType = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\tif(tiddlerType === \"text/vnd.tiddlywiki\") {\n\t\t\t// Save as a .tid file\n\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\tfileInfo.hasMetaFile = false;\n\t\t} else {\n\t\t\t// Save as a text/binary file and a .meta file\n\t\t\tfileInfo.type = tiddlerType;\n\t\t\tfileInfo.hasMetaFile = true;\n\t\t}\n\t\tif(options.extFilters) {\n\t\t\t// Check for extension overrides\n\t\t\tmetaExt = $tw.utils.generateTiddlerExtension(tiddler.fields.title,{\n\t\t\t\textFilters: options.extFilters,\n\t\t\t\twiki: options.wiki\n\t\t\t});\n\t\t\tif(metaExt) {\n\t\t\t\tif(metaExt === \".tid\") {\n\t\t\t\t\t// Overriding to the .tid extension needs special handling\n\t\t\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\t\t\tfileInfo.hasMetaFile = false;\n\t\t\t\t} else if (metaExt === \".json\") {\n\t\t\t\t\t// Overriding to the .json extension needs special handling\n\t\t\t\t\tfileInfo.type = \"application/json\";\n\t\t\t\t\tfileInfo.hasMetaFile = false;\n\t\t\t\t} else {\n\t\t\t\t\t//If the new type matches a known extention, use that MIME type's encoding\n\t\t\t\t\tvar extInfo = $tw.utils.getFileExtensionInfo(metaExt);\n\t\t\t\t\tfileInfo.type = extInfo ? extInfo.type : null;\n\t\t\t\t\tfileInfo.encoding = $tw.utils.getTypeEncoding(metaExt);\n\t\t\t\t\tfileInfo.hasMetaFile = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Take the file extension from the tiddler content type or metaExt\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[fileInfo.type] || {extension: \"\"};\n\t// Generate the filepath\n\tfileInfo.filepath = $tw.utils.generateTiddlerFilepath(tiddler.fields.title,{\n\t\textension: metaExt || contentTypeInfo.extension,\n\t\tdirectory: options.directory,\n\t\tpathFilters: options.pathFilters,\n\t\twiki: options.wiki,\n\t\tfileInfo: options.fileInfo\n\t});\n\treturn fileInfo;\n};\n\n/*\nGenerate the file extension for saving a tiddler\nOptions include:\n\textFilters: optional array of filters to be used to generate the extention\n\twiki: optional wiki for evaluating the extFilters\n*/\nexports.generateTiddlerExtension = function(title,options) {\n\tvar extension;\n\t// Check if any of the extFilters applies\n\tif(options.extFilters && options.wiki) { \n\t\t$tw.utils.each(options.extFilters,function(filter) {\n\t\t\tif(!extension) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\textension = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn extension;\n};\n\n/*\nGenerate the filepath for saving a tiddler\nOptions include:\n\textension: file extension to be added the finished filepath\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n\tfileInfo: an existing fileInfo object to check against\n*/\nexports.generateTiddlerFilepath = function(title,options) {\n\tvar directory = options.directory || \"\",\n\t\textension = options.extension || \"\",\n\t\toriginalpath = (options.fileInfo && options.fileInfo.originalpath) ? options.fileInfo.originalpath : \"\",\n\t\tfilepath;\n\t// Check if any of the pathFilters applies\n\tif(options.pathFilters && options.wiki) {\n\t\t$tw.utils.each(options.pathFilters,function(filter) {\n\t\t\tif(!filepath) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\tfilepath = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tif(!filepath && !!originalpath) {\n\t\t//Use the originalpath without the extension\n\t\tvar ext = path.extname(originalpath);\n\t\tfilepath = originalpath.substring(0,originalpath.length - ext.length);\n\t} else if(!filepath) {\n\t\tfilepath = title;\n\t\t// Remove any forward or backward slashes so we don't create directories\n\t\tfilepath = filepath.replace(/\\/|\\\\/g,\"_\");\n\t}\n\t// Replace any Windows control codes\n\tfilepath = filepath.replace(/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i,\"_$1_\");\n\t// Replace any leading spaces with the same number of underscores\n\tfilepath = filepath.replace(/^ +/,function (u) { return u.replace(/ /g, \"_\")});\n\t//If the path does not start with \".\" or \"..\" && a path seperator, then\n\tif(!/^\\.{1,2}[/\\\\]/g.test(filepath)) {\n\t\t// Don't let the filename start with any dots because such files are invisible on *nix\n\t\tfilepath = filepath.replace(/^\\.+/g,function (u) { return u.replace(/\\./g, \"_\")});\n\t}\n\t// Replace any Unicode control codes\n\tfilepath = filepath.replace(/[\\x00-\\x1f\\x80-\\x9f]/g,\"_\");\n\t// Replace any characters that can't be used in cross-platform filenames\n\tfilepath = $tw.utils.transliterate(filepath.replace(/<|>|~|\\:|\\\"|\\||\\?|\\*|\\^/g,\"_\"));\n\t// Replace any dots or spaces at the end of the extension with the same number of underscores\n\textension = extension.replace(/[\\. ]+$/, function (u) { return u.replace(/[\\. ]/g, \"_\")});\n\t// Truncate the extension if it is too long\n\tif(extension.length > 32) {\n\t\textension = extension.substr(0,32);\n\t}\n\t// If the filepath already ends in the extension then remove it\n\tif(filepath.substring(filepath.length - extension.length) === extension) {\n\t\tfilepath = filepath.substring(0,filepath.length - extension.length);\n\t}\n\t// Truncate the filename if it is too long\n\tif(filepath.length > 200) {\n\t\tfilepath = filepath.substr(0,200);\n\t}\n\t// If the resulting filename is blank (eg because the title is just punctuation)\n\tif(!filepath || /^_+$/g.test(filepath)) {\n\t\t// ...then just use the character codes of the title\n\t\tfilepath = \"\";\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tif(filepath) {\n\t\t\t\tfilepath += \"-\";\n\t\t\t}\n\t\t\tfilepath += char.charCodeAt(0).toString();\n\t\t});\n\t}\n\t// Add a uniquifier if the file already exists\n\tvar fullPath, oldPath = (options.fileInfo) ? options.fileInfo.filepath : undefined,\n\t\tcount = 0;\n\tdo {\n\t\tfullPath = path.resolve(directory,filepath + (count ? \"_\" + count : \"\") + extension);\n\t\tif(oldPath && oldPath == fullPath) {\n\t\t\tbreak;\n\t\t}\n\t\tcount++;\n\t} while(fs.existsSync(fullPath));\n\t// If the last write failed with an error, or if path does not start with:\n\t//\tthe resolved options.directory, the resolved wikiPath directory, the wikiTiddlersPath directory, \n\t//\tor the 'originalpath' directory, then encodeURIComponent() and resolve to tiddler directory.\n\tvar writePath = $tw.hooks.invokeHook(\"th-make-tiddler-path\",fullPath,fullPath),\n\t\tencode = (options.fileInfo || {writeError: false}).writeError == true;\n\tif(!encode) {\n\t\tencode = !(writePath.indexOf($tw.boot.wikiTiddlersPath) == 0 ||\n\t\t\twritePath.indexOf(path.resolve(directory)) == 0 ||\n\t\t\twritePath.indexOf(path.resolve($tw.boot.wikiPath)) == 0 ||\n\t\t\twritePath.indexOf(path.resolve($tw.boot.wikiTiddlersPath,originalpath)) == 0 );\n\t\t}\n\tif(encode) {\n\t\twritePath = path.resolve(directory,encodeURIComponent(fullPath));\n\t}\n\t// Return the full path to the file\n\treturn writePath;\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFile = function(tiddler,fileInfo,callback) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFile(fileInfo.filepath,tiddler.fields.text || \"\",typeInfo.encoding,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tfs.writeFile(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\",function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\treturn callback(null,fileInfo);\n\t\t\t});\n\t\t});\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFile(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\",function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\treturn callback(null,fileInfo);\n\t\t\t});\n\t\t} else {\n\t\t\tfs.writeFile(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\",function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\treturn callback(null,fileInfo);\n\t\t\t});\n\t\t}\n\t}\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFileSync = function(tiddler,fileInfo) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFileSync(fileInfo.filepath,tiddler.fields.text || \"\",typeInfo.encoding);\n\t\tfs.writeFileSync(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\");\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFileSync(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\");\n\t\t} else {\n\t\t\tfs.writeFileSync(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t}\n\t}\n\treturn fileInfo;\n};\n\n/*\nDelete a file described by the fileInfo if it exits\n*/\nexports.deleteTiddlerFile = function(fileInfo,callback) {\n\t//Only attempt to delete files that exist on disk\n\tif(!fileInfo.filepath || !fs.existsSync(fileInfo.filepath)) {\n\t\t//For some reason, the tiddler is only in memory or we can't modify the file at this path\n\t\t$tw.syncer.displayError(\"Server deleteTiddlerFile task failed for filepath: \"+fileInfo.filepath);\n\t\treturn callback(null,fileInfo);\n\t}\n\t// Delete the file\n\tfs.unlink(fileInfo.filepath,function(err) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Delete the metafile if present\n\t\tif(fileInfo.hasMetaFile && fs.existsSync(fileInfo.filepath + \".meta\")) {\n\t\t\tfs.unlink(fileInfo.filepath + \".meta\",function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),function(err) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\treturn callback(null,fileInfo);\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\treturn callback(null,fileInfo);\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nCleanup old files on disk, by comparing the options values:\n\tadaptorInfo from $tw.syncer.tiddlerInfo\n\tbootInfo from $tw.boot.files\n*/\nexports.cleanupTiddlerFiles = function(options,callback) {\n\tvar adaptorInfo = options.adaptorInfo || {},\n\tbootInfo = options.bootInfo || {},\n\ttitle = options.title || \"undefined\";\n\tif(adaptorInfo.filepath && bootInfo.filepath && adaptorInfo.filepath !== bootInfo.filepath) {\n\t\t$tw.utils.deleteTiddlerFile(adaptorInfo,function(err) {\n\t\t\tif(err) {\n\t\t\t\tif ((err.code == \"EPERM\" || err.code == \"EACCES\") && err.syscall == \"unlink\") {\n\t\t\t\t\t// Error deleting the previous file on disk, should fail gracefully\n\t\t\t\t\t$tw.syncer.displayError(\"Server desynchronized. Error cleaning up previous file for tiddler: \\\"\"+title+\"\\\"\",err);\n\t\t\t\t\treturn callback(null,bootInfo);\n\t\t\t\t} else {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn callback(null,bootInfo);\n\t\t});\n\t} else {\n\t\treturn callback(null,bootInfo);\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/linkedlist.js": {
"title": "$:/core/modules/utils/linkedlist.js",
"text": "/*\\\nmodule-type: utils\ntitle: $:/core/modules/utils/linkedlist.js\ntype: application/javascript\n\nThis is a doubly-linked indexed list intended for manipulation, particularly\npushTop, which it does with significantly better performance than an array.\n\n\\*/\n(function(){\n\nfunction LinkedList() {\n\tthis.clear();\n};\n\nLinkedList.prototype.clear = function() {\n\t// LinkedList performs the duty of both the head and tail node\n\tthis.next = Object.create(null);\n\tthis.prev = Object.create(null);\n\tthis.first = undefined;\n\tthis.last = undefined;\n\tthis.length = 0;\n};\n\nLinkedList.prototype.remove = function(value) {\n\tif($tw.utils.isArray(value)) {\n\t\tfor(var t=0; t<value.length; t++) {\n\t\t\t_assertString(value[t]);\n\t\t}\n\t\tfor(var t=0; t<value.length; t++) {\n\t\t\t_removeOne(this,value[t]);\n\t\t}\n\t} else {\n\t\t_assertString(value);\n\t\t_removeOne(this,value);\n\t}\n};\n\n/*\nPush behaves like array.push and accepts multiple string arguments. But it also\naccepts a single array argument too, to be consistent with its other methods.\n*/\nLinkedList.prototype.push = function(/* values */) {\n\tvar values = arguments;\n\tif($tw.utils.isArray(values[0])) {\n\t\tvalues = values[0];\n\t}\n\tfor(var i = 0; i < values.length; i++) {\n\t\t_assertString(values[i]);\n\t}\n\tfor(var i = 0; i < values.length; i++) {\n\t\t_linkToEnd(this,values[i]);\n\t}\n\treturn this.length;\n};\n\nLinkedList.prototype.pushTop = function(value) {\n\tif($tw.utils.isArray(value)) {\n\t\tfor (var t=0; t<value.length; t++) {\n\t\t\t_assertString(value[t]);\n\t\t}\n\t\tfor(var t=0; t<value.length; t++) {\n\t\t\t_removeOne(this,value[t]);\n\t\t}\n\t\tfor(var t=0; t<value.length; t++) {\n\t\t\t_linkToEnd(this,value[t]);\n\t\t}\n\t} else {\n\t\t_assertString(value);\n\t\t_removeOne(this,value);\n\t\t_linkToEnd(this,value);\n\t}\n};\n\nLinkedList.prototype.each = function(callback) {\n\tvar visits = Object.create(null),\n\t\tvalue = this.first;\n\twhile(value !== undefined) {\n\t\tcallback(value);\n\t\tvar next = this.next[value];\n\t\tif(typeof next === \"object\") {\n\t\t\tvar i = visits[value] || 0;\n\t\t\tvisits[value] = i+1;\n\t\t\tvalue = next[i];\n\t\t} else {\n\t\t\tvalue = next;\n\t\t}\n\t}\n};\n\nLinkedList.prototype.toArray = function() {\n\tvar output = new Array(this.length),\n\t\tindex = 0;\n\tthis.each(function(value) { output[index++] = value; });\n\treturn output;\n};\n\nfunction _removeOne(list,value) {\n\tvar prevEntry = list.prev[value],\n\t\tnextEntry = list.next[value],\n\t\tprev = prevEntry,\n\t\tnext = nextEntry;\n\tif(typeof nextEntry === \"object\") {\n\t\tnext = nextEntry[0];\n\t\tprev = prevEntry[0];\n\t}\n\t// Relink preceding element.\n\tif(list.first === value) {\n\t\tlist.first = next\n\t} else if(prev !== undefined) {\n\t\tif(typeof list.next[prev] === \"object\") {\n\t\t\tif(next === undefined) {\n\t\t\t\t// Must have been last, and 'i' would be last element.\n\t\t\t\tlist.next[prev].pop();\n\t\t\t} else {\n\t\t\t\tvar i = list.next[prev].indexOf(value);\n\t\t\t\tlist.next[prev][i] = next;\n\t\t\t}\n\t\t} else {\n\t\t\tlist.next[prev] = next;\n\t\t}\n\t} else {\n\t\treturn;\n\t}\n\t// Now relink following element\n\t// Check \"next !== undefined\" rather than \"list.last === value\" because\n\t// we need to know if the FIRST value is the last in the list, not the last.\n\tif(next !== undefined) {\n\t\tif(typeof list.prev[next] === \"object\") {\n\t\t\tif(prev === undefined) {\n\t\t\t\t// Must have been first, and 'i' would be 0.\n\t\t\t\tlist.prev[next].shift();\n\t\t\t} else {\n\t\t\t\tvar i = list.prev[next].indexOf(value);\n\t\t\t\tlist.prev[next][i] = prev;\n\t\t\t}\n\t\t} else {\n\t\t\tlist.prev[next] = prev;\n\t\t}\n\t} else {\n\t\tlist.last = prev;\n\t}\n\t// Delink actual value. If it uses arrays, just remove first entries.\n\tif(typeof nextEntry === \"object\") {\n\t\tnextEntry.shift();\n\t\tprevEntry.shift();\n\t} else {\n\t\tlist.next[value] = undefined;\n\t\tlist.prev[value] = undefined;\n\t}\n\tlist.length -= 1;\n};\n\n// Sticks the given node onto the end of the list.\nfunction _linkToEnd(list,value) {\n\tif(list.first === undefined) {\n\t\tlist.first = value;\n\t} else {\n\t\t// Does it already exists?\n\t\tif(list.first === value || list.prev[value] !== undefined) {\n\t\t\tif(typeof list.next[value] === \"string\") {\n\t\t\t\tlist.next[value] = [list.next[value]];\n\t\t\t\tlist.prev[value] = [list.prev[value]];\n\t\t\t} else if(typeof list.next[value] === \"undefined\") {\n\t\t\t\t// list.next[value] must be undefined.\n\t\t\t\t// Special case. List already has 1 value. It's at the end.\n\t\t\t\tlist.next[value] = [];\n\t\t\t\tlist.prev[value] = [list.prev[value]];\n\t\t\t}\n\t\t\tlist.prev[value].push(list.last);\n\t\t\t// We do NOT append a new value onto \"next\" list. Iteration will\n\t\t\t// figure out it must point to End-of-List on its own.\n\t\t} else {\n\t\t\tlist.prev[value] = list.last;\n\t\t}\n\t\t// Make the old last point to this new one.\n\t\tif(typeof list.next[list.last] === \"object\") {\n\t\t\tlist.next[list.last].push(value);\n\t\t} else {\n\t\t\tlist.next[list.last] = value;\n\t\t}\n\t}\n\tlist.last = value;\n\tlist.length += 1;\n};\n\nfunction _assertString(value) {\n\tif(typeof value !== \"string\") {\n\t\tthrow \"Linked List only accepts string values, not \" + value;\n\t}\n};\n\nexports.LinkedList = LinkedList;\n\n})();\n",
"module-type": "utils",
"type": "application/javascript"
},
"$:/core/modules/utils/logger.js": {
"title": "$:/core/modules/utils/logger.js",
"text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName,options) {\n\toptions = options || {};\n\tthis.componentName = componentName || \"\";\n\tthis.colour = options.colour || \"white\";\n\tthis.enable = \"enable\" in options ? options.enable : true;\n\tthis.save = \"save\" in options ? options.save : true;\n\tthis.saveLimit = options.saveLimit || 100 * 1024;\n\tthis.saveBufferLogger = this;\n\tthis.buffer = \"\";\n\tthis.alertCount = 0;\n}\n\nLogger.prototype.setSaveBuffer = function(logger) {\n\tthis.saveBufferLogger = logger;\n};\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tvar self = this;\n\tif(this.enable) {\n\t\tif(this.saveBufferLogger.save) {\n\t\t\tthis.saveBufferLogger.buffer += $tw.utils.formatDateString(new Date(),\"YYYY MM DD 0hh:0mm:0ss.0XXX\") + \":\";\n\t\t\t$tw.utils.each(Array.prototype.slice.call(arguments,0),function(arg,index) {\n\t\t\t\tself.saveBufferLogger.buffer += \" \" + arg;\n\t\t\t});\n\t\t\tthis.saveBufferLogger.buffer += \"\\n\";\n\t\t\tthis.saveBufferLogger.buffer = this.saveBufferLogger.buffer.slice(-this.saveBufferLogger.saveLimit);\n\t\t}\n\t\tif(console !== undefined && console.log !== undefined) {\n\t\t\treturn Function.apply.call(console.log, console, [$tw.utils.terminalColour(this.colour),this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)).concat($tw.utils.terminalColour()));\n\t\t}\n\t} \n};\n\n/*\nRead the message buffer\n*/\nLogger.prototype.getBuffer = function() {\n\treturn this.saveBufferLogger.buffer;\n};\n\n/*\nLog a structure as a table\n*/\nLogger.prototype.table = function(value) {\n\t(console.table || console.log)(value);\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\tif(this.enable) {\n\t\t// Prepare the text of the alert\n\t\tvar text = Array.prototype.join.call(arguments,\" \");\n\t\t// Create alert tiddlers in the browser\n\t\tif($tw.browser) {\n\t\t\t// Check if there is an existing alert with the same text and the same component\n\t\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\t\talertFields,\n\t\t\t\texistingCount,\n\t\t\t\tself = this;\n\t\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(alertFields) {\n\t\t\t\texistingCount = alertFields.count || 1;\n\t\t\t} else {\n\t\t\t\talertFields = {\n\t\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\t\ttext: text,\n\t\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\t\tcomponent: this.componentName\n\t\t\t\t};\n\t\t\t\texistingCount = 0;\n\t\t\t\tthis.alertCount += 1;\n\t\t\t}\n\t\t\talertFields.modified = new Date();\n\t\t\tif(++existingCount > 1) {\n\t\t\t\talertFields.count = existingCount;\n\t\t\t} else {\n\t\t\t\talertFields.count = undefined;\n\t\t\t}\n\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t\t// Log the alert as well\n\t\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\t// Print an orange message to the console if not in the browser\n\t\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t\t}\n\t}\n};\n\n/*\nClear outstanding alerts\n*/\nLogger.prototype.clearAlerts = function() {\n\tvar self = this;\n\tif($tw.browser && this.alertCount > 0) {\n\t\t$tw.utils.each($tw.wiki.getTiddlersWithTag(ALERT_TAG),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(tiddler.fields.component === self.componentName) {\n\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t}\n\t\t});\n\t\tthis.alertCount = 0;\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/parsetree.js": {
"title": "$:/core/modules/utils/parsetree.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/performance.js": {
"title": "$:/core/modules/utils/performance.js",
"text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap by measurement name of {time:, invocations:}\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n\tthis.showGreeting();\n}\n\nPerformance.prototype.showGreeting = function() {\n\tif($tw.browser) {\n\t\tthis.logger.log(\"Execute $tw.perf.log(); to see filter execution timings\");\n\t}\n};\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nPerformance.prototype.log = function() {\n\tvar self = this,\n\t\ttotalTime = 0,\n\t\torderedMeasures = Object.keys(this.measures).sort(function(a,b) {\n\t\t\tif(self.measures[a].time > self.measures[b].time) {\n\t\t\t\treturn -1;\n\t\t\t} else if (self.measures[a].time < self.measures[b].time) {\n\t\t\t\treturn + 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\ttotalTime += self.measures[name].time;\n\t});\n\tvar results = []\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\tvar measure = self.measures[name];\n\t\tresults.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100})\n\t});\n\tself.logger.table(results);\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tif(!(name in self.measures)) {\n\t\t\t\tself.measures[name] = {time: 0, invocations: 0};\n\t\t\t}\n\t\t\tself.measures[name].time += $tw.utils.timer(startTime);\n\t\t\tself.measures[name].invocations++;\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/pluginmaker.js": {
"title": "$:/core/modules/utils/pluginmaker.js",
"text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/transliterate.js": {
"title": "$:/core/modules/utils/transliterate.js",
"text": "/*\\\ntitle: $:/core/modules/utils/transliterate.js\ntype: application/javascript\nmodule-type: utils\n\nTransliteration static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nTransliterate string to ASCII\n\n(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)\n*/\nexports.transliterationPairs = {\n\t\"Á\":\"A\",\n\t\"Ă\":\"A\",\n\t\"Ắ\":\"A\",\n\t\"Ặ\":\"A\",\n\t\"Ằ\":\"A\",\n\t\"Ẳ\":\"A\",\n\t\"Ẵ\":\"A\",\n\t\"Ǎ\":\"A\",\n\t\"Â\":\"A\",\n\t\"Ấ\":\"A\",\n\t\"Ậ\":\"A\",\n\t\"Ầ\":\"A\",\n\t\"Ẩ\":\"A\",\n\t\"Ẫ\":\"A\",\n\t\"Ä\":\"A\",\n\t\"Ǟ\":\"A\",\n\t\"Ȧ\":\"A\",\n\t\"Ǡ\":\"A\",\n\t\"Ạ\":\"A\",\n\t\"Ȁ\":\"A\",\n\t\"À\":\"A\",\n\t\"Ả\":\"A\",\n\t\"Ȃ\":\"A\",\n\t\"Ā\":\"A\",\n\t\"Ą\":\"A\",\n\t\"Å\":\"A\",\n\t\"Ǻ\":\"A\",\n\t\"Ḁ\":\"A\",\n\t\"Ⱥ\":\"A\",\n\t\"Ã\":\"A\",\n\t\"Ꜳ\":\"AA\",\n\t\"Æ\":\"AE\",\n\t\"Ǽ\":\"AE\",\n\t\"Ǣ\":\"AE\",\n\t\"Ꜵ\":\"AO\",\n\t\"Ꜷ\":\"AU\",\n\t\"Ꜹ\":\"AV\",\n\t\"Ꜻ\":\"AV\",\n\t\"Ꜽ\":\"AY\",\n\t\"Ḃ\":\"B\",\n\t\"Ḅ\":\"B\",\n\t\"Ɓ\":\"B\",\n\t\"Ḇ\":\"B\",\n\t\"Ƀ\":\"B\",\n\t\"Ƃ\":\"B\",\n\t\"Ć\":\"C\",\n\t\"Č\":\"C\",\n\t\"Ç\":\"C\",\n\t\"Ḉ\":\"C\",\n\t\"Ĉ\":\"C\",\n\t\"Ċ\":\"C\",\n\t\"Ƈ\":\"C\",\n\t\"Ȼ\":\"C\",\n\t\"Ď\":\"D\",\n\t\"Ḑ\":\"D\",\n\t\"Ḓ\":\"D\",\n\t\"Ḋ\":\"D\",\n\t\"Ḍ\":\"D\",\n\t\"Ɗ\":\"D\",\n\t\"Ḏ\":\"D\",\n\t\"Dz\":\"D\",\n\t\"Dž\":\"D\",\n\t\"Đ\":\"D\",\n\t\"Ƌ\":\"D\",\n\t\"DZ\":\"DZ\",\n\t\"DŽ\":\"DZ\",\n\t\"É\":\"E\",\n\t\"Ĕ\":\"E\",\n\t\"Ě\":\"E\",\n\t\"Ȩ\":\"E\",\n\t\"Ḝ\":\"E\",\n\t\"Ê\":\"E\",\n\t\"Ế\":\"E\",\n\t\"Ệ\":\"E\",\n\t\"Ề\":\"E\",\n\t\"Ể\":\"E\",\n\t\"Ễ\":\"E\",\n\t\"Ḙ\":\"E\",\n\t\"Ë\":\"E\",\n\t\"Ė\":\"E\",\n\t\"Ẹ\":\"E\",\n\t\"Ȅ\":\"E\",\n\t\"È\":\"E\",\n\t\"Ẻ\":\"E\",\n\t\"Ȇ\":\"E\",\n\t\"Ē\":\"E\",\n\t\"Ḗ\":\"E\",\n\t\"Ḕ\":\"E\",\n\t\"Ę\":\"E\",\n\t\"Ɇ\":\"E\",\n\t\"Ẽ\":\"E\",\n\t\"Ḛ\":\"E\",\n\t\"Ꝫ\":\"ET\",\n\t\"Ḟ\":\"F\",\n\t\"Ƒ\":\"F\",\n\t\"Ǵ\":\"G\",\n\t\"Ğ\":\"G\",\n\t\"Ǧ\":\"G\",\n\t\"Ģ\":\"G\",\n\t\"Ĝ\":\"G\",\n\t\"Ġ\":\"G\",\n\t\"Ɠ\":\"G\",\n\t\"Ḡ\":\"G\",\n\t\"Ǥ\":\"G\",\n\t\"Ḫ\":\"H\",\n\t\"Ȟ\":\"H\",\n\t\"Ḩ\":\"H\",\n\t\"Ĥ\":\"H\",\n\t\"Ⱨ\":\"H\",\n\t\"Ḧ\":\"H\",\n\t\"Ḣ\":\"H\",\n\t\"Ḥ\":\"H\",\n\t\"Ħ\":\"H\",\n\t\"Í\":\"I\",\n\t\"Ĭ\":\"I\",\n\t\"Ǐ\":\"I\",\n\t\"Î\":\"I\",\n\t\"Ï\":\"I\",\n\t\"Ḯ\":\"I\",\n\t\"İ\":\"I\",\n\t\"Ị\":\"I\",\n\t\"Ȉ\":\"I\",\n\t\"Ì\":\"I\",\n\t\"Ỉ\":\"I\",\n\t\"Ȋ\":\"I\",\n\t\"Ī\":\"I\",\n\t\"Į\":\"I\",\n\t\"Ɨ\":\"I\",\n\t\"Ĩ\":\"I\",\n\t\"Ḭ\":\"I\",\n\t\"Ꝺ\":\"D\",\n\t\"Ꝼ\":\"F\",\n\t\"Ᵹ\":\"G\",\n\t\"Ꞃ\":\"R\",\n\t\"Ꞅ\":\"S\",\n\t\"Ꞇ\":\"T\",\n\t\"Ꝭ\":\"IS\",\n\t\"Ĵ\":\"J\",\n\t\"Ɉ\":\"J\",\n\t\"Ḱ\":\"K\",\n\t\"Ǩ\":\"K\",\n\t\"Ķ\":\"K\",\n\t\"Ⱪ\":\"K\",\n\t\"Ꝃ\":\"K\",\n\t\"Ḳ\":\"K\",\n\t\"Ƙ\":\"K\",\n\t\"Ḵ\":\"K\",\n\t\"Ꝁ\":\"K\",\n\t\"Ꝅ\":\"K\",\n\t\"Ĺ\":\"L\",\n\t\"Ƚ\":\"L\",\n\t\"Ľ\":\"L\",\n\t\"Ļ\":\"L\",\n\t\"Ḽ\":\"L\",\n\t\"Ḷ\":\"L\",\n\t\"Ḹ\":\"L\",\n\t\"Ⱡ\":\"L\",\n\t\"Ꝉ\":\"L\",\n\t\"Ḻ\":\"L\",\n\t\"Ŀ\":\"L\",\n\t\"Ɫ\":\"L\",\n\t\"Lj\":\"L\",\n\t\"Ł\":\"L\",\n\t\"LJ\":\"LJ\",\n\t\"Ḿ\":\"M\",\n\t\"Ṁ\":\"M\",\n\t\"Ṃ\":\"M\",\n\t\"Ɱ\":\"M\",\n\t\"Ń\":\"N\",\n\t\"Ň\":\"N\",\n\t\"Ņ\":\"N\",\n\t\"Ṋ\":\"N\",\n\t\"Ṅ\":\"N\",\n\t\"Ṇ\":\"N\",\n\t\"Ǹ\":\"N\",\n\t\"Ɲ\":\"N\",\n\t\"Ṉ\":\"N\",\n\t\"Ƞ\":\"N\",\n\t\"Nj\":\"N\",\n\t\"Ñ\":\"N\",\n\t\"NJ\":\"NJ\",\n\t\"Ó\":\"O\",\n\t\"Ŏ\":\"O\",\n\t\"Ǒ\":\"O\",\n\t\"Ô\":\"O\",\n\t\"Ố\":\"O\",\n\t\"Ộ\":\"O\",\n\t\"Ồ\":\"O\",\n\t\"Ổ\":\"O\",\n\t\"Ỗ\":\"O\",\n\t\"Ö\":\"O\",\n\t\"Ȫ\":\"O\",\n\t\"Ȯ\":\"O\",\n\t\"Ȱ\":\"O\",\n\t\"Ọ\":\"O\",\n\t\"Ő\":\"O\",\n\t\"Ȍ\":\"O\",\n\t\"Ò\":\"O\",\n\t\"Ỏ\":\"O\",\n\t\"Ơ\":\"O\",\n\t\"Ớ\":\"O\",\n\t\"Ợ\":\"O\",\n\t\"Ờ\":\"O\",\n\t\"Ở\":\"O\",\n\t\"Ỡ\":\"O\",\n\t\"Ȏ\":\"O\",\n\t\"Ꝋ\":\"O\",\n\t\"Ꝍ\":\"O\",\n\t\"Ō\":\"O\",\n\t\"Ṓ\":\"O\",\n\t\"Ṑ\":\"O\",\n\t\"Ɵ\":\"O\",\n\t\"Ǫ\":\"O\",\n\t\"Ǭ\":\"O\",\n\t\"Ø\":\"O\",\n\t\"Ǿ\":\"O\",\n\t\"Õ\":\"O\",\n\t\"Ṍ\":\"O\",\n\t\"Ṏ\":\"O\",\n\t\"Ȭ\":\"O\",\n\t\"Ƣ\":\"OI\",\n\t\"Ꝏ\":\"OO\",\n\t\"Ɛ\":\"E\",\n\t\"Ɔ\":\"O\",\n\t\"Ȣ\":\"OU\",\n\t\"Ṕ\":\"P\",\n\t\"Ṗ\":\"P\",\n\t\"Ꝓ\":\"P\",\n\t\"Ƥ\":\"P\",\n\t\"Ꝕ\":\"P\",\n\t\"Ᵽ\":\"P\",\n\t\"Ꝑ\":\"P\",\n\t\"Ꝙ\":\"Q\",\n\t\"Ꝗ\":\"Q\",\n\t\"Ŕ\":\"R\",\n\t\"Ř\":\"R\",\n\t\"Ŗ\":\"R\",\n\t\"Ṙ\":\"R\",\n\t\"Ṛ\":\"R\",\n\t\"Ṝ\":\"R\",\n\t\"Ȑ\":\"R\",\n\t\"Ȓ\":\"R\",\n\t\"Ṟ\":\"R\",\n\t\"Ɍ\":\"R\",\n\t\"Ɽ\":\"R\",\n\t\"Ꜿ\":\"C\",\n\t\"Ǝ\":\"E\",\n\t\"Ś\":\"S\",\n\t\"Ṥ\":\"S\",\n\t\"Š\":\"S\",\n\t\"Ṧ\":\"S\",\n\t\"Ş\":\"S\",\n\t\"Ŝ\":\"S\",\n\t\"Ș\":\"S\",\n\t\"Ṡ\":\"S\",\n\t\"Ṣ\":\"S\",\n\t\"Ṩ\":\"S\",\n\t\"Ť\":\"T\",\n\t\"Ţ\":\"T\",\n\t\"Ṱ\":\"T\",\n\t\"Ț\":\"T\",\n\t\"Ⱦ\":\"T\",\n\t\"Ṫ\":\"T\",\n\t\"Ṭ\":\"T\",\n\t\"Ƭ\":\"T\",\n\t\"Ṯ\":\"T\",\n\t\"Ʈ\":\"T\",\n\t\"Ŧ\":\"T\",\n\t\"Ɐ\":\"A\",\n\t\"Ꞁ\":\"L\",\n\t\"Ɯ\":\"M\",\n\t\"Ʌ\":\"V\",\n\t\"Ꜩ\":\"TZ\",\n\t\"Ú\":\"U\",\n\t\"Ŭ\":\"U\",\n\t\"Ǔ\":\"U\",\n\t\"Û\":\"U\",\n\t\"Ṷ\":\"U\",\n\t\"Ü\":\"U\",\n\t\"Ǘ\":\"U\",\n\t\"Ǚ\":\"U\",\n\t\"Ǜ\":\"U\",\n\t\"Ǖ\":\"U\",\n\t\"Ṳ\":\"U\",\n\t\"Ụ\":\"U\",\n\t\"Ű\":\"U\",\n\t\"Ȕ\":\"U\",\n\t\"Ù\":\"U\",\n\t\"Ủ\":\"U\",\n\t\"Ư\":\"U\",\n\t\"Ứ\":\"U\",\n\t\"Ự\":\"U\",\n\t\"Ừ\":\"U\",\n\t\"Ử\":\"U\",\n\t\"Ữ\":\"U\",\n\t\"Ȗ\":\"U\",\n\t\"Ū\":\"U\",\n\t\"Ṻ\":\"U\",\n\t\"Ų\":\"U\",\n\t\"Ů\":\"U\",\n\t\"Ũ\":\"U\",\n\t\"Ṹ\":\"U\",\n\t\"Ṵ\":\"U\",\n\t\"Ꝟ\":\"V\",\n\t\"Ṿ\":\"V\",\n\t\"Ʋ\":\"V\",\n\t\"Ṽ\":\"V\",\n\t\"Ꝡ\":\"VY\",\n\t\"Ẃ\":\"W\",\n\t\"Ŵ\":\"W\",\n\t\"Ẅ\":\"W\",\n\t\"Ẇ\":\"W\",\n\t\"Ẉ\":\"W\",\n\t\"Ẁ\":\"W\",\n\t\"Ⱳ\":\"W\",\n\t\"Ẍ\":\"X\",\n\t\"Ẋ\":\"X\",\n\t\"Ý\":\"Y\",\n\t\"Ŷ\":\"Y\",\n\t\"Ÿ\":\"Y\",\n\t\"Ẏ\":\"Y\",\n\t\"Ỵ\":\"Y\",\n\t\"Ỳ\":\"Y\",\n\t\"Ƴ\":\"Y\",\n\t\"Ỷ\":\"Y\",\n\t\"Ỿ\":\"Y\",\n\t\"Ȳ\":\"Y\",\n\t\"Ɏ\":\"Y\",\n\t\"Ỹ\":\"Y\",\n\t\"Ź\":\"Z\",\n\t\"Ž\":\"Z\",\n\t\"Ẑ\":\"Z\",\n\t\"Ⱬ\":\"Z\",\n\t\"Ż\":\"Z\",\n\t\"Ẓ\":\"Z\",\n\t\"Ȥ\":\"Z\",\n\t\"Ẕ\":\"Z\",\n\t\"Ƶ\":\"Z\",\n\t\"IJ\":\"IJ\",\n\t\"Œ\":\"OE\",\n\t\"ᴀ\":\"A\",\n\t\"ᴁ\":\"AE\",\n\t\"ʙ\":\"B\",\n\t\"ᴃ\":\"B\",\n\t\"ᴄ\":\"C\",\n\t\"ᴅ\":\"D\",\n\t\"ᴇ\":\"E\",\n\t\"ꜰ\":\"F\",\n\t\"ɢ\":\"G\",\n\t\"ʛ\":\"G\",\n\t\"ʜ\":\"H\",\n\t\"ɪ\":\"I\",\n\t\"ʁ\":\"R\",\n\t\"ᴊ\":\"J\",\n\t\"ᴋ\":\"K\",\n\t\"ʟ\":\"L\",\n\t\"ᴌ\":\"L\",\n\t\"ᴍ\":\"M\",\n\t\"ɴ\":\"N\",\n\t\"ᴏ\":\"O\",\n\t\"ɶ\":\"OE\",\n\t\"ᴐ\":\"O\",\n\t\"ᴕ\":\"OU\",\n\t\"ᴘ\":\"P\",\n\t\"ʀ\":\"R\",\n\t\"ᴎ\":\"N\",\n\t\"ᴙ\":\"R\",\n\t\"ꜱ\":\"S\",\n\t\"ᴛ\":\"T\",\n\t\"ⱻ\":\"E\",\n\t\"ᴚ\":\"R\",\n\t\"ᴜ\":\"U\",\n\t\"ᴠ\":\"V\",\n\t\"ᴡ\":\"W\",\n\t\"ʏ\":\"Y\",\n\t\"ᴢ\":\"Z\",\n\t\"á\":\"a\",\n\t\"ă\":\"a\",\n\t\"ắ\":\"a\",\n\t\"ặ\":\"a\",\n\t\"ằ\":\"a\",\n\t\"ẳ\":\"a\",\n\t\"ẵ\":\"a\",\n\t\"ǎ\":\"a\",\n\t\"â\":\"a\",\n\t\"ấ\":\"a\",\n\t\"ậ\":\"a\",\n\t\"ầ\":\"a\",\n\t\"ẩ\":\"a\",\n\t\"ẫ\":\"a\",\n\t\"ä\":\"a\",\n\t\"ǟ\":\"a\",\n\t\"ȧ\":\"a\",\n\t\"ǡ\":\"a\",\n\t\"ạ\":\"a\",\n\t\"ȁ\":\"a\",\n\t\"à\":\"a\",\n\t\"ả\":\"a\",\n\t\"ȃ\":\"a\",\n\t\"ā\":\"a\",\n\t\"ą\":\"a\",\n\t\"ᶏ\":\"a\",\n\t\"ẚ\":\"a\",\n\t\"å\":\"a\",\n\t\"ǻ\":\"a\",\n\t\"ḁ\":\"a\",\n\t\"ⱥ\":\"a\",\n\t\"ã\":\"a\",\n\t\"ꜳ\":\"aa\",\n\t\"æ\":\"ae\",\n\t\"ǽ\":\"ae\",\n\t\"ǣ\":\"ae\",\n\t\"ꜵ\":\"ao\",\n\t\"ꜷ\":\"au\",\n\t\"ꜹ\":\"av\",\n\t\"ꜻ\":\"av\",\n\t\"ꜽ\":\"ay\",\n\t\"ḃ\":\"b\",\n\t\"ḅ\":\"b\",\n\t\"ɓ\":\"b\",\n\t\"ḇ\":\"b\",\n\t\"ᵬ\":\"b\",\n\t\"ᶀ\":\"b\",\n\t\"ƀ\":\"b\",\n\t\"ƃ\":\"b\",\n\t\"ɵ\":\"o\",\n\t\"ć\":\"c\",\n\t\"č\":\"c\",\n\t\"ç\":\"c\",\n\t\"ḉ\":\"c\",\n\t\"ĉ\":\"c\",\n\t\"ɕ\":\"c\",\n\t\"ċ\":\"c\",\n\t\"ƈ\":\"c\",\n\t\"ȼ\":\"c\",\n\t\"ď\":\"d\",\n\t\"ḑ\":\"d\",\n\t\"ḓ\":\"d\",\n\t\"ȡ\":\"d\",\n\t\"ḋ\":\"d\",\n\t\"ḍ\":\"d\",\n\t\"ɗ\":\"d\",\n\t\"ᶑ\":\"d\",\n\t\"ḏ\":\"d\",\n\t\"ᵭ\":\"d\",\n\t\"ᶁ\":\"d\",\n\t\"đ\":\"d\",\n\t\"ɖ\":\"d\",\n\t\"ƌ\":\"d\",\n\t\"ı\":\"i\",\n\t\"ȷ\":\"j\",\n\t\"ɟ\":\"j\",\n\t\"ʄ\":\"j\",\n\t\"dz\":\"dz\",\n\t\"dž\":\"dz\",\n\t\"é\":\"e\",\n\t\"ĕ\":\"e\",\n\t\"ě\":\"e\",\n\t\"ȩ\":\"e\",\n\t\"ḝ\":\"e\",\n\t\"ê\":\"e\",\n\t\"ế\":\"e\",\n\t\"ệ\":\"e\",\n\t\"ề\":\"e\",\n\t\"ể\":\"e\",\n\t\"ễ\":\"e\",\n\t\"ḙ\":\"e\",\n\t\"ë\":\"e\",\n\t\"ė\":\"e\",\n\t\"ẹ\":\"e\",\n\t\"ȅ\":\"e\",\n\t\"è\":\"e\",\n\t\"ẻ\":\"e\",\n\t\"ȇ\":\"e\",\n\t\"ē\":\"e\",\n\t\"ḗ\":\"e\",\n\t\"ḕ\":\"e\",\n\t\"ⱸ\":\"e\",\n\t\"ę\":\"e\",\n\t\"ᶒ\":\"e\",\n\t\"ɇ\":\"e\",\n\t\"ẽ\":\"e\",\n\t\"ḛ\":\"e\",\n\t\"ꝫ\":\"et\",\n\t\"ḟ\":\"f\",\n\t\"ƒ\":\"f\",\n\t\"ᵮ\":\"f\",\n\t\"ᶂ\":\"f\",\n\t\"ǵ\":\"g\",\n\t\"ğ\":\"g\",\n\t\"ǧ\":\"g\",\n\t\"ģ\":\"g\",\n\t\"ĝ\":\"g\",\n\t\"ġ\":\"g\",\n\t\"ɠ\":\"g\",\n\t\"ḡ\":\"g\",\n\t\"ᶃ\":\"g\",\n\t\"ǥ\":\"g\",\n\t\"ḫ\":\"h\",\n\t\"ȟ\":\"h\",\n\t\"ḩ\":\"h\",\n\t\"ĥ\":\"h\",\n\t\"ⱨ\":\"h\",\n\t\"ḧ\":\"h\",\n\t\"ḣ\":\"h\",\n\t\"ḥ\":\"h\",\n\t\"ɦ\":\"h\",\n\t\"ẖ\":\"h\",\n\t\"ħ\":\"h\",\n\t\"ƕ\":\"hv\",\n\t\"í\":\"i\",\n\t\"ĭ\":\"i\",\n\t\"ǐ\":\"i\",\n\t\"î\":\"i\",\n\t\"ï\":\"i\",\n\t\"ḯ\":\"i\",\n\t\"ị\":\"i\",\n\t\"ȉ\":\"i\",\n\t\"ì\":\"i\",\n\t\"ỉ\":\"i\",\n\t\"ȋ\":\"i\",\n\t\"ī\":\"i\",\n\t\"į\":\"i\",\n\t\"ᶖ\":\"i\",\n\t\"ɨ\":\"i\",\n\t\"ĩ\":\"i\",\n\t\"ḭ\":\"i\",\n\t\"ꝺ\":\"d\",\n\t\"ꝼ\":\"f\",\n\t\"ᵹ\":\"g\",\n\t\"ꞃ\":\"r\",\n\t\"ꞅ\":\"s\",\n\t\"ꞇ\":\"t\",\n\t\"ꝭ\":\"is\",\n\t\"ǰ\":\"j\",\n\t\"ĵ\":\"j\",\n\t\"ʝ\":\"j\",\n\t\"ɉ\":\"j\",\n\t\"ḱ\":\"k\",\n\t\"ǩ\":\"k\",\n\t\"ķ\":\"k\",\n\t\"ⱪ\":\"k\",\n\t\"ꝃ\":\"k\",\n\t\"ḳ\":\"k\",\n\t\"ƙ\":\"k\",\n\t\"ḵ\":\"k\",\n\t\"ᶄ\":\"k\",\n\t\"ꝁ\":\"k\",\n\t\"ꝅ\":\"k\",\n\t\"ĺ\":\"l\",\n\t\"ƚ\":\"l\",\n\t\"ɬ\":\"l\",\n\t\"ľ\":\"l\",\n\t\"ļ\":\"l\",\n\t\"ḽ\":\"l\",\n\t\"ȴ\":\"l\",\n\t\"ḷ\":\"l\",\n\t\"ḹ\":\"l\",\n\t\"ⱡ\":\"l\",\n\t\"ꝉ\":\"l\",\n\t\"ḻ\":\"l\",\n\t\"ŀ\":\"l\",\n\t\"ɫ\":\"l\",\n\t\"ᶅ\":\"l\",\n\t\"ɭ\":\"l\",\n\t\"ł\":\"l\",\n\t\"lj\":\"lj\",\n\t\"ſ\":\"s\",\n\t\"ẜ\":\"s\",\n\t\"ẛ\":\"s\",\n\t\"ẝ\":\"s\",\n\t\"ḿ\":\"m\",\n\t\"ṁ\":\"m\",\n\t\"ṃ\":\"m\",\n\t\"ɱ\":\"m\",\n\t\"ᵯ\":\"m\",\n\t\"ᶆ\":\"m\",\n\t\"ń\":\"n\",\n\t\"ň\":\"n\",\n\t\"ņ\":\"n\",\n\t\"ṋ\":\"n\",\n\t\"ȵ\":\"n\",\n\t\"ṅ\":\"n\",\n\t\"ṇ\":\"n\",\n\t\"ǹ\":\"n\",\n\t\"ɲ\":\"n\",\n\t\"ṉ\":\"n\",\n\t\"ƞ\":\"n\",\n\t\"ᵰ\":\"n\",\n\t\"ᶇ\":\"n\",\n\t\"ɳ\":\"n\",\n\t\"ñ\":\"n\",\n\t\"nj\":\"nj\",\n\t\"ó\":\"o\",\n\t\"ŏ\":\"o\",\n\t\"ǒ\":\"o\",\n\t\"ô\":\"o\",\n\t\"ố\":\"o\",\n\t\"ộ\":\"o\",\n\t\"ồ\":\"o\",\n\t\"ổ\":\"o\",\n\t\"ỗ\":\"o\",\n\t\"ö\":\"o\",\n\t\"ȫ\":\"o\",\n\t\"ȯ\":\"o\",\n\t\"ȱ\":\"o\",\n\t\"ọ\":\"o\",\n\t\"ő\":\"o\",\n\t\"ȍ\":\"o\",\n\t\"ò\":\"o\",\n\t\"ỏ\":\"o\",\n\t\"ơ\":\"o\",\n\t\"ớ\":\"o\",\n\t\"ợ\":\"o\",\n\t\"ờ\":\"o\",\n\t\"ở\":\"o\",\n\t\"ỡ\":\"o\",\n\t\"ȏ\":\"o\",\n\t\"ꝋ\":\"o\",\n\t\"ꝍ\":\"o\",\n\t\"ⱺ\":\"o\",\n\t\"ō\":\"o\",\n\t\"ṓ\":\"o\",\n\t\"ṑ\":\"o\",\n\t\"ǫ\":\"o\",\n\t\"ǭ\":\"o\",\n\t\"ø\":\"o\",\n\t\"ǿ\":\"o\",\n\t\"õ\":\"o\",\n\t\"ṍ\":\"o\",\n\t\"ṏ\":\"o\",\n\t\"ȭ\":\"o\",\n\t\"ƣ\":\"oi\",\n\t\"ꝏ\":\"oo\",\n\t\"ɛ\":\"e\",\n\t\"ᶓ\":\"e\",\n\t\"ɔ\":\"o\",\n\t\"ᶗ\":\"o\",\n\t\"ȣ\":\"ou\",\n\t\"ṕ\":\"p\",\n\t\"ṗ\":\"p\",\n\t\"ꝓ\":\"p\",\n\t\"ƥ\":\"p\",\n\t\"ᵱ\":\"p\",\n\t\"ᶈ\":\"p\",\n\t\"ꝕ\":\"p\",\n\t\"ᵽ\":\"p\",\n\t\"ꝑ\":\"p\",\n\t\"ꝙ\":\"q\",\n\t\"ʠ\":\"q\",\n\t\"ɋ\":\"q\",\n\t\"ꝗ\":\"q\",\n\t\"ŕ\":\"r\",\n\t\"ř\":\"r\",\n\t\"ŗ\":\"r\",\n\t\"ṙ\":\"r\",\n\t\"ṛ\":\"r\",\n\t\"ṝ\":\"r\",\n\t\"ȑ\":\"r\",\n\t\"ɾ\":\"r\",\n\t\"ᵳ\":\"r\",\n\t\"ȓ\":\"r\",\n\t\"ṟ\":\"r\",\n\t\"ɼ\":\"r\",\n\t\"ᵲ\":\"r\",\n\t\"ᶉ\":\"r\",\n\t\"ɍ\":\"r\",\n\t\"ɽ\":\"r\",\n\t\"ↄ\":\"c\",\n\t\"ꜿ\":\"c\",\n\t\"ɘ\":\"e\",\n\t\"ɿ\":\"r\",\n\t\"ś\":\"s\",\n\t\"ṥ\":\"s\",\n\t\"š\":\"s\",\n\t\"ṧ\":\"s\",\n\t\"ş\":\"s\",\n\t\"ŝ\":\"s\",\n\t\"ș\":\"s\",\n\t\"ṡ\":\"s\",\n\t\"ṣ\":\"s\",\n\t\"ṩ\":\"s\",\n\t\"ʂ\":\"s\",\n\t\"ᵴ\":\"s\",\n\t\"ᶊ\":\"s\",\n\t\"ȿ\":\"s\",\n\t\"ɡ\":\"g\",\n\t\"ᴑ\":\"o\",\n\t\"ᴓ\":\"o\",\n\t\"ᴝ\":\"u\",\n\t\"ť\":\"t\",\n\t\"ţ\":\"t\",\n\t\"ṱ\":\"t\",\n\t\"ț\":\"t\",\n\t\"ȶ\":\"t\",\n\t\"ẗ\":\"t\",\n\t\"ⱦ\":\"t\",\n\t\"ṫ\":\"t\",\n\t\"ṭ\":\"t\",\n\t\"ƭ\":\"t\",\n\t\"ṯ\":\"t\",\n\t\"ᵵ\":\"t\",\n\t\"ƫ\":\"t\",\n\t\"ʈ\":\"t\",\n\t\"ŧ\":\"t\",\n\t\"ᵺ\":\"th\",\n\t\"ɐ\":\"a\",\n\t\"ᴂ\":\"ae\",\n\t\"ǝ\":\"e\",\n\t\"ᵷ\":\"g\",\n\t\"ɥ\":\"h\",\n\t\"ʮ\":\"h\",\n\t\"ʯ\":\"h\",\n\t\"ᴉ\":\"i\",\n\t\"ʞ\":\"k\",\n\t\"ꞁ\":\"l\",\n\t\"ɯ\":\"m\",\n\t\"ɰ\":\"m\",\n\t\"ᴔ\":\"oe\",\n\t\"ɹ\":\"r\",\n\t\"ɻ\":\"r\",\n\t\"ɺ\":\"r\",\n\t\"ⱹ\":\"r\",\n\t\"ʇ\":\"t\",\n\t\"ʌ\":\"v\",\n\t\"ʍ\":\"w\",\n\t\"ʎ\":\"y\",\n\t\"ꜩ\":\"tz\",\n\t\"ú\":\"u\",\n\t\"ŭ\":\"u\",\n\t\"ǔ\":\"u\",\n\t\"û\":\"u\",\n\t\"ṷ\":\"u\",\n\t\"ü\":\"u\",\n\t\"ǘ\":\"u\",\n\t\"ǚ\":\"u\",\n\t\"ǜ\":\"u\",\n\t\"ǖ\":\"u\",\n\t\"ṳ\":\"u\",\n\t\"ụ\":\"u\",\n\t\"ű\":\"u\",\n\t\"ȕ\":\"u\",\n\t\"ù\":\"u\",\n\t\"ủ\":\"u\",\n\t\"ư\":\"u\",\n\t\"ứ\":\"u\",\n\t\"ự\":\"u\",\n\t\"ừ\":\"u\",\n\t\"ử\":\"u\",\n\t\"ữ\":\"u\",\n\t\"ȗ\":\"u\",\n\t\"ū\":\"u\",\n\t\"ṻ\":\"u\",\n\t\"ų\":\"u\",\n\t\"ᶙ\":\"u\",\n\t\"ů\":\"u\",\n\t\"ũ\":\"u\",\n\t\"ṹ\":\"u\",\n\t\"ṵ\":\"u\",\n\t\"ᵫ\":\"ue\",\n\t\"ꝸ\":\"um\",\n\t\"ⱴ\":\"v\",\n\t\"ꝟ\":\"v\",\n\t\"ṿ\":\"v\",\n\t\"ʋ\":\"v\",\n\t\"ᶌ\":\"v\",\n\t\"ⱱ\":\"v\",\n\t\"ṽ\":\"v\",\n\t\"ꝡ\":\"vy\",\n\t\"ẃ\":\"w\",\n\t\"ŵ\":\"w\",\n\t\"ẅ\":\"w\",\n\t\"ẇ\":\"w\",\n\t\"ẉ\":\"w\",\n\t\"ẁ\":\"w\",\n\t\"ⱳ\":\"w\",\n\t\"ẘ\":\"w\",\n\t\"ẍ\":\"x\",\n\t\"ẋ\":\"x\",\n\t\"ᶍ\":\"x\",\n\t\"ý\":\"y\",\n\t\"ŷ\":\"y\",\n\t\"ÿ\":\"y\",\n\t\"ẏ\":\"y\",\n\t\"ỵ\":\"y\",\n\t\"ỳ\":\"y\",\n\t\"ƴ\":\"y\",\n\t\"ỷ\":\"y\",\n\t\"ỿ\":\"y\",\n\t\"ȳ\":\"y\",\n\t\"ẙ\":\"y\",\n\t\"ɏ\":\"y\",\n\t\"ỹ\":\"y\",\n\t\"ź\":\"z\",\n\t\"ž\":\"z\",\n\t\"ẑ\":\"z\",\n\t\"ʑ\":\"z\",\n\t\"ⱬ\":\"z\",\n\t\"ż\":\"z\",\n\t\"ẓ\":\"z\",\n\t\"ȥ\":\"z\",\n\t\"ẕ\":\"z\",\n\t\"ᵶ\":\"z\",\n\t\"ᶎ\":\"z\",\n\t\"ʐ\":\"z\",\n\t\"ƶ\":\"z\",\n\t\"ɀ\":\"z\",\n\t\"ff\":\"ff\",\n\t\"ffi\":\"ffi\",\n\t\"ffl\":\"ffl\",\n\t\"fi\":\"fi\",\n\t\"fl\":\"fl\",\n\t\"ij\":\"ij\",\n\t\"œ\":\"oe\",\n\t\"st\":\"st\",\n\t\"ₐ\":\"a\",\n\t\"ₑ\":\"e\",\n\t\"ᵢ\":\"i\",\n\t\"ⱼ\":\"j\",\n\t\"ₒ\":\"o\",\n\t\"ᵣ\":\"r\",\n\t\"ᵤ\":\"u\",\n\t\"ᵥ\":\"v\",\n\t\"ₓ\":\"x\",\n\t\"Ё\":\"YO\",\n\t\"Й\":\"I\",\n\t\"Ц\":\"TS\",\n\t\"У\":\"U\",\n\t\"К\":\"K\",\n\t\"Е\":\"E\",\n\t\"Н\":\"N\",\n\t\"Г\":\"G\",\n\t\"Ш\":\"SH\",\n\t\"Щ\":\"SCH\",\n\t\"З\":\"Z\",\n\t\"Х\":\"H\",\n\t\"Ъ\":\"'\",\n\t\"ё\":\"yo\",\n\t\"й\":\"i\",\n\t\"ц\":\"ts\",\n\t\"у\":\"u\",\n\t\"к\":\"k\",\n\t\"е\":\"e\",\n\t\"н\":\"n\",\n\t\"г\":\"g\",\n\t\"ш\":\"sh\",\n\t\"щ\":\"sch\",\n\t\"з\":\"z\",\n\t\"х\":\"h\",\n\t\"ъ\":\"'\",\n\t\"Ф\":\"F\",\n\t\"Ы\":\"I\",\n\t\"В\":\"V\",\n\t\"А\":\"a\",\n\t\"П\":\"P\",\n\t\"Р\":\"R\",\n\t\"О\":\"O\",\n\t\"Л\":\"L\",\n\t\"Д\":\"D\",\n\t\"Ж\":\"ZH\",\n\t\"Э\":\"E\",\n\t\"ф\":\"f\",\n\t\"ы\":\"i\",\n\t\"в\":\"v\",\n\t\"а\":\"a\",\n\t\"п\":\"p\",\n\t\"р\":\"r\",\n\t\"о\":\"o\",\n\t\"л\":\"l\",\n\t\"д\":\"d\",\n\t\"ж\":\"zh\",\n\t\"э\":\"e\",\n\t\"Я\":\"Ya\",\n\t\"Ч\":\"CH\",\n\t\"С\":\"S\",\n\t\"М\":\"M\",\n\t\"И\":\"I\",\n\t\"Т\":\"T\",\n\t\"Ь\":\"'\",\n\t\"Б\":\"B\",\n\t\"Ю\":\"YU\",\n\t\"я\":\"ya\",\n\t\"ч\":\"ch\",\n\t\"с\":\"s\",\n\t\"м\":\"m\",\n\t\"и\":\"i\",\n\t\"т\":\"t\",\n\t\"ь\":\"'\",\n\t\"б\":\"b\",\n\t\"ю\":\"yu\"\n};\n\nexports.transliterate = function(str) {\n\treturn str.replace(/[^A-Za-z0-9\\[\\] ]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || ch\n\t});\n};\n\nexports.transliterateToSafeASCII = function(str) {\n\treturn str.replace(/[^\\x00-\\x7F]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || \"\"\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/utils.js": {
"title": "$:/core/modules/utils/utils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar base64utf8 = require(\"$:/core/modules/utils/base64-utf8/base64-utf8.module.js\");\n\n/*\nDisplay a message, in colour if we're on a terminal\n*/\nexports.log = function(text,colour) {\n\tconsole.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);\n};\n\nexports.terminalColour = function(colour) {\n\tif(!$tw.browser && $tw.node && process.stdout.isTTY) {\n\t\tif(colour) {\n\t\t\tvar code = exports.terminalColourLookup[colour];\n\t\t\tif(code) {\n\t\t\t\treturn \"\\x1b[\" + code + \"m\";\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"\\x1b[0m\"; // Cancel colour\n\t\t}\n\t}\n\treturn \"\";\n};\n\nexports.terminalColourLookup = {\n\t\"black\": \"0;30\",\n\t\"red\": \"0;31\",\n\t\"green\": \"0;32\",\n\t\"brown/orange\": \"0;33\",\n\t\"blue\": \"0;34\",\n\t\"purple\": \"0;35\",\n\t\"cyan\": \"0;36\",\n\t\"light gray\": \"0;37\"\n};\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\texports.log(text,\"brown/orange\");\n};\n\n/*\nLog a table of name: value pairs\n*/\nexports.logTable = function(data) {\n\tif(console.table) {\n\t\tconsole.table(data);\n\t} else {\n\t\t$tw.utils.each(data,function(value,name) {\n\t\t\tconsole.log(name + \": \" + value);\n\t\t});\n\t}\n}\n\n/*\nReturn the integer represented by the str (string).\nReturn the dflt (default) parameter if str is not a base-10 number.\n*/\nexports.getInt = function(str,deflt) {\n\tvar i = parseInt(str,10);\n\treturn isNaN(i) ? deflt : i;\n}\n\n/*\nRepeatedly replaces a substring within a string. Like String.prototype.replace, but without any of the default special handling of $ sequences in the replace string\n*/\nexports.replaceString = function(text,search,replace) {\n\treturn text.replace(search,function() {\n\t\treturn replace;\n\t});\n};\n\n/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\nexports.trimPrefix = function(str,unwanted) {\n\tif(typeof str === \"string\" && typeof unwanted === \"string\") {\n\t\tif(unwanted === \"\") {\n\t\t\treturn str.replace(/^\\s\\s*/, '');\n\t\t} else {\n\t\t\t// Safely regexp-escape the unwanted text\n\t\t\tunwanted = unwanted.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t\tvar regex = new RegExp('^(' + unwanted + ')+');\n\t\t\treturn str.replace(regex, '');\n\t\t}\n\t} else {\n\t\treturn str;\n\t}\n};\n\nexports.trimSuffix = function(str,unwanted) {\n\tif(typeof str === \"string\" && typeof unwanted === \"string\") {\n\t\tif(unwanted === \"\") {\n\t\t\treturn str.replace(/\\s\\s*$/, '');\n\t\t} else {\n\t\t\t// Safely regexp-escape the unwanted text\n\t\t\tunwanted = unwanted.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t\tvar regex = new RegExp('(' + unwanted + ')+$');\n\t\t\treturn str.replace(regex, '');\n\t\t}\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nConvert a string to sentence case (ie capitalise first letter)\n*/\nexports.toSentenceCase = function(str) {\n\treturn (str || \"\").replace(/^\\S/, function(c) {return c.toUpperCase();});\n}\n\n/*\nConvert a string to title case (ie capitalise each initial letter)\n*/\nexports.toTitleCase = function(str) {\n\treturn (str || \"\").replace(/(^|\\s)\\S/g, function(c) {return c.toUpperCase();});\n}\n\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nDetermine whether an array-item is an object-property\n*/\nexports.hopArray = function(object,array) {\n\tfor(var i=0; i<array.length; i++) {\n\t\tif($tw.utils.hop(object,array[i])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tif(object) {\n\t\tObject.freeze(object);\n\t\tfor(key in object) {\n\t\t\tproperty = object[key];\n\t\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\t\tdeepFreeze(property);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatTitleString = function(template,options) {\n\tvar base = options.base || \"\",\n\t\tseparator = options.separator || \"\",\n\t\tcounter = options.counter || \"\";\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^\\$basename\\$/i, function() {\n\t\t\t\treturn base;\n\t\t\t}],\n\t\t\t[/^\\$count:(\\d+)\\$/i, function(match) {\n\t\t\t\treturn $tw.utils.pad(counter,match[1]);\n\t\t\t}],\n\t\t\t[/^\\$separator\\$/i, function() {\n\t\t\t\treturn separator;\n\t\t\t}],\n\t\t\t[/^\\$count\\$/i, function() {\n\t\t\t\treturn counter + \"\";\n\t\t\t}]\n\t\t];\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call(null,match);\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date),4);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear(),4);\n\t\t\t}],\n\t\t\t[/^aYYYY/, function() {\n\t\t\t\treturn $tw.utils.pad(Math.abs(date.getFullYear()),4);\n\t\t\t}],\n\t\t\t[/^\\{era:([^,\\|}]*)\\|([^}\\|]*)\\|([^}]*)\\}/, function(match) {\n\t\t\t\tvar year = date.getFullYear();\n\t\t\t\treturn year === 0 ? match[2] : (year < 0 ? match[1] : match[3]);\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0XXX/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMilliseconds(),3);\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^XXX/, function() {\n\t\t\t\treturn date.getMilliseconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\t// If the user wants everything in UTC, shift the datestamp\n\t// Optimize for format string that essentially means\n\t// 'return raw UTC (tiddlywiki style) date string.'\n\tif(t.indexOf(\"[UTC]\") == 0 ) {\n\t\tif(t == \"[UTC]YYYY0MM0DD0hh0mm0ssXXX\")\n\t\t\treturn $tw.utils.stringifyDate(new Date());\n\t\tvar offset = date.getTimezoneOffset() ; // in minutes\n\t\tdate = new Date(date.getTime()+offset*60*1000) ;\n\t\tt = t.substr(5) ;\n\t}\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call(null,match);\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar x = new Date(dt.getFullYear(),0,1);\n\tvar n = Math.floor((dt.getTime() - x.getTime()) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\", duration: 365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\", duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\", duration: 24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\", duration: 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration: 60 * 1000},\n\t\t{name: \"Seconds\", duration: 1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&\", < to \"<\", > to \">\", \" to \""\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&\").replace(/</mg,\"<\").replace(/>/mg,\">\").replace(/\\\"/mg,\""\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts like htmlEncode, but forgets the double quote for brevity\nexports.htmlTextEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&\").replace(/</mg,\"<\").replace(/>/mg,\">\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2), // Strip the & and the ;\n\t\tc;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\tc = parseInt(e.substr(2),16);\n\t\t} else {\n\t\t\tc = parseInt(e.substr(1),10);\n\t\t}\n\t\tif(isNaN(c)) {\n\t\t\treturn s;\n\t\t} else {\n\t\t\treturn converter(c);\n\t\t}\n\t} else {\n\t\tc = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s, rawUnicode) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\tvar regex = rawUnicode ? /[\\x00-\\x1f]/g : /[\\x00-\\x1f\\x80-\\uFFFF]/g;\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/'/g, \"\\\\'\") // single quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(regex, exports.escape); // non-ASCII characters\n};\n\n// Turns a string into a legal JSON string\n// Derived from peg.js, thanks to David Majda\nexports.jsonStringify = function(s, rawUnicode) {\n\t// See http://www.json.org/\n\tvar regex = rawUnicode ? /[\\x00-\\x1f]/g : /[\\x00-\\x1f\\x80-\\uFFFF]/g;\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/\\x08/g, '\\\\b') // backspace\n\t\t.replace(/\\x0c/g, '\\\\f') // formfeed\n\t\t.replace(/\\t/g, '\\\\t') // tab\n\t\t.replace(regex,function(s) {\n\t\t\treturn '\\\\u' + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);\n\t\t}); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /^(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,0);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10) || 0;\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\treturn base64utf8.base64.decode.call(base64utf8,string64);\n};\n\n/*\nEncode a string to base64\n*/\nexports.base64Encode = function(string64) {\n\treturn base64utf8.base64.encode.call(base64utf8,string64);\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\n\t\tm = r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type,_canonical_uri) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tif(_canonical_uri) {\n\t\tparts.push(_canonical_uri);\n\t} else {\n\t\tparts.push(\"data:\");\n\t\tparts.push(type);\n\t\tparts.push(isBase64 ? \";base64\" : \"\");\n\t\tparts.push(\",\");\n\t\tparts.push(isBase64 ? text : encodeURIComponent(text));\n\t}\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= ending.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\n\n/*\nReturn system information useful for debugging\n*/\nexports.getSystemInfo = function(str,ending,position) {\n\tvar results = [],\n\t\tsave = function(desc,value) {\n\t\t\tresults.push(desc + \": \" + value);\n\t\t};\n\tif($tw.browser) {\n\t\tsave(\"User Agent\",navigator.userAgent);\n\t\tsave(\"Online Status\",window.navigator.onLine);\n\t}\n\tif($tw.node) {\n\t\tsave(\"Node Version\",process.version);\n\t}\n\treturn results.join(\"\\n\");\n};\n\nexports.parseNumber = function(str) {\n\treturn parseFloat(str) || 0;\n};\n\nexports.parseInt = function(str) {\n\treturn parseInt(str,10) || 0;\n};\n\nexports.stringifyNumber = function(num) {\n\treturn num + \"\";\n};\n\nexports.makeCompareFunction = function(type,options) {\n\toptions = options || {};\n\t// set isCaseSensitive to true if not defined in options\n\tvar isCaseSensitive = (options.isCaseSensitive === false) ? false : true,\n\t\tgt = options.invert ? -1 : +1,\n\t\tlt = options.invert ? +1 : -1,\n\t\tcompare = function(a,b) {\n\t\t\tif(a > b) {\n\t\t\t\treturn gt ;\n\t\t\t} else if(a < b) {\n\t\t\t\treturn lt;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t},\n\t\ttypes = {\n\t\t\t\"number\": function(a,b) {\n\t\t\t\treturn compare($tw.utils.parseNumber(a),$tw.utils.parseNumber(b));\n\t\t\t},\n\t\t\t\"integer\": function(a,b) {\n\t\t\t\treturn compare($tw.utils.parseInt(a),$tw.utils.parseInt(b));\n\t\t\t},\n\t\t\t\"string\": function(a,b) {\n\t\t\t\tif(!isCaseSensitive) {\n\t\t\t\t\ta = a.toLowerCase();\n\t\t\t\t\tb = b.toLowerCase();\n\t\t\t\t}\n\t\t\t\treturn compare(\"\" + a,\"\" + b);\n\t\t\t},\n\t\t\t\"date\": function(a,b) {\n\t\t\t\tvar dateA = $tw.utils.parseDate(a),\n\t\t\t\t\tdateB = $tw.utils.parseDate(b);\n\t\t\t\tif(!isFinite(dateA)) {\n\t\t\t\t\tdateA = new Date(0);\n\t\t\t\t}\n\t\t\t\tif(!isFinite(dateB)) {\n\t\t\t\t\tdateB = new Date(0);\n\t\t\t\t}\n\t\t\t\treturn compare(dateA,dateB);\n\t\t\t},\n\t\t\t\"version\": function(a,b) {\n\t\t\t\treturn $tw.utils.compareVersions(a,b);\n\t\t\t},\n\t\t\t\"alphanumeric\": function(a,b) {\n\t\t\t\tif(!isCaseSensitive) {\n\t\t\t\t\ta = a.toLowerCase();\n\t\t\t\t\tb = b.toLowerCase();\n\t\t\t\t}\n\t\t\t\treturn options.invert ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \"base\"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \"base\"});\n\t\t\t}\n\t\t};\n\treturn (types[type] || types[options.defaultType] || types.number);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/widgets/action-confirm.js": {
"title": "$:/core/modules/widgets/action-confirm.js",
"text": "/*\\\n\ntitle: $:/core/modules/widgets/action-confirm.js\ntype: application/javascript\nmodule-type: widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ConfirmWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nConfirmWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nConfirmWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.parentDomNode = parent;\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nConfirmWidget.prototype.execute = function() {\n\tthis.message = this.getAttribute(\"$message\",$tw.language.getString(\"ConfirmAction\"));\n\tthis.prompt = (this.getAttribute(\"$prompt\",\"yes\") == \"no\" ? false : true);\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nConfirmWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$message\"] || changedAttributes[\"$prompt\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nConfirmWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar invokeActions = true,\n\t\thandled = true;\n\tif(this.prompt) {\n\t\tinvokeActions = confirm(this.message);\n\t}\n\tif(invokeActions) {\n\t\thandled = this.invokeActions(triggeringWidget,event);\n\t}\n\treturn handled;\n};\n\nConfirmWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nexports[\"action-confirm\"] = ConfirmWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-createtiddler.js": {
"title": "$:/core/modules/widgets/action-createtiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-createtiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to create a new tiddler with a unique name and specified fields.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw:false, require:false, exports:false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CreateTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCreateTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCreateTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Render children\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCreateTiddlerWidget.prototype.execute = function() {\n\tthis.actionBaseTitle = this.getAttribute(\"$basetitle\");\n\tthis.hasBase = !!this.actionBaseTitle;\n\tthis.actionSaveTitle = this.getAttribute(\"$savetitle\");\n\tthis.actionSaveDraftTitle = this.getAttribute(\"$savedrafttitle\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n\t//Following params are new since 5.1.22\n\tthis.actionTemplate = this.getAttribute(\"$template\");\n\tthis.useTemplate = !!this.actionTemplate;\n\tthis.actionOverwrite = this.getAttribute(\"$overwrite\",\"no\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nCreateTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nCreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar title = this.wiki.getTiddlerText(\"$:/language/DefaultNewTiddlerTitle\"), // Get the initial new-tiddler title\n\t\tfields = {},\n\t\tcreationFields,\n\t\tmodificationFields;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tfields[name] = attribute;\n\t\t}\n\t});\n\tif(this.actionTimestamp) {\n\t\tcreationFields = this.wiki.getCreationFields();\n\t\tmodificationFields = this.wiki.getModificationFields();\n\t}\n\tif(this.hasBase && this.actionOverwrite === \"no\") {\n\t\ttitle = this.wiki.generateNewTitle(this.actionBaseTitle);\n\t} else if (this.hasBase && this.actionOverwrite === \"yes\") {\n\t\ttitle = this.actionBaseTitle\n\t}\n\t// NO $basetitle BUT $template parameter is available\n\t// the title MUST be unique, otherwise the template would be overwritten\n\tif (!this.hasBase && this.useTemplate) {\n\t\ttitle = this.wiki.generateNewTitle(this.actionTemplate);\n\t} else if (!this.hasBase && !this.useTemplate) {\n\t\t// If no $basetitle and no $template then use initial title\n\t\ttitle = this.wiki.generateNewTitle(title);\n\t}\n\tvar templateTiddler = this.wiki.getTiddler(this.actionTemplate) || {};\n\tthis.wiki.addTiddler(new $tw.Tiddler(templateTiddler.fields,creationFields,fields,modificationFields,{title: title}));\n\tvar draftTitle = this.wiki.generateDraftTitle(title);\n\tif(this.actionSaveTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.actionSaveDraftTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveDraftTitle,draftTitle,this.getVariable(\"currentTiddler\"));\n\t}\n\tthis.setVariable(\"createTiddler-title\",title);\n\tthis.setVariable(\"createTiddler-draftTitle\",draftTitle);\n\treturn true; // Action was invoked\n};\n\nexports[\"action-createtiddler\"] = CreateTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletefield.js": {
"title": "$:/core/modules/widgets/action-deletefield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {},\n\t\thasChanged = false;\n\tif(this.actionField && tiddler) {\n\t\tremoveFields[this.actionField] = undefined;\n\t\tif(this.actionField in tiddler.fields) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t});\n\t\tif(hasChanged) {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,removeFields,this.wiki.getModificationFields()));\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletetiddler.js": {
"title": "$:/core/modules/widgets/action-deletetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-listops.js": {
"title": "$:/core/modules/widgets/action-listops.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar inputList = this.wiki.getTiddlerList(this.target,field,index),\n\t\t\tsubfilter = $tw.utils.stringifyList(inputList) + \" \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(subfilter,this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tiddler = this.wiki.getTiddler(this.target),\n\t\t\toldtags = tiddler ? (tiddler.fields.tags || []).slice(0) : [],\n\t\t\ttagfilter = $tw.utils.stringifyList(oldtags) + \" \" + this.filtertags,\n\t\t\tnewtags = this.wiki.filterTiddlers(tagfilter,this);\n\t\tif($tw.utils.stringifyList(oldtags.sort()) !== $tw.utils.stringifyList(newtags.sort())) {\n\t\t\tthis.wiki.setText(this.target,\"tags\",undefined,$tw.utils.stringifyList(newtags));\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-log.js": {
"title": "$:/core/modules/widgets/action-log.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-log.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to log debug messages\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LogWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLogWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLogWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\nLogWidget.prototype.execute = function(){\n\tthis.message = this.getAttribute(\"$$message\",\"debug\");\n\tthis.logAll = this.getAttribute(\"$$all\",\"no\") === \"yes\" ? true : false;\n\tthis.filter = this.getAttribute(\"$$filter\");\n}\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nLogWidget.prototype.refresh = function(changedTiddlers) {\n\tthis.refreshSelf();\n\treturn true;\n};\n\n/*\nInvoke the action associated with this widget\n*/\nLogWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tthis.log();\n\treturn true; // Action was invoked\n};\n\nLogWidget.prototype.log = function() {\n\tvar data = {},\n\t\tdataCount,\n\t\tallVars = {},\n\t\tfilteredVars;\n\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.substring(0,2) !== \"$$\") {\n\t\t\tdata[name] = attribute;\n\t\t}\n\t});\n\n\tfor(var v in this.variables) {\n\t\tallVars[v] = this.getVariable(v,{defaultValue:\"\"});\n\t}\n\tif(this.filter) {\n\t\tfilteredVars = this.wiki.compileFilter(this.filter).call(this.wiki,this.wiki.makeTiddlerIterator(allVars));\n\t\t$tw.utils.each(filteredVars,function(name) {\n\t\t\tdata[name] = allVars[name];\n\t\t});\n\t}\n\tdataCount = $tw.utils.count(data);\n\n\tconsole.group(this.message);\n\tif(dataCount > 0) {\n\t\t$tw.utils.logTable(data);\n\t}\n\tif(this.logAll || !dataCount) {\n\t\tconsole.groupCollapsed(\"All variables\");\n\t\t$tw.utils.logTable(allVars);\n\t\tconsole.groupEnd();\n\t}\n\tconsole.groupEnd();\n}\n\nexports[\"action-log\"] = LogWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-navigate.js": {
"title": "$:/core/modules/widgets/action-navigate.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tevent = event || {};\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-popup.js": {
"title": "$:/core/modules/widgets/action-popup.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-popup.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to trigger a popup.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ActionPopupWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nActionPopupWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nActionPopupWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nActionPopupWidget.prototype.execute = function() {\n\tthis.actionState = this.getAttribute(\"$state\");\n\tthis.actionCoords = this.getAttribute(\"$coords\");\n\tthis.floating = this.getAttribute(\"$floating\",\"no\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nActionPopupWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$state\"] || changedAttributes[\"$coords\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nActionPopupWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Trigger the popup\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(this.actionCoords || \"\");\n\tif(match) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: null,\n\t\t\tdomNodeRect: {\n\t\t\t\tleft: parseFloat(match[1]),\n\t\t\t\ttop: parseFloat(match[2]),\n\t\t\t\twidth: parseFloat(match[3]),\n\t\t\t\theight: parseFloat(match[4])\n\t\t\t},\n\t\t\ttitle: this.actionState,\n\t\t\twiki: this.wiki,\n\t\t\tfloating: this.floating\n\t\t});\n\t} else {\n\t\t$tw.popup.cancel(0);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-popup\"] = ActionPopupWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-sendmessage.js": {
"title": "$:/core/modules/widgets/action-sendmessage.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tevent: event\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-setfield.js": {
"title": "$:/core/modules/widgets/action-setfield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\") || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/browse.js": {
"title": "$:/core/modules/widgets/browse.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\tif(this.accept) {\n\t\tdomNode.setAttribute(\"accept\",this.accept);\n\t}\n\t// Nw.js supports \"webkitdirectory\" and \"nwdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\tif(this.nwdirectory) {\n\t\tdomNode.setAttribute(\"nwdirectory\",this.nwdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,{\n\t\t\t\tcallback: function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t},\n\t\t\t\tdeserializer: self.deserializer\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.deserializer = this.getAttribute(\"deserializer\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.accept = this.getAttribute(\"accept\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n\tthis.nwdirectory = this.getAttribute(\"nwdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/button.js": {
"title": "$:/core/modules/widgets/button.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this,\n\t\ttag = \"button\",\n\t\tdomNode;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tdomNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = (this.popup || this.popupTitle) && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif((this.set || this.setTitle) && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\tif(this.popup || this.popupTitle) {\n\t\tdomNode.setAttribute(\"aria-expanded\",isPoppedUp ? \"true\" : \"false\");\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tdomNode.setAttribute(\"disabled\",true);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(self,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup || self.popupTitle) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set || self.setTitle) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.actions) {\n\t\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\tself.invokeActionString(self.actions,self,event,{modifier: modifierKey});\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Make it draggable if required\n\tif(this.dragTiddler || this.dragFilter) {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.dragTiddler;},\n\t\t\tdragFilterFn: function() {return self.dragFilter;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n return this.setTitle ? (this.setField ? this.wiki.getTiddler(this.setTitle).getFieldString(this.setField) === this.setTo :\n\t\t(this.setIndex ? this.wiki.extractTiddlerDataItem(this.setTitle,this.setIndex) === this.setTo :\n\t\t\tthis.wiki.getTiddlerText(this.setTitle))) || this.defaultSetValue || this.getVariable(\"currentTiddler\") :\n\t\tthis.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.popupTitle ? this.wiki.getTiddler(this.popupTitle) : this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tevent: event\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\"), event: event});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\tif(this.popupTitle) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popupTitle,\n\t\t\twiki: this.wiki,\n\t\t\tnoStateReference: true\n\t\t});\n\t} else {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popup,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tif(this.setTitle) {\n\t\tthis.setField ? this.wiki.setText(this.setTitle,this.setField,undefined,this.setTo) :\n\t\t\t\t(this.setIndex ? this.wiki.setText(this.setTitle,undefined,this.setIndex,this.setTo) :\n\t\t\t\tthis.wiki.setText(this.setTitle,\"text\",undefined,this.setTo));\n\t} else {\n\t\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\tthis.dragTiddler = this.getAttribute(\"dragTiddler\");\n\tthis.dragFilter = this.getAttribute(\"dragFilter\");\n\tthis.setTitle = this.getAttribute(\"setTitle\");\n\tthis.setField = this.getAttribute(\"setField\");\n\tthis.setIndex = this.getAttribute(\"setIndex\");\n\tthis.popupTitle = this.getAttribute(\"popupTitle\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nButtonWidget.prototype.updateDomNodeClasses = function() {\n\tvar domNodeClasses = this.domNode.className.split(\" \"),\n\t\toldClasses = this.class.split(\" \"),\n\t\tnewClasses;\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tnewClasses = this.class.split(\" \");\n\t//Remove classes assigned from the old value of class attribute\n\t$tw.utils.each(oldClasses,function(oldClass){\n\t\tvar i = domNodeClasses.indexOf(oldClass);\n\t\tif(i !== -1) {\n\t\t\tdomNodeClasses.splice(i,1);\n\t\t}\n\t});\n\t//Add new classes from updated class attribute.\n\t$tw.utils.pushTop(domNodeClasses,newClasses);\n\tthis.domNode.className = domNodeClasses.join(\" \");\n}\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.updateDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/checkbox.js": {
"title": "$:/core/modules/widgets/checkbox.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value;\n\t\t\tif($tw.utils.hop(tiddler.fields,this.checkboxField)) {\n\t\t\t\tvalue = tiddler.fields[this.checkboxField] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.checkboxDefault || \"\";\n\t\t\t}\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxIndex) {\n\t\t\tvar value = this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || \"\");\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag),\n\t\tvalue = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\t// Set the index if specified\n\tif(this.checkboxIndex) {\n\t\tvar indexValue = this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);\n\t\tif(!tiddler || indexValue !== value) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tif(this.checkboxIndex) {\n\t\t\tthis.wiki.setText(this.checkboxTitle,\"\",this.checkboxIndex,value);\n\t\t} else {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t\t}\n\t}\n\t// Trigger actions\n\tif(this.checkboxActions) {\n\t\tthis.invokeActionString(this.checkboxActions,this,event);\n\t}\n\tif(this.checkboxCheckActions && checked) {\n\t\tthis.invokeActionString(this.checkboxCheckActions,this,event);\n\t}\n\tif(this.checkboxUncheckActions && !checked) {\n\t\tthis.invokeActionString(this.checkboxUncheckActions,this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxActions = this.getAttribute(\"actions\");\n\tthis.checkboxCheckActions = this.getAttribute(\"checkactions\");\n\tthis.checkboxUncheckActions = this.getAttribute(\"uncheckactions\");\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxIndex = this.getAttribute(\"index\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.disabled) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/codeblock.js": {
"title": "$:/core/modules/widgets/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/count.js": {
"title": "$:/core/modules/widgets/count.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = \"0\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/diff-text.js": {
"title": "$:/core/modules/widgets/diff-text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/diff-text.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display a diff between two texts\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget,\n\tdmp = require(\"$:/core/modules/utils/diff-match-patch/diff_match_patch.js\");\n\nvar DiffTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDiffTextWidget.prototype = new Widget();\n\nDiffTextWidget.prototype.invisibleCharacters = {\n\t\"\\n\": \"↩︎\\n\",\n\t\"\\r\": \"⇠\",\n\t\"\\t\": \"⇥\\t\"\n};\n\n/*\nRender this widget into the DOM\n*/\nDiffTextWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create the diff\n\tvar dmpObject = new dmp.diff_match_patch(),\n\t\tdiffs = dmpObject.diff_main(this.getAttribute(\"source\"),this.getAttribute(\"dest\"));\n\t// Apply required cleanup\n\tswitch(this.getAttribute(\"cleanup\",\"semantic\")) {\n\t\tcase \"none\":\n\t\t\t// No cleanup\n\t\t\tbreak;\n\t\tcase \"efficiency\":\n\t\t\tdmpObject.diff_cleanupEfficiency(diffs);\n\t\t\tbreak;\n\t\tdefault: // case \"semantic\"\n\t\t\tdmpObject.diff_cleanupSemantic(diffs);\n\t\t\tbreak;\n\t}\n\t// Create the elements\n\tvar domContainer = this.document.createElement(\"div\"), \n\t\tdomDiff = this.createDiffDom(diffs);\n\tparent.insertBefore(domContainer,nextSibling);\n\t// Set variables\n\tthis.setVariable(\"diff-count\",diffs.reduce(function(acc,diff) {\n\t\tif(diff[0] !== dmp.DIFF_EQUAL) {\n\t\t\tacc++;\n\t\t}\n\t\treturn acc;\n\t},0).toString());\n\t// Render child widgets\n\tthis.renderChildren(domContainer,null);\n\t// Render the diff\n\tdomContainer.appendChild(domDiff);\n\t// Save our container\n\tthis.domNodes.push(domContainer);\n};\n\n/*\nCreate DOM elements representing a list of diffs\n*/\nDiffTextWidget.prototype.createDiffDom = function(diffs) {\n\tvar self = this;\n\t// Create the element and assign the attributes\n\tvar domPre = this.document.createElement(\"pre\"),\n\t\tdomCode = this.document.createElement(\"code\");\n\t$tw.utils.each(diffs,function(diff) {\n\t\tvar tag = diff[0] === dmp.DIFF_INSERT ? \"ins\" : (diff[0] === dmp.DIFF_DELETE ? \"del\" : \"span\"),\n\t\t\tclassName = diff[0] === dmp.DIFF_INSERT ? \"tc-diff-insert\" : (diff[0] === dmp.DIFF_DELETE ? \"tc-diff-delete\" : \"tc-diff-equal\"),\n\t\t\tdom = self.document.createElement(tag),\n\t\t\ttext = diff[1],\n\t\t\tcurrPos = 0,\n\t\t\tre = /([\\x00-\\x1F])/mg,\n\t\t\tmatch = re.exec(text),\n\t\t\tspan,\n\t\t\tprintable;\n\t\tdom.className = className;\n\t\twhile(match) {\n\t\t\tif(currPos < match.index) {\n\t\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos,match.index)));\n\t\t\t}\n\t\t\tspan = self.document.createElement(\"span\");\n\t\t\tspan.className = \"tc-diff-invisible\";\n\t\t\tprintable = self.invisibleCharacters[match[0]] || (\"[0x\" + match[0].charCodeAt(0).toString(16) + \"]\");\n\t\t\tspan.appendChild(self.document.createTextNode(printable));\n\t\t\tdom.appendChild(span);\n\t\t\tcurrPos = match.index + match[0].length;\n\t\t\tmatch = re.exec(text);\n\t\t}\n\t\tif(currPos < text.length) {\n\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos)));\n\t\t}\n\t\tdomCode.appendChild(dom);\n\t});\n\tdomPre.appendChild(domCode);\n\treturn domPre;\n};\n\n/*\nCompute the internal state of the widget\n*/\nDiffTextWidget.prototype.execute = function() {\n\t// Make child widgets\n\tvar parseTreeNodes;\n\tif(this.parseTreeNode && this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: \"$:/language/Diffs/CountMessage\"}\n\t\t\t}\n\t\t}];\n\t}\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDiffTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports[\"diff-text\"] = DiffTextWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/draggable.js": {
"title": "$:/core/modules/widgets/draggable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/draggable.js\ntype: application/javascript\nmodule-type: widget\n\nDraggable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DraggableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDraggableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDraggableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Sanitise the specified tag\n\tvar tag = this.draggableTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"div\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [\"tc-draggable\"];\n\tif(this.draggableClasses) {\n\t\tclasses.push(this.draggableClasses);\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Add event handlers\n\t$tw.utils.makeDraggable({\n\t\tdomNode: domNode,\n\t\tdragTiddlerFn: function() {return self.getAttribute(\"tiddler\");},\n\t\tdragFilterFn: function() {return self.getAttribute(\"filter\");},\n\t\tstartActions: self.startActions,\n\t\tendActions: self.endActions,\n\t\twidget: this\n\t});\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nDraggableWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.draggableTag = this.getAttribute(\"tag\",\"div\");\n\tthis.draggableClasses = this.getAttribute(\"class\");\n\tthis.startActions = this.getAttribute(\"startactions\");\n\tthis.endActions = this.getAttribute(\"endactions\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDraggableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tag || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.draggable = DraggableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/droppable.js": {
"title": "$:/core/modules/widgets/droppable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/droppable.js\ntype: application/javascript\nmodule-type: widget\n\nDroppable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DroppableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDroppableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDroppableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this,\n\t\ttag = this.parseTreeNode.isBlock ? \"div\" : \"span\",\n\t\tdomNode;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.droppableTag && $tw.config.htmlUnsafeElements.indexOf(this.droppableTag) === -1) {\n\t\ttag = this.droppableTag;\n\t}\n\t// Create element and assign classes\n\tdomNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\tthis.assignDomNodeClasses();\n\t// Add event handlers\n\tif(this.droppableEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"}\n\t\t]);\n\t} else {\n\t\t$tw.utils.addClass(this.domNode,this.disabledClass);\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDroppableWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDroppableWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally. The hacky second condition is to resolve a problem with Firefox whereby there is an erroneous dragenter event if the node being dragged is within the dropzone\n\tif(this.currentlyEntered.length === 0 || (this.currentlyEntered.length === 1 && this.currentlyEntered[0] === $tw.dragInProgress)) {\n\t\tthis.currentlyEntered = [];\n\t\tif(this.domNodes[0]) {\n\t\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t\t}\n\t}\n};\n\nDroppableWidget.prototype.handleDragEnterEvent = function(event) {\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\t// Set the drop effect\n\tevent.dataTransfer.dropEffect = this.droppableEffect;\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this;\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\tvar dataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Try to import the various data types we understand\n\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\n\t\tfieldsArray.forEach(function(fields) {\n\t\t\tself.performActions(fields.title || fields.text,event);\n\t\t});\n\t});\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.performActions = function(title,event) {\n\tif(this.droppableActions) {\n\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\tthis.invokeActionString(this.droppableActions,this,event,{actionTiddler: title, modifier: modifierKey});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDroppableWidget.prototype.execute = function() {\n\tthis.droppableActions = this.getAttribute(\"actions\");\n\tthis.droppableEffect = this.getAttribute(\"effect\",\"copy\");\n\tthis.droppableTag = this.getAttribute(\"tag\");\n\tthis.droppableEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\tthis.disabledClass = this.getAttribute(\"disabledClass\",\"\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nDroppableWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-droppable\");\n\tthis.domNode.className = classes.join(\" \");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDroppableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tag || changedAttributes.enable || changedAttributes.disabledClass || changedAttributes.actions || changedAttributes.effect) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.assignDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.droppable = DroppableWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/dropzone.js": {
"title": "$:/core/modules/widgets/dropzone.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tthis.domNode = domNode;\n\tdomNode.className = this.dropzoneClass || \"tc-dropzone\";\n\t// Add event handlers\n\tif(this.dropzoneEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"},\n\t\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t\t]);\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\n// Handler for transient event listeners added when the dropzone has an active drag in progress\nDropZoneWidget.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\tif(this.currentlyEntered.length) {\n\t\t\tthis.resetState();\n\t\t}\n\t} else if(event.type === \"dragenter\") {\n\t\tif(event.target && event.target !== this.domNode && !$tw.utils.domContains(this.domNode,event.target)) {\n\t\t\tthis.resetState();\n\t\t}\n\t} else if(event.type === \"dragleave\") {\n\t\t// Check if drag left the window\n\t\tif(event.relatedTarget === null || (event.relatedTarget && event.relatedTarget.nodeName === \"HTML\")) {\n\t\t\tthis.resetState();\n\t\t}\n\t}\n};\n\n// Reset the state of the dropzone after a drag has ended\nDropZoneWidget.prototype.resetState = function() {\n\t$tw.utils.removeClass(this.domNode,\"tc-dragover\");\n\tthis.currentlyEntered = [];\n\tthis.document.body.removeEventListener(\"click\",this,true);\n\tthis.document.body.removeEventListener(\"dragenter\",this,true);\n\tthis.document.body.removeEventListener(\"dragleave\",this,true);\n\tthis.dragInProgress = false;\n};\n\nDropZoneWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\tif(!this.dragInProgress) {\n\t\tthis.dragInProgress = true;\n\t\t// If we're entering for the first time we need to apply highlighting\n\t\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n\t\tthis.document.body.addEventListener(\"click\",this,true);\n\t\tthis.document.body.addEventListener(\"dragenter\",this,true);\n\t\tthis.document.body.addEventListener(\"dragleave\",this,true);\n\t}\n};\n\nDropZoneWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally\n\tif(this.currentlyEntered.length === 0) {\n\t\tthis.resetState();\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent = function(event) {\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tif(this.filesOnly && !$tw.utils.dragEventContainsFiles(event)) {\n\t\treturn false;\n\t}\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\t// Check if this is a synthetic event, IE does not allow accessing dropEffect outside of original event handler\n\tif(event.isTrusted) {\n\t\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n\t}\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n};\n\nDropZoneWidget.prototype.handleDragEndEvent = function(event) {\n\tthis.resetState();\n};\n\nDropZoneWidget.prototype.filterByContentTypes = function(tiddlerFieldsArray) {\n\tvar filteredTypes,\n\t\tfiltered = [],\n\t\ttypes = [];\n\t$tw.utils.each(tiddlerFieldsArray,function(tiddlerFields) {\n\t\ttypes.push(tiddlerFields.type || \"\");\n\t});\n\tfilteredTypes = this.wiki.filterTiddlers(this.contentTypesFilter,this,this.wiki.makeTiddlerIterator(types));\n\t$tw.utils.each(tiddlerFieldsArray,function(tiddlerFields) {\n\t\tif(filteredTypes.indexOf(tiddlerFields.type) !== -1) {\n\t\t\tfiltered.push(tiddlerFields);\n\t\t}\n\t});\n\treturn filtered;\n};\n\nDropZoneWidget.prototype.readFileCallback = function(tiddlerFieldsArray) {\n\tif(this.contentTypesFilter) {\n\t\ttiddlerFieldsArray = this.filterByContentTypes(tiddlerFieldsArray);\n\t}\n\tif(tiddlerFieldsArray.length) {\n\t\tthis.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray), autoOpenOnImport: this.autoOpenOnImport, importTitle: this.importTitle});\n\t\tif(this.actions) {\n\t\t\tthis.invokeActionString(this.actions,this,event,{importTitle: this.importTitle});\n\t\t}\n\t}\n};\n\nDropZoneWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.readFileCallback(tiddlerFieldsArray);\n\t\t};\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\tthis.resetState();\n\t// Import any files in the drop\n\tvar numFiles = 0;\n\tif(dataTransfer.files) {\n\t\tnumFiles = this.wiki.readFiles(dataTransfer.files,{\n\t\t\tcallback: readFileCallback,\n\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t});\n\t}\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\tvar fallbackTitle = self.wiki.generateNewTitle(\"Untitled\");\n\t\t//Use the deserializer specified if any\n\t\tif(this.dropzoneDeserializer) {\n\t\t\tfor(var t= 0; t<dataTransfer.items.length; t++) {\n\t\t\t\tvar item = dataTransfer.items[t];\n\t\t\t\tif(item.kind === \"string\") {\n\t\t\t\t\titem.getAsString(function(str){\n\t\t\t\t\t\tvar tiddlerFields = self.wiki.deserializeTiddlers(null,str,{title: fallbackTitle},{deserializer:self.dropzoneDeserializer});\n\t\t\t\t\t\tif(tiddlerFields && tiddlerFields.length) {\n\t\t\t\t\t\t\treadFileCallback(tiddlerFields);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t$tw.utils.importDataTransfer(dataTransfer,fallbackTitle,readFileCallback);\n\t\t}\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handlePasteEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.readFileCallback(tiddlerFieldsArray);\n\t\t};\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1 && !event.target.isContentEditable) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),{\n\t\t\t\t\tcallback: readFileCallback,\n\t\t\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar tiddlerFields,\n\t\t\t\t\ttype = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\t// Use the deserializer specified if any\n\t\t\t\t\tif(self.dropzoneDeserializer) {\n\t\t\t\t\t\ttiddlerFields = self.wiki.deserializeTiddlers(null,str,{title: self.wiki.generateNewTitle(\"Untitled\")},{deserializer:self.dropzoneDeserializer});\n\t\t\t\t\t\tif(tiddlerFields && tiddlerFields.length) {\n\t\t\t\t\t\t\treadFileCallback(tiddlerFields);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttiddlerFields = {\n\t\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\t\ttype: type\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treadFileCallback([tiddlerFields]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\tthis.dropzoneClass = this.getAttribute(\"class\");\n\tthis.dropzoneDeserializer = this.getAttribute(\"deserializer\");\n\tthis.dropzoneEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\tthis.autoOpenOnImport = this.getAttribute(\"autoOpenOnImport\");\n\tthis.importTitle = this.getAttribute(\"importTitle\",IMPORT_TITLE);\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.contentTypesFilter = this.getAttribute(\"contentTypesFilter\");\n\tthis.filesOnly = this.getAttribute(\"filesOnly\",\"no\") === \"yes\";\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-binary.js": {
"title": "$:/core/modules/widgets/edit-binary.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Get our parameters\n\tvar editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tvar tiddler = this.wiki.getTiddler(editTitle);\n\tvar type = tiddler.fields.type;\n\tvar text = tiddler.fields.text;\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on draft tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!draft.title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!draft.title\"}\n\t\t},\n\t\tchildren: [{\n\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to internal data URI (no external)\n\tif(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets([element]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-bitmap.js": {
"title": "$:/core/modules/widgets/edit-bitmap.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370,\n\tDEFAULT_IMAGE_TYPE = \"image/png\";\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\tif(tiddler && tiddler.fields.type && tiddler.fields.text) {\n\t\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\n\t} else {\n\t\tcurrImage.width = DEFAULT_IMAGE_WIDTH;\n\t\tcurrImage.height = DEFAULT_IMAGE_HEIGHT;\n\t\tcurrImage.onerror();\n\t}\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\n/*\n** Rotate the canvas left by 90 degrees\n*/\nEditBitmapWidget.prototype.rotateCanvasLeft = function() {\n\t// Get the current size of the image\n\tvar origWidth = this.currCanvas.width,\n\t\torigHeight = this.currCanvas.height;\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\"),\n\t\tnewWidth = origHeight,\n\t\tnewHeight = origWidth;\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.save();\n\tctx.translate(newWidth / 2,newHeight / 2);\n\tctx.rotate(-Math.PI / 2);\n\tctx.drawImage(this.currCanvas,-origWidth / 2,-origHeight / 2);\n\tctx.restore();\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle) || new $tw.Tiddler({title: this.editTitle,type: DEFAULT_IMAGE_TYPE});\n\t// data URIs look like \"data:<type>;base64,<text>\"\n\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\n\t\tposColon = dataURL.indexOf(\":\"),\n\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\tposComma = dataURL.indexOf(\",\"),\n\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\ttext = dataURL.substring(posComma+1);\n\tvar update = {type: type, text: text};\n\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-shortcut.js": {
"title": "$:/core/modules/widgets/edit-shortcut.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n\t// Focus the input Node if focus === \"yes\" or focus === \"true\"\n\tif(this.shortcutFocus === \"yes\" || this.shortcutFocus === \"true\") {\n\t\tthis.focus();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n\tthis.shortcutFocus = this.getAttribute(\"focus\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nfocus the input node\n*/\nEditShortcutWidget.prototype.focus = function() {\n\tif(this.inputNode.focus && this.inputNode.select) {\n\t\tthis.inputNode.focus();\n\t\tthis.inputNode.select();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"] || changedAttributes.focus) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-text.js": {
"title": "$:/core/modules/widgets/edit-text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit.js": {
"title": "$:/core/modules/widgets/edit.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\tthis.editFocus = this.getAttribute(\"focus\",\"\");\n\tthis.editCancelPopups = this.getAttribute(\"cancelPopups\",\"\");\n\tthis.editInputActions = this.getAttribute(\"inputActions\");\n\tthis.editRefreshTitle = this.getAttribute(\"refreshTitle\");\n\tthis.editAutoComplete = this.getAttribute(\"autocomplete\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: this.parseTreeNode.attributes,\n\t\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/element.js": {
"title": "$:/core/modules/widgets/element.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\t// Neuter blacklisted elements\n\tthis.tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(this.tag) !== -1) {\n\t\tthis.tag = \"safe-\" + this.tag;\n\t}\n\t// Adjust headings by the current base level\n\tvar headingLevel = [\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"].indexOf(this.tag);\n\tif(headingLevel !== -1) {\n\t\tvar baseLevel = parseInt(this.getVariable(\"tv-adjust-heading-level\",\"0\"),10) || 0;\n\t\theadingLevel = Math.min(Math.max(headingLevel + 1 + baseLevel,1),6);\n\t\tthis.tag = \"h\" + headingLevel;\n\t}\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Invoke the th-rendering-element hook\n\tvar parseTreeNodes = $tw.hooks.invokeHook(\"th-rendering-element\",null,this);\n\tthis.isReplaced = !!parseTreeNodes;\n\tif(parseTreeNodes) {\n\t\t// Use the parse tree nodes provided by the hook\n\t\tthis.makeChildWidgets(parseTreeNodes);\n\t\tthis.renderChildren(this.parentDomNode,null);\n\t\treturn;\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n\t// Create the DOM node and render children\n\tvar domNode = this.document.createElementNS(this.namespace,this.tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\tif(!this.isReplaced) {\n\t\t\t// Update our attributes\n\t\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\n\t\t} else {\n\t\t\t// If we were replaced then completely refresh ourselves\n\t\t\treturn this.refreshSelf();\n\t\t}\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/encrypt.js": {
"title": "$:/core/modules/widgets/encrypt.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/entity.js": {
"title": "$:/core/modules/widgets/entity.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/eventcatcher.js": {
"title": "$:/core/modules/widgets/eventcatcher.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/eventcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nEvent handler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EventWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEventWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEventWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.elementTag && $tw.config.htmlUnsafeElements.indexOf(this.elementTag) === -1) {\n\t\ttag = this.elementTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\t// Assign classes\n\tthis.assignDomNodeClasses();\n\t// Add our event handler\n\t$tw.utils.each(this.types,function(type) {\n\t\tdomNode.addEventListener(type,function(event) {\n\t\t\tvar selector = self.getAttribute(\"selector\"),\n\t\t\t\tactions = self.getAttribute(\"actions-\"+type),\n\t\t\t\tstopPropagation = self.getAttribute(\"stopPropagation\",\"onaction\"),\n\t\t\t\tselectedNode = event.target,\n\t\t\t\tselectedNodeRect,\n\t\t\t\tcatcherNodeRect,\n\t\t\t\tvariables = {};\n\t\t\t// Firefox can fire dragover and dragenter events on text nodes instead of their parents\n\t\t\tif(selectedNode.nodeType === 3) {\n\t\t\t\tselectedNode = selectedNode.parentNode;\n\t\t\t}\n\t\t\tif(selector) {\n\t\t\t\t// Search ancestors for a node that matches the selector\n\t\t\t\twhile(!$tw.utils.domMatchesSelector(selectedNode,selector) && selectedNode !== domNode) {\n\t\t\t\t\tselectedNode = selectedNode.parentNode;\n\t\t\t\t}\n\t\t\t\t// If we found one, copy the attributes as variables, otherwise exit\n\t\t\t\tif($tw.utils.domMatchesSelector(selectedNode,selector)) {\n\t\t\t\t\t// Only set up variables if we have actions to invoke\n\t\t\t\t\tif(actions) {\n\t\t\t\t\t\t$tw.utils.each(selectedNode.attributes,function(attribute) {\n\t\t\t\t\t\t\tvariables[\"dom-\" + attribute.name] = attribute.value.toString();\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//Add a variable with a popup coordinate string for the selected node\n\t\t\t\t\t\tvariables[\"tv-popup-coords\"] = \"(\" + selectedNode.offsetLeft + \",\" + selectedNode.offsetTop +\",\" + selectedNode.offsetWidth + \",\" + selectedNode.offsetHeight + \")\";\n\n\t\t\t\t\t\t//Add variables for offset of selected node\n\t\t\t\t\t\tvariables[\"tv-selectednode-posx\"] = selectedNode.offsetLeft.toString();\n\t\t\t\t\t\tvariables[\"tv-selectednode-posy\"] = selectedNode.offsetTop.toString();\n\t\t\t\t\t\tvariables[\"tv-selectednode-width\"] = selectedNode.offsetWidth.toString();\n\t\t\t\t\t\tvariables[\"tv-selectednode-height\"] = selectedNode.offsetHeight.toString();\n\n\t\t\t\t\t\t//Add variables for event X and Y position relative to selected node\n\t\t\t\t\t\tselectedNodeRect = selectedNode.getBoundingClientRect();\n\t\t\t\t\t\tvariables[\"event-fromselected-posx\"] = (event.clientX - selectedNodeRect.left).toString();\n\t\t\t\t\t\tvariables[\"event-fromselected-posy\"] = (event.clientY - selectedNodeRect.top).toString();\n\n\t\t\t\t\t\t//Add variables for event X and Y position relative to event catcher node\n\t\t\t\t\t\tcatcherNodeRect = self.domNode.getBoundingClientRect();\n\t\t\t\t\t\tvariables[\"event-fromcatcher-posx\"] = (event.clientX - catcherNodeRect.left).toString();\n\t\t\t\t\t\tvariables[\"event-fromcatcher-posy\"] = (event.clientY - catcherNodeRect.top).toString();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Execute our actions with the variables\n\t\t\tif(actions) {\n\t\t\t\t// Add a variable for the modifier key\n\t\t\t\tvariables.modifier = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\t\t// Add a variable for the mouse button\n\t\t\t\tif(\"button\" in event) {\n\t\t\t\t\tif(event.button === 0) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"left\";\n\t\t\t\t\t} else if(event.button === 1) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"middle\";\n\t\t\t\t\t} else if(event.button === 2) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"right\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvariables[\"event-type\"] = event.type.toString();\n\t\t\t\tif(typeof event.detail === \"object\" && !!event.detail) {\n\t\t\t\t\t$tw.utils.each(event.detail,function(detailValue,detail) {\n\t\t\t\t\t\tvariables[\"event-detail-\" + detail] = detailValue.toString();\n\t\t\t\t\t});\n\t\t\t\t} else if(!!event.detail) {\n\t\t\t\t\tvariables[\"event-detail\"] = event.detail.toString();\n\t\t\t\t}\n\t\t\t\tself.invokeActionString(actions,self,event,variables);\n\t\t\t}\n\t\t\tif((actions && stopPropagation === \"onaction\") || stopPropagation === \"always\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},false);\n\t});\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEventWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes that require a refresh on change\n\tthis.types = this.getAttribute(\"events\",\"\").split(\" \");\n\tthis.elementTag = this.getAttribute(\"tag\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nEventWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-eventcatcher\");\n\tthis.domNode.className = classes.join(\" \");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEventWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"events\"] || changedAttributes[\"tag\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.assignDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.eventcatcher = EventWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fieldmangler.js": {
"title": "$:/core/modules/widgets/fieldmangler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn false;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn false;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn false;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));\n\t}\n\treturn false;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fields.js": {
"title": "$:/core/modules/widgets/fields.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.sort = this.getAttribute(\"sort\",\"yes\") === \"yes\";\n\tthis.sortReverse = this.getAttribute(\"sortReverse\",\"no\") === \"yes\";\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.include = this.getAttribute(\"include\",null);\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\n\t// Get the inclusion and exclusion list\n\tvar excludeArr = (this.exclude) ? this.exclude.split(\" \") : [\"text\"];\n\t// Include takes precedence\n\tvar includeArr = (this.include) ? this.include.split(\" \") : null;\n\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tif (includeArr) { // Include takes precedence\n\t\t\tfor(var i=0; i<includeArr.length; i++) {\n\t\t\t\tif(tiddler.fields[includeArr[i]]) {\n\t\t\t\t\tfields.push(includeArr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\tif(excludeArr.indexOf(fieldName) === -1) {\n\t\t\t\t\tfields.push(fieldName);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.sort) fields.sort();\n\t\tif (this.sortReverse) fields.reverse();\n\t\tfor(var f=0, fmax=fields.length; f<fmax; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tvar row = this.template,\n\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\tif(reMatch) {\n\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t}\n\t\t\t}\n\t\t\trow = $tw.utils.replaceString(row,\"$name$\",fieldName);\n\t\t\trow = $tw.utils.replaceString(row,\"$value$\",value);\n\t\t\trow = $tw.utils.replaceString(row,\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\ttext.push(row);\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif( changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude ||\n\t\tchangedAttributes.include || changedAttributes.sort || changedAttributes.sortReverse ||\n\t\tchangedTiddlers[this.tiddlerTitle] || changedAttributes.stripTitlePrefix) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/image.js": {
"title": "$:/core/modules/widgets/image.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/importvariables.js": {
"title": "$:/core/modules/widgets/importvariables.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar widgetPointer = this;\n\t// Got to flush all the accumulated variables\n\tthis.variables = new this.variablesConstructor();\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = widgetPointer.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\tvar node = {\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params,\n\t\t\t\t\tisMacroDefinition: parseTreeNode.isMacroDefinition\n\t\t\t\t};\n\t\t\t\tif (parseTreeNode.isMacroDefinition) {\n\t\t\t\t\t// Macro definitions can be folded into\n\t\t\t\t\t// current widget instead of adding\n\t\t\t\t\t// another link to the chain.\n\t\t\t\t\tvar widget = widgetPointer.makeChildWidget(node);\n\t\t\t\t\twidget.computeAttributes();\n\t\t\t\t\twidget.execute();\n\t\t\t\t\t// We SHALLOW copy over all variables\n\t\t\t\t\t// in widget. We can't use\n\t\t\t\t\t// $tw.utils.assign, because that copies\n\t\t\t\t\t// up the prototype chain, which we\n\t\t\t\t\t// don't want.\n\t\t\t\t\t$tw.utils.each(Object.keys(widget.variables), function(key) {\n\t\t\t\t\t\twidgetPointer.variables[key] = widget.variables[key];\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\twidgetPointer.children = [widgetPointer.makeChildWidget(node)];\n\t\t\t\t\t// No more regenerating children for\n\t\t\t\t\t// this widget. If it needs to refresh,\n\t\t\t\t\t// it'll do so along with the the whole\n\t\t\t\t\t// importvariable tree.\n\t\t\t\t\tif (widgetPointer != this) {\n\t\t\t\t\t\twidgetPointer.makeChildWidgets = function(){};\n\t\t\t\t\t}\n\t\t\t\t\twidgetPointer = widgetPointer.children[0];\n\t\t\t\t}\n\t\t\t\tparseTreeNode = parseTreeNode.children && parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\n\tif (widgetPointer != this) {\n\t\twidgetPointer.parseTreeNode.children = this.parseTreeNode.children;\n\t} else {\n\t\twidgetPointer.makeChildWidgets();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/keyboard.js": {
"title": "$:/core/modules/widgets/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.tag && $tw.config.htmlUnsafeElements.indexOf(this.tag) === -1) {\n\t\ttag = this.tag;\n\t}\n\t// Create element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.handleChangeEvent = function(event) {\n\tif($tw.keyboardManager.checkKeyDescriptors(event,this.keyInfoArray)) {\n\t\tvar handled = this.invokeActions(this,event);\n\t\tif(this.actions) {\n\t\t\tvar variables = {\n\t\t\t\t\t\"event-key\": event.key,\n\t\t\t\t\t\"event-code\": event.code,\n\t\t\t\t\t\"modifier\": $tw.keyboardManager.getEventModifierKeyDescriptor(event)\n\t\t\t\t};\n\t\t\tthis.invokeActionString(this.actions,this,event,variables);\n\t\t}\n\t\tthis.dispatchMessage(event);\n\t\tif(handled || this.actions || this.message) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\",\"\");\n\tthis.message = this.getAttribute(\"message\",\"\");\n\tthis.param = this.getAttribute(\"param\",\"\");\n\tthis.key = this.getAttribute(\"key\",\"\");\n\tthis.tag = this.getAttribute(\"tag\",\"\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tif(this.key.substr(0,2) === \"((\" && this.key.substr(-2,2) === \"))\") {\n\t\tthis.shortcutTiddlers = [];\n\t\tvar name = this.key.substring(2,this.key.length -2);\n\t\t$tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) {\n\t\t\tself.shortcutTiddlers.push(\"$:/config/\" + platformDescriptor + \"/\" + name);\n\t\t});\n\t}\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\t// Update the keyInfoArray if one of its shortcut-config-tiddlers has changed\n\tif(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers)) {\n\t\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/link.js": {
"title": "$:/core/modules/widgets/link.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"}),\n\t\tdomNode = this.document.createElementNS(namespace,tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.overrideClasses === undefined) {\n\t\tclasses.push(\"tc-tiddlylink\");\n\t\tif(this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t\t}\n\t\tif(this.isMissing && !this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t\t} else {\n\t\t\tif(!this.isMissing) {\n\t\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t\t}\n\t\t}\n\t\tif(this.linkClasses) {\n\t\t\tclasses.push(this.linkClasses);\n\t\t}\n\t} else if(this.overrideClasses !== \"\") {\n\t\tclasses.push(this.overrideClasses)\n\t}\n\tif(classes.length > 0) {\n\t\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t}\n\t// Set an href\n\tvar wikilinkTransformFilter = this.getVariable(\"tv-filter-export-link\"),\n\t\twikiLinkText;\n\tif(wikilinkTransformFilter) {\n\t\t// Use the filter to construct the href\n\t\twikiLinkText = this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {\n\t\t\titerator(self.wiki.getTiddler(self.to),self.to)\n\t\t})[0];\n\t} else {\n\t\t// Expand the tv-wikilink-template variable to construct the href\n\t\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\";\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkTemplate,\"$uri_encoded$\",encodeURIComponent(this.to));\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkText,\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\t}\n\t// Override with the value of tv-get-export-link if defined\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tvar namespaceHref = (namespace === \"http://www.w3.org/2000/svg\") ? \"http://www.w3.org/1999/xlink\" : undefined;\n\t\tdomNode.setAttributeNS(namespaceHref,\"href\",wikiLinkText);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\t// Make the link draggable if required\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.to;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tmetaKey: event.metaKey,\n\t\tctrlKey: event.ctrlKey,\n\t\taltKey: event.altKey,\n\t\tshiftKey: event.shiftKey,\n\t\tevent: event\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.overrideClasses = this.getAttribute(\"overrideClass\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\tthis.hideMissingLinks = (this.getVariable(\"tv-show-missing-links\") || \"yes\") === \"no\";\n\t// Make the child widgets\n\tvar templateTree;\n\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\ttemplateTree = this.parseTreeNode.children;\n\t} else {\n\t\t// Default template is a link to the title\n\t\ttemplateTree = [{type: \"text\", text: this.to}];\n\t}\n\tthis.makeChildWidgets(templateTree);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/linkcatcher.js": {
"title": "$:/core/modules/widgets/linkcatcher.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\tthis.catchActions = this.getAttribute(\"actions\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n\t// When executing actions we avoid trapping navigate events, so that we don't trigger ourselves recursively\n\tthis.executingActions = false;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(!this.executingActions) {\n\t\t// Execute the actions\n\t\tif(this.catchTo) {\n\t\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t\t}\n\t\tif(this.catchMessage && this.parentWidget) {\n\t\t\tthis.parentWidget.dispatchEvent({\n\t\t\t\ttype: this.catchMessage,\n\t\t\t\tparam: event.navigateTo,\n\t\t\t\tnavigateTo: event.navigateTo\n\t\t\t});\n\t\t}\n\t\tif(this.catchSet) {\n\t\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t\t}\n\t\tif(this.catchActions) {\n\t\t\tthis.executingActions = true;\n\t\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\tthis.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo, modifier: modifierKey});\n\t\t\tthis.executingActions = false;\n\t\t}\n\t} else {\n\t\t// This is a navigate event generated by the actions of this linkcatcher, so we don't trap it again, but just pass it to the parent\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: \"tm-navigate\",\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/list.js": {
"title": "$:/core/modules/widgets/list.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(this.storyViewName && !StoryView) {\n\t\tStoryView = this.storyViews[\"classic\"];\n\t}\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.counterName = this.getAttribute(\"counter\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title,index));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar parser,\n\t\temptyMessage = this.getAttribute(\"emptyMessage\",\"\");\n\t// this.wiki.parseText() calls \n\t// new Parser(..), which should only be done, if needed, because it's heavy!\n\tif (emptyMessage === \"\") {\n\t\treturn [];\n\t}\n\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title,index) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\tvar parseTreeNode = {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n\tif(this.counterName) {\n\t\tparseTreeNode.counter = (index + 1).toString();\n\t\tparseTreeNode.counterName = this.counterName;\n\t\tparseTreeNode.isFirst = index === 0;\n\t\tparseTreeNode.isLast = index === this.list.length - 1;\n\t}\n\treturn parseTreeNode;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.variable || changedAttributes.counter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// If we are providing an counter variable then we must refresh the items, otherwise we can rearrange them\n\t\tvar hasRefreshed = false,t;\n\t\tif(this.counterName) {\n\t\t\t// Cycle through the list and remove and re-insert the first item that has changed, and all the remaining items\n\t\t\tfor(t=0; t<this.list.length; t++) {\n\t\t\t\tif(hasRefreshed || !this.children[t] || this.children[t].parseTreeNode.itemTitle !== this.list[t]) {\n\t\t\t\t\tif(this.children[t]) {\n\t\t\t\t\t\tthis.removeListItem(t);\n\t\t\t\t\t}\n\t\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t} else {\n\t\t\t\t\t// Refresh the item we're reusing\n\t\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Cycle through the list, inserting and removing list items as needed\n\t\t\tfor(t=0; t<this.list.length; t++) {\n\t\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\t\tif(index === undefined) {\n\t\t\t\t\t// The list item must be inserted\n\t\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t} else {\n\t\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\t\thasRefreshed = true;\n\t\t\t\t\t}\n\t\t\t\t\t// Refresh the item we're reusing\n\t\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title,index));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\tif(this.parseTreeNode.counterName) {\n\t\tthis.setVariable(this.parseTreeNode.counterName,this.parseTreeNode.counter);\n\t\tthis.setVariable(this.parseTreeNode.counterName + \"-first\",this.parseTreeNode.isFirst ? \"yes\" : \"no\");\n\t\tthis.setVariable(this.parseTreeNode.counterName + \"-last\",this.parseTreeNode.isLast ? \"yes\" : \"no\");\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/log.js": {
"title": "$:/core/modules/widgets/log.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/log.js\ntype: application/javascript\nmodule-type: widget-subclass\n\nWidget to log debug messages\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.baseClass = \"action-log\";\n\nexports.name = \"log\";\n\nexports.constructor = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n}\n\nexports.prototype = {};\n\nexports.prototype.render = function(event) {\n\tObject.getPrototypeOf(Object.getPrototypeOf(this)).render.call(this,event);\n\tObject.getPrototypeOf(Object.getPrototypeOf(this)).log.call(this);\n}\n\n})();",
"type": "application/javascript",
"module-type": "widget-subclass"
},
"$:/core/modules/widgets/macrocall.js": {
"title": "$:/core/modules/widgets/macrocall.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\n\t\t}\n\t});\n\t// Get the macro value\n\tvar macroName = this.parseTreeNode.name || this.getAttribute(\"$name\"),\n\t\tvariableInfo = this.getVariableInfo(macroName,{params: params}),\n\t\ttext = variableInfo.text,\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\t// Check if we've already cached parsing this macro\n\t\tvar mode = this.parseTreeNode.isBlock ? \"blockParser\" : \"inlineParser\",\n\t\t\tparser;\n\t\tif(variableInfo.srcVariable && variableInfo.srcVariable[mode]) {\n\t\t\tparser = variableInfo.srcVariable[mode];\n\t\t} else {\n\t\t\tparser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\t\tif(variableInfo.isCacheable && variableInfo.srcVariable) {\n\t\t\t\tvariableInfo.srcVariable[mode] = parser;\n\t\t\t}\n\t\t}\n\t\tvar parseTreeNodes = parser ? parser.tree : [];\n\t\t// Wrap the parse tree in a vars widget assigning the parameters to variables named \"__paramname__\"\n\t\tvar attributes = {};\n\t\t$tw.utils.each(variableInfo.params,function(param) {\n\t\t\tvar name = \"__\" + param.name + \"__\";\n\t\t\tattributes[name] = {\n\t\t\t\tname: name,\n\t\t\t\ttype: \"string\",\n\t\t\t\tvalue: param.value\n\t\t\t};\n\t\t});\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"vars\",\n\t\t\tattributes: attributes,\n\t\t\tchildren: parseTreeNodes\n\t\t}];\n\t} else if(this.renderOutput === \"text/raw\") {\n\t\tparseTreeNodes = [{type: \"text\", text: text}];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/messagecatcher.js": {
"title": "$:/core/modules/widgets/messagecatcher.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/messagecatcher.js\ntype: application/javascript\nmodule-type: widget\n\nMessage catcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MessageCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMessageCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMessageCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Add our message handler\n\tif(this.messageType) {\n\t\tthis.addEventListeners([\n\t\t\t{type: this.messageType, handler: \"handleEvent\"}\n\t\t]);\n\t}\n\t// Render children\n\tthis.renderChildren(parent,null);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMessageCatcherWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes that require a refresh on change\n\tthis.messageType = this.getAttribute(\"type\");\n\tthis.messageActions = this.getAttribute(\"actions\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nHandle an event\n*/\nMessageCatcherWidget.prototype.handleEvent = function(event) {\n\tif(this.messageActions) {\n\t\t// Collect all the event properties into variables\n\t\tvar collectProps = function(obj,prefix) {\n\t\t\t\tprefix = prefix || \"\";\n\t\t\t\tvar props = {};\n\t\t\t\t$tw.utils.each(obj,function(value,name) {\n\t\t\t\t\tif([\"string\",\"boolean\",\"number\"].indexOf(typeof value) !== -1) {\n\t\t\t\t\t\tprops[prefix + name] = value.toString();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn props;\n\t\t\t};\n\t\tvar variables = $tw.utils.extend(\n\t\t\t{},\n\t\t\tcollectProps(event.paramObject,\"event-paramObject-\"),\n\t\t\tcollectProps(event,\"event-\"),\n\t\t\t{\n\t\t\t\tmodifier: $tw.keyboardManager.getEventModifierKeyDescriptor(event)\n\t\t\t});\n\t\tthis.invokeActionString(this.messageActions,this,event,variables);\n\t}\n\treturn false;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMessageCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"type\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.messagecatcher = MessageCatcherWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/navigator.js": {
"title": "$:/core/modules/widgets/navigator.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\tthis.setVariable(\"tv-story-list\",this.storyTitle);\n\tthis.setVariable(\"tv-history-list\",this.historyTitle);\n\tthis.story = new $tw.Story({\n\t\twiki: this.wiki,\n\t\tstoryTitle: this.storyTitle,\n\t\thistoryTitle: this.historyTitle\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tif(this.storyTitle) {\n\t\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t\t{title: this.storyTitle},\n\t\t\tstoryTiddler,\n\t\t\t{list: storyList}\n\t\t));\n\t}\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tif(storyList) {\n\t\tvar p = storyList.indexOf(title);\n\t\twhile(p !== -1) {\n\t\t\tstoryList.splice(p,1);\n\t\t\tp = storyList.indexOf(title);\n\t\t}\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tif(storyList) {\n\t\tvar pos = storyList.indexOf(oldTitle);\n\t\tif(pos !== -1) {\n\t\t\tstoryList[pos] = newTitle;\n\t\t\tdo {\n\t\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\t\tif(pos !== -1) {\n\t\t\t\t\tstoryList.splice(pos,1);\n\t\t\t\t}\n\t\t\t} while(pos !== -1);\n\t\t} else {\n\t\t\tstoryList.splice(0,0,newTitle);\n\t\t}\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tif(this.storyTitle) {\n\t\tthis.story.addToStory(title,fromTitle,{\n\t\t\topenLinkFromInsideRiver: this.getAttribute(\"openLinkFromInsideRiver\",\"top\"),\n\t\t\topenLinkFromOutsideRiver: this.getAttribute(\"openLinkFromOutsideRiver\",\"top\")\n\t\t});\n\t}\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.story.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-navigating\",event);\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar editTiddler = $tw.hooks.invokeHook(\"th-editing-tiddler\",event);\n\tif(!editTiddler) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\toriginalTiddler = originalTitle ? this.wiki.getTiddler(originalTitle) : undefined,\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tif(originalTiddler) {\n\t\t\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",originalTiddler);\n\t\t}\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Invoke the hook function and delete this tiddler\n\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",tiddler);\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\t\ttext: \"\",\n\t\t\t},\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\treturn this.wiki.generateDraftTitle(title);\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler,tiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// If enabled, relink references to renamed tiddler\n\t\t\t\tvar shouldRelink = this.getAttribute(\"relinkOnRename\",\"no\").toLowerCase().trim() === \"yes\";\n\t\t\t\tif(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) {\n\t\t\t\t\tthis.wiki.relinkTiddler(draftOf,draftTitle);\n\t\t\t\t}\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// #2381 always remove new title & old\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\tthis.removeTitleFromStory(storyList,draftOf);\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-cancelling-tiddler\", event);\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-new-tiddler\", event);\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Make a copy of the additional fields excluding any blank ones\n\tvar filteredAdditionalFields = $tw.utils.extend({},additionalFields);\n\tObject.keys(filteredAdditionalFields).forEach(function(fieldName) {\n\t\tif(filteredAdditionalFields[fieldName] === \"\") {\n\t\t\tdelete filteredAdditionalFields[fieldName];\n\t\t}\n\t});\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags);\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\texistingTiddler,\n\t\tfilteredAdditionalFields,\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList && storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tif(slot === -1) {\n\t\t\tslot = this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\" ? storyList.length - 1 : slot;\n\t\t}\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList && storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTitle = event.importTitle ? event.importTitle : IMPORT_TITLE,\n\t\timportTiddler = this.wiki.getTiddler(importTitle),\n\t\timportData = this.wiki.getTiddlerData(importTitle,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: importTitle,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\ttiddlerFields.title = $tw.utils.trim(tiddlerFields.title);\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t// Deselect any disabled, but _not_ suppressed tiddlers\n\tvar systemMessage = $tw.language.getString(\"Import/Upgrader/Tiddler/Unselected\");\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t\tif (message.indexOf(systemMessage) !== -1) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t}\n\t});\n\t// Deselect suppressed tiddlers ... they have been removed and can't be selected anymore\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t\tnewFields[\"suppressed-\" + title] = \"yes\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tvar autoOpenOnImport = event.autoOpenOnImport ? event.autoOpenOnImport : this.getVariable(\"tv-auto-open-on-import\"); \n\tif(autoOpenOnImport !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList && storyList.indexOf(importTitle) === -1) {\n\t\t\tstoryList.unshift(importTitle);\n\t\t}\n\t\t// And to history\n\t\thistory.push(importTitle);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\n\t}\n\treturn false;\n};\n\n//\nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData,\n\t\timportReport = [];\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t// If you need to modify the import tiddler payload then consider th-importing-tiddler instead\n\timportTiddler = $tw.hooks.invokeHook(\"th-before-importing\",importTiddler);\n\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tif($tw.utils.hop(importTiddler.fields,[\"rename-\" + title])) {\n\t\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields,{title : importTiddler.fields[\"rename-\" + title]});\n\t\t\t} else {\n\t\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\t\t\t}\n\t\t\t// th-importing-tiddler doesn't allow user interaction by default\n\t\t\t// If you want to use the default UI then use: $:/core/modules/upgraders/ instead\n\t\t\ttiddler = $tw.hooks.invokeHook(\"th-importing-tiddler\",tiddler);\n\t\t\t// Add the tiddlers to the store\n\t\t\tself.wiki.addTiddler(tiddler);\n\t\t\timportReport.push(\"# [[\" + tiddler.fields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix || \"$:/state/folded/\";\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar options = {},\n\t\tparamObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\toptions.dontRenameInTags = (paramObject.renameInTags === \"false\" || paramObject.renameInTags === \"no\") ? true : false;\n\toptions.dontRenameInLists = (paramObject.renameInLists === \"false\" || paramObject.renameInLists === \"no\") ? true : false;\n\tthis.wiki.renameTiddler(from,to,options);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/password.js": {
"title": "$:/core/modules/widgets/password.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/qualify.js": {
"title": "$:/core/modules/widgets/qualify.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/qualify.js\ntype: application/javascript\nmodule-type: widget\n\nQualify text to a variable \n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar QualifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nQualifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nQualifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nQualifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.qualifyName = this.getAttribute(\"name\");\n\tthis.qualifyTitle = this.getAttribute(\"title\");\n\t// Set context variable\n\tif(this.qualifyName) {\n\t\tthis.setVariable(this.qualifyName,this.qualifyTitle + \"-\" + this.getStateQualifier());\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nQualifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.title) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.qualify = QualifyWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/radio.js": {
"title": "$:/core/modules/widgets/radio.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nSet a field or index at a given tiddler via radio buttons\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tvar isChecked = this.getValue() === this.radioValue;\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",\n\t\t\"tc-radio \" + this.radioClass + (isChecked ? \" tc-radio-selected\" : \"\")\n\t);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(isChecked) {\n\t\tthis.inputDomNode.checked = true;\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar value,\n\t\ttiddler = this.wiki.getTiddler(this.radioTitle);\n\tif(tiddler) {\n\t\tif(this.radioIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.radioTitle,this.radioIndex);\n\t\t} else {\n\t\t\tvalue = tiddler.getFieldString(this.radioField);\n\t\t}\n\t} else {\n\t\tvalue = this.radioDefault;\n\t}\n\treturn value;\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioIndex) {\n\t\tthis.wiki.setText(this.radioTitle,\"\",this.radioIndex,this.radioValue);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n\t// Trigger actions\n\tif(this.radioActions) {\n\t\tthis.invokeActionString(this.radioActions,this,event,{\"actionValue\": this.radioValue});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioIndex = this.getAttribute(\"index\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\tthis.radioDefault = this.getAttribute(\"default\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\tthis.radioActions = this.getAttribute(\"actions\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(($tw.utils.count(changedAttributes) > 0)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.radioTitle]) {\n\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\treturn this.refreshChildren(changedTiddlers);\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/range.js": {
"title": "$:/core/modules/widgets/range.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/range.js\ntype: application/javascript\nmodule-type: widget\n\nRange widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RangeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRangeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRangeWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"range\");\n\tthis.inputDomNode.setAttribute(\"class\",this.elementClass);\n\tif(this.minValue){\n\t\tthis.inputDomNode.setAttribute(\"min\", this.minValue);\n\t}\n\tif(this.maxValue){\n\t\tthis.inputDomNode.setAttribute(\"max\", this.maxValue);\n\t}\n\tif(this.increment){\n\t\tthis.inputDomNode.setAttribute(\"step\", this.increment);\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.inputDomNode.value = this.getValue();\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name:\"mousedown\", handlerObject:this, handlerMethod:\"handleMouseDownEvent\"},\n\t\t{name:\"mouseup\", handlerObject:this, handlerMethod:\"handleMouseUpEvent\"},\n\t\t{name:\"change\", handlerObject:this, handlerMethod:\"handleChangeEvent\"},\n\t\t{name:\"input\", handlerObject:this, handlerMethod:\"handleInputEvent\"},\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.inputDomNode,nextSibling);\n\tthis.domNodes.push(this.inputDomNode);\n};\n\nRangeWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle),\n\t\tfieldName = this.tiddlerField,\n\t\tvalue = this.defaultValue;\n\tif(tiddler) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(tiddler,this.tiddlerIndex,this.defaultValue);\n\t\t} else {\n\t\t\tif($tw.utils.hop(tiddler.fields,fieldName)) {\n\t\t\t\tvalue = tiddler.fields[fieldName] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.defaultValue;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nRangeWidget.prototype.getActionVariables = function(options) {\n\toptions = options || {};\n\tvar hasChanged = (this.startValue !== this.inputDomNode.value) ? \"yes\" : \"no\";\n\t// Trigger actions. Use variables = {key:value, key:value ...}\n\t// the \"value\" is needed.\n\treturn $tw.utils.extend({\"actionValue\": this.inputDomNode.value, \"actionValueHasChanged\": hasChanged}, options);\n}\n\n// actionsStart\nRangeWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.mouseDown = true; // TODO remove once IE is gone.\n\tthis.startValue = this.inputDomNode.value; // TODO remove this line once IE is gone!\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsMouseDown) {\n\t\tvar variables = this.getActionVariables() // TODO this line will go into the function call below.\n\t\tthis.invokeActionString(this.actionsMouseDown,this,event,variables);\n\t}\n}\n\n// actionsStop\nRangeWidget.prototype.handleMouseUpEvent = function(event) {\n\tthis.mouseDown = false; // TODO remove once IE is gone.\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsMouseUp) {\n\t\tvar variables = this.getActionVariables()\n\t\tthis.invokeActionString(this.actionsMouseUp,this,event,variables);\n\t}\n\t// TODO remove the following if() once IE is gone!\n\tif ($tw.browser.isIE) {\n\t\tif (this.startValue !== this.inputDomNode.value) {\n\t\t\tthis.handleChangeEvent(event);\n\t\t\tthis.startValue = this.inputDomNode.value;\n\t\t}\n\t}\n}\n\nRangeWidget.prototype.handleChangeEvent = function(event) {\n\tif (this.mouseDown) { // TODO refactor this function once IE is gone.\n\t\tthis.handleInputEvent(event);\n\t}\n};\n\nRangeWidget.prototype.handleInputEvent = function(event) {\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsInput) {\n\t\t// \"tiddler\" parameter may be missing. See .execute() below\n\t\tvar variables = this.getActionVariables({\"actionValueHasChanged\": \"yes\"}) // TODO this line will go into the function call below.\n\t\tthis.invokeActionString(this.actionsInput,this,event,variables);\n\t}\n};\n\nRangeWidget.prototype.handleEvent = function(event) {\n\tif(this.getValue() !== this.inputDomNode.value) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,\"\",this.tiddlerIndex,this.inputDomNode.value);\n\t\t} else {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,this.tiddlerField,null,this.inputDomNode.value);\n\t\t}\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRangeWidget.prototype.execute = function() {\n\t// TODO remove the next 1 lines once IE is gone!\n\tthis.mouseUp = true; // Needed for IE10\n\t// Get the parameters from the attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.tiddlerField = this.getAttribute(\"field\",\"text\");\n\tthis.tiddlerIndex = this.getAttribute(\"index\");\n\tthis.minValue = this.getAttribute(\"min\");\n\tthis.maxValue = this.getAttribute(\"max\");\n\tthis.increment = this.getAttribute(\"increment\");\n\tthis.defaultValue = this.getAttribute(\"default\",\"\");\n\tthis.elementClass = this.getAttribute(\"class\",\"\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Actions since 5.1.23\n\t// Next 2 only fire once!\n\tthis.actionsMouseDown = this.getAttribute(\"actionsStart\",\"\");\n\tthis.actionsMouseUp = this.getAttribute(\"actionsStop\",\"\");\n\t// Input fires very often!\n\tthis.actionsInput = this.getAttribute(\"actions\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRangeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.tiddlerTitle]) {\n\t\t\tvar value = this.getValue();\n\t\t\tif(this.inputDomNode.value !== value) {\n\t\t\t\tthis.inputDomNode.value = value;\n\t\t\t}\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.range = RangeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/raw.js": {
"title": "$:/core/modules/widgets/raw.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/reveal.js": {
"title": "$:/core/modules/widgets/reveal.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\tthis.assignDomNodeClasses();\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tvar left,top;\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"belowright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tleft = this.popup.left + this.popup.width - domNode.offsetWidth;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t\tcase \"aboveleft\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t}\n\tif(!this.positionAllowNegative) {\n\t\tleft = Math.max(0,left);\n\t\ttop = Math.max(0,top);\n\t}\n\tdomNode.style.left = left + \"px\";\n\tdomNode.style.top = top + \"px\";\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis.positionAllowNegative = this.getAttribute(\"positionAllowNegative\") === \"yes\";\n\t// class attribute handled in assignDomNodeClasses()\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\tthis.updatePopupPosition = this.getAttribute(\"updatePopupPosition\",\"no\") === \"yes\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTiddlerTitle = this.state;\n\tthis.stateTitle = this.getAttribute(\"stateTitle\");\n\tthis.stateField = this.getAttribute(\"stateField\");\n\tthis.stateIndex = this.getAttribute(\"stateIndex\");\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state,\n\t defaultState = this[\"default\"];\n\tif(this.stateTitle) {\n\t\tvar stateTitleTiddler = this.wiki.getTiddler(this.stateTitle);\n\t\tif(this.stateField) {\n\t\t\tstate = stateTitleTiddler ? stateTitleTiddler.getFieldString(this.stateField) || defaultState : defaultState;\n\t\t} else if(this.stateIndex) {\n\t\t\tstate = stateTitleTiddler ? this.wiki.extractTiddlerDataItem(this.stateTitle,this.stateIndex) || defaultState : defaultState;\n\t\t} else if(stateTitleTiddler) {\n\t\t\tstate = this.wiki.getTiddlerText(this.stateTitle) || defaultState;\n\t\t} else {\n\t\t\tstate = defaultState;\n\t\t}\n\t} else {\n\t\tstate = this.stateTiddlerTitle ? this.wiki.getTextReference(this.state,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\t}\n\tif(state === null) {\n\t\tstate = this[\"default\"];\n\t}\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.isOpen = this.text === state;\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.isOpen = this.text !== state;\n\t\t\tbreak;\n\t\tcase \"lt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t\tcase \"gt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"lteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"gteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.compareStateText = function(state) {\n\treturn state.localeCompare(this.text,undefined,{numeric: true,sensitivity: \"case\"});\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\nRevealWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-reveal\");\n\tthis.domNode.className = classes.join(\" \");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes.positionAllowNegative || changedAttributes[\"default\"] || changedAttributes.animate || changedAttributes.stateTitle || changedAttributes.stateField || changedAttributes.stateIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar currentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if(this.type === \"popup\" && this.updatePopupPosition && (changedTiddlers[this.state] || changedTiddlers[this.stateTitle])) {\n\t\t\tthis.positionPopup(this.domNode);\n\t\t}\n\t\tif(changedAttributes.style) {\n\t\t\tthis.domNode.style = this.getAttribute(\"style\",\"\");\n\t\t}\n\t\tif(changedAttributes[\"class\"]) {\n\t\t\tthis.assignDomNodeClasses();\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\tvar self = this;\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\t//make sure that the state hasn't changed during the close animation\n\t\t\tself.readState()\n\t\t\tif(!self.isOpen) {\n\t\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t\t\t}\n\t\t}});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/scrollable.js": {
"title": "$:/core/modules/widgets/scrollable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tif(event.paramObject && event.paramObject.selector) {\n\t\tthis.scrollSelectorIntoView(null,event.paramObject.selector);\n\t} else {\n\t\tthis.scrollIntoView(event.target);\n\t}\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\tsrcWindow = element ? element.ownerDocument.defaultView : window;\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\nScrollableWidget.prototype.scrollSelectorIntoView = function(baseElement,selector,callback) {\n\tbaseElement = baseElement || document.body;\n\tvar element = baseElement.querySelector(selector);\n\tif(element) {\n\t\tthis.scrollIntoView(element,callback);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/select.js": {
"title": "$:/core/modules/widgets/select.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex,value);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tselect.children[i].selected = values.indexOf(select.children[i].value) !== -1\n\t\t}\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\tthis.selectTooltip = this.getAttribute(\"tooltip\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tif(this.selectTooltip) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"title\",this.selectTooltip);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/set.js": {
"title": "$:/core/modules/widgets/set.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setSelect = this.getAttribute(\"select\");\n\tthis.setTiddler = this.getAttribute(\"tiddler\");\n\tthis.setSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.setField = this.getAttribute(\"field\");\n\tthis.setIndex = this.getAttribute(\"index\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,!!this.parseTreeNode.isMacroDefinition);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setTiddler) {\n\t\tvar tiddler;\n\t\tif(this.setSubTiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.setTiddler,this.setSubTiddler);\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.setTiddler);\n\t\t}\n\t\tif(!tiddler) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t} else if(this.setField) {\n\t\t\tvalue = tiddler.getFieldString(this.setField) || this.setEmptyValue;\n\t\t} else if(this.setIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);\n\t\t} else {\n\t\t\tvalue = tiddler.fields.text || this.setEmptyValue ;\n\t\t}\n\t} else if(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(this.setValue == null) {\n\t\t\tvar select;\n\t\t\tif(this.setSelect) {\n\t\t\t\tselect = parseInt(this.setSelect,10);\n\t\t\t}\n\t\t\tif(select !== undefined) {\n\t\t\t\tvalue = results[select] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = $tw.utils.stringifyList(results);\n\t\t\t}\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value || \"\";\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlers[this.setTiddler]) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||\n\t (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/text.js": {
"title": "$:/core/modules/widgets/text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/tiddler.js": {
"title": "$:/core/modules/widgets/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/transclude.js": {
"title": "$:/core/modules/widgets/transclude.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\tthis.recursionMarker = this.getAttribute(\"recursionMarker\",\"yes\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\tthis.sourceText = parser ? parser.source : null;\n\tthis.parserType = parser? parser.type : null;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tif(this.recursionMarker === \"yes\") {\n\t\tthis.setVariable(\"transclusion\",recursionMarker);\n\t}\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\nTranscludeWidget.prototype.parserNeedsRefresh = function() {\n\tvar parserInfo = this.wiki.getTextReferenceParserInfo(this.transcludeTitle,this.transcludeField,this.transcludeIndex,{subTiddler:this.transcludeSubTiddler});\n\treturn (this.sourceText === undefined || parserInfo.sourceText !== this.sourceText || parserInfo.parserType !== this.parserType)\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(($tw.utils.count(changedAttributes) > 0) || (changedTiddlers[this.transcludeTitle] && this.parserNeedsRefresh())) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/vars.js": {
"title": "$:/core/modules/widgets/vars.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Initialise\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\t// Call the constructor\n\tWidget.call(this);\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/view.js": {
"title": "$:/core/modules/widgets/view.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tthis.viewMode = this.getAttribute(\"mode\",\"block\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"htmltextencoded\":\n\t\t\tthis.text = this.getValueAsHtmlTextEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsPlainWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsHtmlTextEncoded = function() {\n\treturn $tw.utils.htmlTextEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/widget.js": {
"title": "$:/core/modules/widgets/widget.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\t// Bail if parseTreeNode is undefined, meaning that the widget constructor was called without any arguments so that it can be subclassed\n\tif(parseTreeNode === undefined) {\n\t\treturn;\n\t}\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\t// Get widget classes\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t\t// Process any subclasses\n\t\t$tw.modules.forEachModuleOfType(\"widget-subclass\",function(title,module) {\n\t\t\tif(module.baseClass) {\n\t\t\t\tvar baseClass = Widget.prototype.widgetClasses[module.baseClass];\n\t\t\t\tif(!baseClass) {\n\t\t\t\t\tthrow \"Module '\" + title + \"' is attemping to extend a non-existent base class '\" + module.baseClass + \"'\";\n\t\t\t\t}\n\t\t\t\tvar subClass = module.constructor;\n\t\t\t\tsubClass.prototype = new baseClass();\n\t\t\t\t$tw.utils.extend(subClass.prototype,module.prototype);\n\t\t\t\tWidget.prototype.widgetClasses[module.name || module.baseClass] = subClass;\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\nisMacroDefinition: true if the variable is set via a \\define macro pragma (and hence should have variable substitution performed)\n*/\nWidget.prototype.setVariable = function(name,value,params,isMacroDefinition) {\n\tthis.variables[name] = {value: value, params: params, isMacroDefinition: !!isMacroDefinition};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n\nReturns an object with the following fields:\n\nparams: array of {name:,value:} of parameters passed to wikitext variables\ntext: text of variable, with parameters properly substituted\n*/\nWidget.prototype.getVariableInfo = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\toriginalValue = variable.value,\n\t\t\tvalue = originalValue,\n\t\t\tparams = this.resolveVariableParameters(variable.params,actualParams);\n\t\t// Substitute any parameters specified in the definition\n\t\t$tw.utils.each(params,function(param) {\n\t\t\tvalue = $tw.utils.replaceString(value,new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(param.name) + \"\\\\$\",\"mg\"),param.value);\n\t\t});\n\t\t// Only substitute variable references if this variable was defined with the \\define pragma\n\t\tif(variable.isMacroDefinition) {\n\t\t\tvalue = this.substituteVariableReferences(value);\n\t\t}\n\t\treturn {\n\t\t\ttext: value,\n\t\t\tparams: params,\n\t\t\tsrcVariable: variable,\n\t\t\tisCacheable: originalValue === value\n\t\t};\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn {\n\t\ttext: this.evaluateMacroModule(name,actualParams,options.defaultValue)\n\t};\n};\n\n/*\nSimplified version of getVariableInfo() that just returns the text\n*/\nWidget.prototype.getVariable = function(name,options) {\n\treturn this.getVariableInfo(name,options).text;\n};\n\nWidget.prototype.resolveVariableParameters = function(formalParams,actualParams) {\n\tformalParams = formalParams || [];\n\tactualParams = actualParams || [];\n\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\tparamInfo, paramValue,\n\t\tresults = [];\n\t// Step through each of the parameters in the macro definition\n\tfor(var p=0; p<formalParams.length; p++) {\n\t\t// Check if we've got a macro call parameter with the same name\n\t\tparamInfo = formalParams[p];\n\t\tparamValue = undefined;\n\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t}\n\t\t}\n\t\t// If not, use the next available anonymous macro call parameter\n\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\tnextAnonParameter++;\n\t\t}\n\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t}\n\t\t// If we've still not got a value, use the default, if any\n\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t// Store the parameter name and value\n\t\tresults.push({name: paramInfo.name, value: paramValue});\n\t}\n\treturn results;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"filtered\") {\n\t\t\tvalue = self.wiki.filterTiddlers(attribute.filter,self)[0] || \"\";\n\t\t} else if(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes,options) {\n\toptions = options || {};\n\tthis.children = [];\n\tvar self = this;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: parseTreeNodes\n\t\t};\n\t\tparseTreeNodes = [setVariableWidget];\n\t});\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\noptions include:\n\tvariables: optional hashmap of variables to wrap around the widget\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode,options) {\n\toptions = options || {};\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: [\n\t\t\t\tparseTreeNode\n\t\t\t]\n\t\t};\n\t\tparseTreeNode = setVariableWidget;\n\t});\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\tvar children = this.children;\n\tfor(var i = 0; i < children.length; i++) {\n\t\tchildren[i].render(parent,nextSibling);\n\t};\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\tevent.widget = event.widget || this;\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar children = this.children,\n\t\trefreshed = false;\n\tfor (var i = 0; i < children.length; i++) {\n\t\trefreshed = children[i].refresh(changedTiddlers) || refreshed;\n\t}\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction) {\n\t\t\tchild.refreshSelf();\n\t\t\tif(child.invokeAction(triggeringWidget,event)) {\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event,variables) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document,\n\t\t\tvariables: variables\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\n};\n\n/*\nExecute action tiddlers by tag\n*/\nWidget.prototype.invokeActionsByTag = function(tag,event,variables) {\n\tvar self = this;\n\t$tw.utils.each(self.wiki.filterTiddlers(\"[all[shadows+tiddlers]tag[\" + tag + \"]!has[draft.of]]\"),function(title) {\n\t\tself.invokeActionString(self.wiki.getTiddlerText(title),self,event,variables);\n\t});\n};\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/wikify.js": {
"title": "$:/core/modules/widgets/wikify.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"formattedtext\":\n\t\t\tresult = this.wikifyContainer.formattedTextContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/wiki-bulkops.js": {
"title": "$:/core/modules/wiki-bulkops.js",
"text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nfunction renameTiddler(fromTitle,toTitle,options) {\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar oldTiddler = this.getTiddler(fromTitle),\n\t\t\tnewTiddler = new $tw.Tiddler(oldTiddler,{title: toTitle},this.getModificationFields());\n\t\tnewTiddler = $tw.hooks.invokeHook(\"th-renaming-tiddler\",newTiddler,oldTiddler);\n\t\tthis.addTiddler(newTiddler);\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.relinkTiddler(fromTitle,toTitle,options)\n\t}\n}\n\n/*\nRelink any tags or lists that reference a given tiddler\n*/\nfunction relinkTiddler(fromTitle,toTitle,options) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar type = tiddler.fields.type || \"\";\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(!tiddler.fields[\"plugin-type\"] && type !== \"application/javascript\") {\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.slice(0) : undefined,\n\t\t\t\t\tlist = tiddler.fields.list ? tiddler.fields.list.slice(0) : undefined,\n\t\t\t\t\tisModified = false;\n\t\t\t\tif(!options.dontRenameInTags) {\n\t\t\t\t\t// Rename tags\n\t\t\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming tag '\" + tags[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(!options.dontRenameInLists) {\n\t\t\t\t\t// Rename lists\n\t\t\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming list item '\" + list[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(isModified) {\n\t\t\t\t\tvar newTiddler = new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())\n\t\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\t\t\t\tself.addTiddler(newTiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\nexports.renameTiddler = renameTiddler;\nexports.relinkTiddler = relinkTiddler;\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/wiki.js": {
"title": "$:/core/modules/wiki.js",
"text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\",\n\tTIMESTAMP_DISABLE_TITLE = \"$:/config/TimestampDisable\";\n\n/*\nAdd available indexers to this wiki\n*/\nexports.addIndexersToWiki = function() {\n\tvar self = this;\n\t$tw.utils.each($tw.modules.applyMethods(\"indexer\"),function(Indexer,name) {\n\t\tself.addIndexer(new Indexer(self),name);\n\t});\n};\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type] || [];\n\tthis.eventListeners[type].push(listener);\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\noptions.prefix must be a string\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle,\n\t\ttemplate = options.template,\n\t\tprefix = (typeof(options.prefix) === \"string\") ? options.prefix : \" \";\n\tif (template) {\n\t\t// \"count\" is important to avoid an endless loop in while(...)!!\n\t\ttemplate = (/\\$count:?(\\d+)?\\$/i.test(template)) ? template : template + \"$count$\";\n\t\ttitle = $tw.utils.formatTitleString(template,{\"base\":baseTitle,\"separator\":prefix,\"counter\":c});\n\t\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\t\ttitle = $tw.utils.formatTitleString(template,{\"base\":baseTitle,\"separator\":prefix,\"counter\":(++c)});\n\t\t}\n\t} else {\n\t\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\t\ttitle = baseTitle + prefix + (++c);\n\t\t}\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isVolatileTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/volatile/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.isBinaryTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.encoding === \"base64\";\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = {\n\t\t\t\tcreated: new Date()\n\t\t\t},\n\t\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\t\tif(creator) {\n\t\t\tfields.creator = creator;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = Object.create(null),\n\t\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\t\tfields.modified = new Date();\n\t\tif(modifier) {\n\t\t\tfields.modifier = modifier;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a sorted array of tiddler titles. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric,isAlphaNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t\t\t\t\t\t\t(isDescending ? y - x : x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.getFieldString(sortField) || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.getFieldString(sortField) || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else if(isAlphaNumeric) {\n\t\t\treturn isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \"base\"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \"base\"});\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked within the given parse tree\n */\nexports.extractLinks = function(parseTreeRoot) {\n\t// Count up the links\n\tvar links = [],\n\t\tcheckParseTree = function(parseTree) {\n\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcheckParseTree(parseTreeRoot);\n\treturn links;\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\tif(parser) {\n\t\t\treturn self.extractLinks(parser.tree);\n\t\t}\n\t\treturn [];\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinksIndexer = this.getIndexer(\"BacklinksIndexer\"),\n\t\tbacklinks = backlinksIndexer && backlinksIndexer.lookup(targetTitle);\n\n\tif(!backlinks) {\n\t\tbacklinks = [];\n\t\tthis.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self.getTiddlerLinks(title);\n\t\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\t\tbacklinks.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\t// Try to use the indexer\n\tvar self = this,\n\t\ttagIndexer = this.getIndexer(\"TagIndexer\"),\n\t\tresults = tagIndexer && tagIndexer.subIndexers[3].lookup(tag);\n\tif(!results) {\n\t\t// If not available, perform a manual scan\n\t\tresults = this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\t\tvar tagmap = self.getTagMap();\n\t\t\treturn self.sortByList(tagmap[tag],tag);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar self = this,\n\t\treplacedTitles = Object.create(null);\n\t// Given a title, this function will place it in the correct location\n\t// within titles.\n\tfunction moveItemInList(title) {\n\t\tif(!$tw.utils.hop(replacedTitles, title)) {\n\t\t\treplacedTitles[title] = true;\n\t\t\tvar newPos = -1,\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(afterTitle === \"\") {\n\t\t\t\t\tnewPos = titles.length;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\t// if this title is placed relative\n\t\t\t\t\t// to another title, make sure that\n\t\t\t\t\t// title is placed before we place\n\t\t\t\t\t// this one.\n\t\t\t\t\tmoveItemInList(beforeTitle);\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\t// Same deal\n\t\t\t\t\tmoveItemInList(afterTitle);\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If a new position is specified, let's move it\n\t\t\t\tif (newPos !== -1) {\n\t\t\t\t\t// get its current Pos, and make sure\n\t\t\t\t\t// sure that it's _actually_ in the list\n\t\t\t\t\t// and that it would _actually_ move\n\t\t\t\t\t// (#4275) We don't bother calling\n\t\t\t\t\t// indexOf unless we have a new\n\t\t\t\t\t// position to work with\n\t\t\t\t\tvar currPos = titles.indexOf(title);\n\t\t\t\t\tif(currPos >= 0 && newPos !== currPos) {\n\t\t\t\t\t\t// move it!\n\t\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\tmoveItemInList(title);\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\nexports.getTiddlersAsJson = function(filter,spaces) {\n\tvar tiddlers = this.filterTiddlers(filter),\n\t\tspaces = (spaces === undefined) ? $tw.config.preferences.jsonSpaces : spaces,\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,spaces);\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,undefined);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t}) || defaultData;\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerDataCached(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n\t// Use the generic binary parser for any binary types not registered so far\n\tif($tw.Wiki.parsers[\"application/octet-stream\"]) {\n\t\tObject.keys($tw.config.contentTypeInfo).forEach(function(type) {\n\t\t\tif(!$tw.utils.hop($tw.Wiki.parsers,type) && $tw.config.contentTypeInfo[type].encoding === \"base64\") {\n\t\t\t\t$tw.Wiki.parsers[type] = $tw.Wiki.parsers[\"application/octet-stream\"];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,\n\t\ttext,\n\t\tparserInfo;\n\tif(!options.subTiddler) {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t} \n\tparserInfo = this.getTextReferenceParserInfo(title,field,index,options);\n\tif(parserInfo.sourceText !== null) {\n\t\treturn this.parseText(parserInfo.parserType,parserInfo.sourceText,options);\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.getTextReferenceParserInfo = function(title,field,index,options) {\n\tvar tiddler,\n\t\tparserInfo = {\n\t\t\tsourceText : null,\n\t\t\tparserType : \"text/vnd.tiddlywiki\"\n\t\t};\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\tparserInfo.sourceText = tiddler.fields.text || \"\";\n\t\t\tif(tiddler.fields.type) {\n\t\t\t\tparserInfo.parserType = tiddler.fields.type;\n\t\t\t}\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\tparserInfo.sourceText = title;\n\t\t} else if(tiddler && tiddler.fields) {\n\t\t\tparserInfo.sourceText = tiddler.fields[field] ? tiddler.fields[field].toString() : null;\n\t\t}\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\tparserInfo.sourceText = this.extractTiddlerDataItem(tiddler,index,null);\n\t}\n\tif(parserInfo.sourceText === null) {\n\t\tparserInfo.parserType = null;\n\t}\n\treturn parserInfo;\n}\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.recursionMarker : optional flag to set a recursion marker, defaults to \"yes\"\noptions.children: optional array of children for the transclude widget\noptions.importVariables: optional importvariables filter string for macros to be included\noptions.importPageMacros: optional boolean; if true, equivalent to passing \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\" to options.importVariables\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTreeDiv = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: []}]},\n\t\tparseTreeImportVariables = {\n\t\t\ttype: \"importvariables\",\n\t\t\tattributes: {\n\t\t\t\tfilter: {\n\t\t\t\t\tname: \"filter\",\n\t\t\t\t\ttype: \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: false,\n\t\t\tchildren: []},\n\t\tparseTreeTransclude = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\trecursionMarker: {\n\t\t\t\t\tname: \"recursionMarker\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: options.recursionMarker || \"yes\"\n\t\t\t\t\t},\n\t\t\t\ttiddler: {\n\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: !options.parseAsInline};\n\tif(options.importVariables || options.importPageMacros) {\n\t\tif(options.importVariables) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = options.importVariables;\n\t\t} else if(options.importPageMacros) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\";\n\t\t}\n\t\tparseTreeDiv.tree[0].children.push(parseTreeImportVariables);\n\t\tparseTreeImportVariables.children.push(parseTreeTransclude);\n\t} else {\n\t\tparseTreeDiv.tree[0].children.push(parseTreeTransclude);\n\t}\n\tif(options.field) {\n\t\tparseTreeTransclude.attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTreeTransclude.attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTreeTransclude.children = options.children;\n\t}\n\treturn this.makeWidget(parseTreeDiv,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tfield: If specified, restricts the search to the specified field, or an array of field names\n\tanchored: If true, forces all but regexp searches to be anchored to the start of text\n\texcludeField: If true, the field options are inverted to specify the fields that are not to be searched\n\tThe search mode is determined by the first of these boolean flags to be true\n\t\tliteral: searches for literal string\n\t\twhitespace: same as literal except runs of whitespace are treated as a single space\n\t\tregexp: treats the search term as a regular expression\n\t\twords: (default) treats search string as a list of tokens, and matches if all tokens are found, regardless of adjacency or ordering\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\",\n\t\tanchor = options.anchored ? \"^\" : \"\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else if(options.whitespace) {\n\t\tterms = [];\n\t\t$tw.utils.each(text.split(/\\s+/g),function(term) {\n\t\t\tif(term) {\n\t\t\t\tterms.push($tw.utils.escapeRegExp(term));\n\t\t\t}\n\t\t});\n\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + terms.join(\"\\\\s+\") + \")\",flags)];\n\t} else if(options.regexp) {\n\t\ttry {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + text + \")\",flags)];\n\t\t} catch(e) {\n\t\t\tsearchTermsRegExps = null;\n\t\t\tconsole.log(\"Regexp error parsing /(\" + text + \")/\" + flags + \": \",e);\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Accumulate the array of fields to be searched or excluded from the search\n\tvar fields = [];\n\tif(options.field) {\n\t\tif($tw.utils.isArray(options.field)) {\n\t\t\t$tw.utils.each(options.field,function(fieldName) {\n\t\t\t\tif(fieldName) {\n\t\t\t\t\tfields.push(fieldName);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tfields.push(options.field);\n\t\t}\n\t}\n\t// Use default fields if none specified and we're not excluding fields (excluding fields with an empty field array is the same as searching all fields)\n\tif(fields.length === 0 && !options.excludeField) {\n\t\tfields.push(\"title\");\n\t\tfields.push(\"tags\");\n\t\tfields.push(\"text\");\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar notYetFound = searchTermsRegExps.slice();\n\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tsearchFields;\n\t\t// Get the list of fields we're searching\n\t\tif(options.excludeField) {\n\t\t\tsearchFields = Object.keys(tiddler.fields);\n\t\t\t$tw.utils.each(fields,function(fieldName) {\n\t\t\t\tvar p = searchFields.indexOf(fieldName);\n\t\t\t\tif(p !== -1) {\n\t\t\t\t\tsearchFields.splice(p,1);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsearchFields = fields;\n\t\t}\n\t\tfor(var fieldIndex=0; notYetFound.length>0 && fieldIndex<searchFields.length; fieldIndex++) {\n\t\t\t// Don't search the text field if the content type is binary\n\t\t\tvar fieldName = searchFields[fieldIndex];\n\t\t\tif(fieldName === \"text\" && contentTypeInfo.encoding !== \"utf8\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar str = tiddler.fields[fieldName],\n\t\t\t\tt;\n\t\t\tif(str) {\n\t\t\t\tif($tw.utils.isArray(str)) {\n\t\t\t\t\t// If the field value is an array, test each regexp against each field array entry and fail if each regexp doesn't match at least one field array entry\n\t\t\t\t\tfor(var s=0; s<str.length; s++) {\n\t\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\t\tif(notYetFound[t].test(str[s])) {\n\t\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If the field isn't an array, force it to a string and test each regexp against it and fail if any do not match\n\t\t\t\t\tstr = tiddler.getFieldString(fieldName);\n\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\tif(notYetFound[t].test(str)) {\n\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn notYetFound.length == 0;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(!tiddler.hasField(\"_is_skinny\")) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text || \"\";\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nCheck whether the text of a tiddler matches a given value. By default, the comparison is case insensitive, and any spaces at either end of the tiddler text is trimmed\n*/\nexports.checkTiddlerText = function(title,targetText,options) {\n\toptions = options || {};\n\tvar text = this.getTiddlerText(title,\"\");\n\tif(!options.noTrim) {\n\t\ttext = text.trim();\n\t}\n\tif(!options.caseSensitive) {\n\t\ttext = text.toLowerCase();\n\t\ttargetText = targetText.toLowerCase();\n\t}\n\treturn text === targetText;\n}\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\tvar result = [],\n\t\toutstanding = files.length,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t};\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],$tw.utils.extend({},options,{callback: readFileCallback}));\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Give the hook a chance to process the drag\n\tif($tw.hooks.invokeHook(\"th-importing-file\",{\n\t\tfile: file,\n\t\ttype: type,\n\t\tisBinary: isBinary,\n\t\tcallback: callback\n\t}) !== true) {\n\t\tthis.readFileContent(file,type,isBinary,options.deserializer,callback);\n\t}\n};\n\n/*\nLower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFileContent = function(file,type,isBinary,deserializer,callback) {\n\tvar self = this;\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\"};\n\t\tif(isBinary) {\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttext = text.substr(commaPos + 1);\n\t\t\t}\n\t\t}\n\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedJson) {\n\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\tcallback(tiddlers);\n\t\t\t});\n\t\t} else {\n\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified.\nIf the original tiddler doesn't exist, create a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\n\tconsole.log(\"$tw.wiki.addToHistory() is deprecated since V5.1.23! Use the this.story.addToHistory() from the story-object!\")\n};\n\n/*\nAdd a new tiddler to the story river\ntitle: a title string or an array of title strings\nfromTitle: the title of the tiddler from which the navigation originated\nstoryTitle: title of story tiddler (defaults to $:/StoryList)\noptions: see story.js\n*/\nexports.addToStory = function(title,fromTitle,storyTitle,options) {\n\tvar story = new $tw.Story({wiki: this, storyTitle: storyTitle});\n\tstory.addToStory(title,fromTitle,options);\n\tconsole.log(\"$tw.wiki.addToStory() is deprecated since V5.1.23! Use the this.story.addToStory() from the story-object!\")\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nexports.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle,\n\t\tusername = this.getTiddlerText(\"$:/status/UserName\"),\n\t\tattribution = username ? \" by \" + username : \"\";\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\" + attribution;\n\t\tc++;\n\t} while(this.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n// Determine whether a plugin by title is dynamically loadable\nexports.doesPluginRequireReload = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler && tiddler.fields.type === \"application/json\" && tiddler.fields[\"plugin-type\"]) {\n\t\tif(tiddler.fields[\"plugin-type\"] === \"import\") {\n\t\t\t// The import plugin never requires reloading\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn this.doesPluginInfoRequireReload(this.getPluginInfo(title) || this.getTiddlerDataCached(title));\n};\n\n// Determine whether a plugin info structure is dynamically loadable\nexports.doesPluginInfoRequireReload = function(pluginInfo) {\n\tif(pluginInfo) {\n\t\tvar foundModule = false;\n\t\t$tw.utils.each(pluginInfo.tiddlers,function(tiddler) {\n\t\t\tif(tiddler.type === \"application/javascript\" && $tw.utils.hop(tiddler,\"module-type\")) {\n\t\t\t\tfoundModule = true;\n\t\t\t}\n\t\t});\n\t\treturn foundModule;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.slugify = function(title,options) {\n\tvar tiddler = this.getTiddler(title),\n\t\tslug;\n\tif(tiddler && tiddler.fields.slug) {\n\t\tslug = tiddler.fields.slug;\n\t} else {\n\t\tslug = $tw.utils.transliterate(title.toString().toLowerCase()) // Replace diacritics with basic lowercase ASCII\n\t\t\t.replace(/\\s+/g,\"-\") // Replace spaces with -\n\t\t\t.replace(/[^\\w\\-\\.]+/g,\"\") // Remove all non-word chars except dash and dot\n\t\t\t.replace(/\\-\\-+/g,\"-\") // Replace multiple - with single -\n\t\t\t.replace(/^-+/,\"\") // Trim - from start of text\n\t\t\t.replace(/-+$/,\"\"); // Trim - from end of text\n\t}\n\t// If the resulting slug is blank (eg because the title is just punctuation characters)\n\tif(!slug) {\n\t\t// ...then just use the character codes of the title\n\t\tvar result = [];\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tresult.push(char.charCodeAt(0).toString());\n\t\t});\n\t\tslug = result.join(\"-\");\n\t}\n\treturn slug;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/palettes/Blanca": {
"title": "$:/palettes/Blanca",
"name": "Blanca",
"color-scheme": "light",
"description": "A clean white palette to let you focus",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Blue": {
"title": "$:/palettes/Blue",
"name": "Blue",
"color-scheme": "light",
"description": "A blue theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Muted": {
"title": "$:/palettes/Muted",
"name": "Muted",
"color-scheme": "light",
"description": "Bright tiddlers on a muted background",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastLight": {
"title": "$:/palettes/ContrastLight",
"name": "Contrast (Light)",
"color-scheme": "light",
"description": "High contrast and unambiguous (light version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastDark": {
"title": "$:/palettes/ContrastDark",
"name": "Contrast (Dark)",
"color-scheme": "dark",
"description": "High contrast and unambiguous (dark version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/CupertinoDark": {
"title": "$:/palettes/CupertinoDark",
"tags": "$:/tags/Palette",
"color-scheme": "dark",
"name": "Cupertino Dark",
"description": "A macOS inspired dark palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #FF453A\nalert-border: #FF453A\nalert-highlight: #FFD60A\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #282828\nblockquote-bar: <<colour page-background>>\nbutton-foreground: <<colour background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #FF453A\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour tiddler-info-background>>\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: #3F638B\ndropdown-tab-background: #323232\ndropzone-background: #30D158\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #BF5AF2\nexternal-link-foreground: #32D74B\nforeground: #FFFFFF\nmenubar-background: #464646\nmenubar-foreground: #ffffff\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: #98989D\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #323232\npre-background: #464646\npre-border: transparent\nprimary: #0A84FF\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour background>>\nsidebar-controls-foreground-hover: #FF9F0A\nsidebar-controls-foreground: #8E8E93\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: #3F638B\nsidebar-tab-background: <<colour background>>\nsidebar-tab-border-selected: <<colour background>>\nsidebar-tab-border: <<colour background>>\nsidebar-tab-divider: <<colour background>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: #ffffff\nstatic-alert-foreground: #B4B4B4\ntab-background-selected: #3F638B\ntab-background: <<colour page-background>>\ntab-border-selected: <<colour page-background>>\ntab-border: <<colour page-background>>\ntab-divider: <<colour page-background>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #464646\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #48484A\ntag-foreground: #323232\ntiddler-background: <<colour background>>\ntiddler-border: transparent\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: #48484A\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #1E1E1E\ntiddler-info-border: #1E1E1E\ntiddler-info-tab-background: #3F638B\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: #464646\nselection-background: #3F638B\nselection-foreground: #ffffff\nwikilist-background: <<colour page-background>>\nwikilist-button-background: #3F638B\nwikilist-button-foreground: <<colour foreground>>\nwikilist-button-open: #32D74B\nwikilist-button-open-hover: #32D74B\nwikilist-button-reveal: #0A84FF\nwikilist-button-reveal-hover: #0A84FF\nwikilist-button-remove: #FF453A\nwikilist-button-remove-hover: #FF453A\nwikilist-droplink-dragover: #32D74B\nwikilist-item: <<colour background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-title: <<colour foreground>>\nwikilist-title-svg: <<colour foreground>>\nwikilist-toolbar-foreground: <<colour foreground>>\nwikilist-url: <<colour muted-foreground>>\n"
},
"$:/palettes/DarkPhotos": {
"title": "$:/palettes/DarkPhotos",
"created": "20150402111612188",
"description": "Good with dark photo backgrounds",
"modified": "20150402112344080",
"name": "DarkPhotos",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"color-scheme": "light",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/DesertSand": {
"title": "$:/palettes/DesertSand",
"tags": "$:/tags/Palette",
"color-scheme": "light",
"name": "Desert Sand",
"description": "A desert sand palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #E9E0C7\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour foreground>>\ncode-background: #F3EDDF\ncode-border: #C3BAA1\ncode-foreground: #ab3250\ndiff-delete-background: #bd8b8b\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #91c093\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ad3434\ndownload-background: #6ca16c\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #E9E0C7\ndropdown-tab-background: #BAB29C\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #313163\nexternal-link-foreground: #555592\nforeground: #2D2A23\nmenubar-background: #CDC2A6\nmenubar-foreground: #5A5446\nmessage-background: #ECE5CF\nmessage-border: #D6CBAA\nmessage-foreground: #5f6e7d\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #8A8885\nmodal-footer-background: #CDC2A6\nmodal-footer-border: #9D998E\nmodal-header-border: #9D998E\nmuted-foreground: #9D998E\nnotification-background: #F0E9D7\nnotification-border: #939189\npage-background: #e0d3af\npre-background: #D6CBAA\npre-border: #CDC2A6\nprimary: #5B6F55\nselection-background: #9D947B\nselection-foreground: <<colour foreground>>\nselect-tag-background: #F0E9D7\nselect-tag-foreground: #2D2A23\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #2D2A23\nsidebar-controls-foreground: #867F69\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #867F69\nsidebar-muted-foreground-hover: #706A58\nsidebar-muted-foreground: #B3A98C\nsidebar-tab-background-selected: #e0d3af\nsidebar-tab-background: #A6A193\nsidebar-tab-border-selected: #C3BAA1\nsidebar-tab-border: #C3BAA1\nsidebar-tab-divider: #CDC2A6\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #2D2A23\nsidebar-tiddler-link-foreground-hover: #433F35\nsidebar-tiddler-link-foreground: #706A58\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #A6A193\ntab-background-selected: #E9E0C7\ntab-background: #A6A193\ntab-border-selected: #C3BAA1\ntab-border: #C3BAA1\ntab-divider: #CDC2A6\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #2D2A23\ntable-border: #9D998E\ntable-footer-background: #8A8885\ntable-header-background: #B0AA98\ntag-background: #706A58\ntag-foreground: #E3D7B7\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #9D947B\ntiddler-controls-foreground-selected: #706A58\ntiddler-controls-foreground: #C3BAA1\ntiddler-editor-background: #E9E0C7\ntiddler-editor-border-image: #A6A193\ntiddler-editor-border: #A6A193\ntiddler-editor-fields-even: #D6CBAA\ntiddler-editor-fields-odd: #C3BAA1\ntiddler-info-background: #E3D7B7\ntiddler-info-border: #BAB29C\ntiddler-info-tab-background: #E9E0C7\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #867F69\ntiddler-title-foreground: #374464\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #8A8885\nvery-muted-foreground: #CDC2A6\nwikilist-background: <<colour page-background>>\nwikilist-item: #CDC2A6\nwikilist-info: #161512\nwikilist-title: #433F35\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: #706A58\nwikilist-button-open: #7db66a\nwikilist-button-open-hover: #56a556\nwikilist-button-reveal: #5a6c9e\nwikilist-button-reveal-hover: #454591\nwikilist-button-remove: #bc5972\nwikilist-button-remove-hover: #814040\nwikilist-toolbar-background: #CDC2A6\nwikilist-toolbar-foreground: #2D2A23\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\nwikilist-button-background: #A6A193\nwikilist-button-foreground: #161512\n"
},
"$:/palettes/GruvboxDark": {
"title": "$:/palettes/GruvboxDark",
"name": "Gruvbox Dark",
"color-scheme": "dark",
"description": "Retro groove color scheme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"license": "https://github.com/morhetz/gruvbox",
"text": "alert-background: #cc241d\nalert-border: #cc241d\nalert-highlight: #d79921\nalert-muted-foreground: #504945\nbackground: #3c3836\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour page-background>>\ncode-background: #504945\ncode-border: #504945\ncode-foreground: #fb4934\ndiff-delete-background: #fb4934\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #b8bb26\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #fb4934\ndownload-background: #b8bb26\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #665c54\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ebdbb2\ndropdown-tab-background: #665c54\ndropzone-background: #98971a\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #d3869b\nexternal-link-foreground: #8ec07c\nforeground: #fbf1c7\nmenubar-background: #504945\nmenubar-foreground: <<colour foreground>>\nmessage-background: #83a598\nmessage-border: #83a598\nmessage-foreground: #3c3836\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #504945\nmodal-footer-background: #3c3836\nmodal-footer-border: #3c3836\nmodal-header-border: #3c3836\nmuted-foreground: #d5c4a1\nnotification-background: <<colour primary>>\nnotification-border: <<colour primary>>\npage-background: #282828\npre-background: #504945\npre-border: #504945\nprimary: #d79921\nselect-tag-background: #665c54\nselect-tag-foreground: <<colour foreground>>\nselection-background: #458588\nselection-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour page-background>>\nsidebar-controls-foreground-hover: #7c6f64\nsidebar-controls-foreground: #504945\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #fbf1c7\nsidebar-muted-foreground-hover: #7c6f64\nsidebar-muted-foreground: #504945\nsidebar-tab-background-selected: #bdae93\nsidebar-tab-background: #3c3836\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #bdae93\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #282828\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #458588\nsidebar-tiddler-link-foreground: #98971a\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ebdbb2\ntab-background: #665c54\ntab-border-selected: #665c54\ntab-border: #665c54\ntab-divider: #bdae93\ntab-foreground-selected: #282828\ntab-foreground: #ebdbb2\ntable-border: #7c6f64\ntable-footer-background: #665c54\ntable-header-background: #504945\ntag-background: #d3869b\ntag-foreground: #282828\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #7c6f64\ntiddler-controls-foreground-selected: <<colour primary>>\ntiddler-controls-foreground: #665c54\ntiddler-editor-background: #32302f\ntiddler-editor-border-image: #282828\ntiddler-editor-border: #282828\ntiddler-editor-fields-even: #504945\ntiddler-editor-fields-odd: #7c6f64\ntiddler-info-background: #32302f\ntiddler-info-border: #ebdbb2\ntiddler-info-tab-background: #ebdbb2\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #7c6f64\ntiddler-title-foreground: #a89984\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #504945\nvery-muted-foreground: #bdae93\nwikilist-background: <<colour page-background>>\nwikilist-button-background: #acacac\nwikilist-button-foreground: <<colour button-foreground>>\nwikilist-item: <<colour background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-toolbar-foreground: <<colour foreground>>\nwikilist-title: <<colour foreground>>\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: <<colour muted-foreground>>\nwikilist-button-open-hover: <<colour primary>>\nwikilist-button-open: <<colour dropzone-background>>\nwikilist-button-remove: <<colour dirty-indicator>>\nwikilist-button-remove-hover: <<colour alert-background>>\nwikilist-droplink-dragover: <<colour dropzone-background>>\nwikilist-button-reveal: <<colour sidebar-tiddler-link-foreground-hover>>\nwikilist-button-reveal-hover: <<colour message-background>>\n"
},
"$:/palettes/Nord": {
"title": "$:/palettes/Nord",
"name": "Nord",
"color-scheme": "dark",
"description": "An arctic, north-bluish color palette.",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"license": "MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md",
"text": "alert-background: #D08770\nalert-border: #D08770\nalert-highlight: #B48EAD\nalert-muted-foreground: #4C566A\nbackground: #3b4252\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour page-background>>\ncode-background: #2E3440\ncode-border: #2E3440\ncode-foreground: #BF616A\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #A3BE8C\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #BF616A\ndownload-background: #A3BE8C\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ECEFF4\ndropdown-tab-background: #4C566A\ndropzone-background: #A3BE8C\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #5E81AC\nexternal-link-foreground: #8FBCBB\nforeground: #d8dee9\nmenubar-background: #2E3440\nmenubar-foreground: #d8dee9\nmessage-background: #2E3440\nmessage-border: #2E3440\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #3b4252\nmodal-footer-background: #3b4252\nmodal-footer-border: #3b4252\nmodal-header-border: #3b4252\nmuted-foreground: #4C566A\nnotification-background: <<colour primary>>\nnotification-border: #EBCB8B\npage-background: #2e3440\npre-background: #2E3440\npre-border: #2E3440\nprimary: #5E81AC\nselect-tag-background: #3b4252\nselect-tag-foreground: <<colour foreground>>\nselection-background: #5E81AC\nselection-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour page-background>>\nsidebar-controls-foreground-hover: #D8DEE9\nsidebar-controls-foreground: #4C566A\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #D8DEE9\nsidebar-muted-foreground-hover: #4C566A\nsidebar-muted-foreground: #4C566A\nsidebar-tab-background-selected: #ECEFF4\nsidebar-tab-background: #4C566A\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #4C566A\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #4C566A\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #A3BE8C\nsidebar-tiddler-link-foreground: #81A1C1\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ECEFF4\ntab-background: #4C566A\ntab-border-selected: #4C566A\ntab-border: #4C566A\ntab-divider: #4C566A\ntab-foreground-selected: #4C566A\ntab-foreground: #D8DEE9\ntable-border: #4C566A\ntable-footer-background: #2e3440\ntable-header-background: #2e3440\ntag-background: #A3BE8C\ntag-foreground: #4C566A\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: \ntiddler-controls-foreground-selected: #EBCB8B\ntiddler-controls-foreground: #4C566A\ntiddler-editor-background: #2e3440\ntiddler-editor-border-image: #2e3440\ntiddler-editor-border: #3b4252\ntiddler-editor-fields-even: #2e3440\ntiddler-editor-fields-odd: #2e3440\ntiddler-info-background: #2e3440\ntiddler-info-border: #2e3440\ntiddler-info-tab-background: #2e3440\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #4C566A\ntiddler-title-foreground: #81A1C1\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #2d3038\nvery-muted-foreground: #2d3038\nwikilist-background: <<colour page-background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-item: <<colour background>>\nwikilist-title: <<colour foreground>>\nwikilist-info: <<colour muted-foreground>>\nwikilist-button-open: #A3BE8C\nwikilist-button-open-hover: #A3BE8C\nwikilist-button-reveal: #81A1C1\nwikilist-button-reveal-hover: #81A1C1\nwikilist-button-remove: #B48EAD\nwikilist-button-remove-hover: #B48EAD\n"
},
"$:/palettes/Rocker": {
"title": "$:/palettes/Rocker",
"name": "Rocker",
"color-scheme": "dark",
"description": "A dark theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/SolarFlare": {
"title": "$:/palettes/SolarFlare",
"name": "Solar Flare",
"color-scheme": "light",
"description": "Warm, relaxing earth colours",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n download-foreground: <<colour background>>\n dragger-foreground: <<colour background>>\n dropdown-background: <<colour background>>\n modal-background: <<colour background>>\n sidebar-foreground-shadow: <<colour background>>\n tiddler-background: <<colour background>>\n tiddler-border: <<colour background>>\n tiddler-link-background: <<colour background>>\n tab-background-selected: <<colour background>>\n dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n dragger-background: <<colour foreground>>\n tab-foreground: <<colour foreground>>\n tab-foreground-selected: <<colour tab-foreground>>\n sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n sidebar-tab-foreground: <<colour tab-foreground>>\n sidebar-button-foreground: <<colour foreground>>\n sidebar-controls-foreground: <<colour foreground>>\n sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n alert-muted-foreground: <<colour base01>>\n: base00\n code-foreground: <<colour base00>>\n message-foreground: <<colour base00>>\n tag-foreground: <<colour base00>>\n: base0\n sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n muted-foreground: <<colour base1>>\n blockquote-bar: <<colour muted-foreground>>\n dropdown-border: <<colour muted-foreground>>\n sidebar-muted-foreground: <<colour muted-foreground>>\n tiddler-title-foreground: <<colour muted-foreground>>\n site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n modal-footer-background: <<colour base2>>\n page-background: <<colour base2>>\n modal-backdrop: <<colour page-background>>\n notification-background: <<colour page-background>>\n code-background: <<colour page-background>>\n code-border: <<colour code-background>>\n pre-background: <<colour page-background>>\n pre-border: <<colour pre-background>>\n sidebar-tab-background-selected: <<colour page-background>>\n table-header-background: <<colour base2>>\n tag-background: <<colour base2>>\n tiddler-editor-background: <<colour base2>>\n tiddler-info-background: <<colour base2>>\n tiddler-info-tab-background: <<colour base2>>\n tab-background: <<colour base2>>\n dropdown-tab-background: <<colour tab-background>>\n: base3\n alert-background: <<colour base3>>\n message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n alert-highlight: <<colour magenta>>\n: violet\n external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n primary: <<colour blue-muted>>\n download-background: <<colour primary>>\n tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nselect-tag-background:\nselect-tag-foreground:\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n modal-footer-border: <<colour tab-border>>\n modal-header-border: <<colour tab-border>>\n notification-border: <<colour tab-border>>\n sidebar-tab-border: <<colour tab-border>>\n tab-border-selected: <<colour tab-border>>\n sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/SolarizedDark": {
"title": "$:/palettes/SolarizedDark",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Precision dark colors for machines and people",
"license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
"name": "SolarizedDark",
"color-scheme": "dark",
"text": "alert-background: #073642\nalert-border: #93a1a1\nalert-highlight: #d33682\nalert-muted-foreground: #d33682\nbackground: #073642\nblockquote-bar: #d33682\nbutton-background: #073642\nbutton-border: #586e75\nbutton-foreground: #93a1a1\ncode-background: #073642\ncode-border: #586e75\ncode-foreground: #93a1a1\ndirty-indicator: inherit\ndownload-background: #859900\ndownload-foreground: #073642\ndragger-background: #073642\ndragger-foreground: #839496\ndropdown-background: #073642\ndropdown-border: #93a1a1\ndropdown-tab-background: #002b36\ndropdown-tab-background-selected: #073642\ndropzone-background: #859900\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: #268bd2\nexternal-link-foreground-hover:\nexternal-link-foreground-visited: #268bd2\nforeground: #839496\nmessage-background: #002b36\nmessage-border: #586e75\nmessage-foreground: #839496\nmodal-backdrop: #657b83\nmodal-background: #002b36\nmodal-border: #586e75\nmodal-footer-background: #073642\nmodal-footer-border: #586e75\nmodal-header-border: #586e75\nmuted-foreground: #93a1a1\nnotification-background: #002b36\nnotification-border: #586e75\npage-background: #073642\npre-background: inherit\npre-border: #657b83\nprimary: #859900\nselect-tag-background: #002b36\nselect-tag-foreground: #839496\nsidebar-button-foreground: #93a1a1\nsidebar-controls-foreground: #93a1a1\nsidebar-controls-foreground-hover: #eee8d5\nsidebar-foreground: #93a1a1\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: #839496\nsidebar-muted-foreground-hover: #93a1a1\nsidebar-tab-background: #002b36\nsidebar-tab-background-selected: #073642\nsidebar-tab-border: #073642\nsidebar-tab-border-selected: #839496\nsidebar-tab-divider: #002b36\nsidebar-tab-foreground: #657b83\nsidebar-tab-foreground-selected: #93a1a1\nsidebar-tiddler-link-foreground: #2aa198\nsidebar-tiddler-link-foreground-hover: #eee8d5\nsite-title-foreground: #d33682\nstatic-alert-foreground: #93a1a1\ntab-background: #073642\ntab-background-selected: #002b36\ntab-border: #586e75\ntab-border-selected: #93a1a1\ntab-divider: #93a1a1\ntab-foreground: #839496\ntab-foreground-selected: #93a1a1\ntable-border: #586e75\ntable-footer-background: #073642\ntable-header-background: #073642\ntag-background: #b58900\ntag-foreground: #002b36\ntiddler-background: #002b36\ntiddler-border: #586e75\ntiddler-controls-foreground: inherit\ntiddler-controls-foreground-hover: #d33682\ntiddler-controls-foreground-selected: #2aa198\ntiddler-editor-background: #002b36\ntiddler-editor-border: #073642\ntiddler-editor-border-image: #002b36\ntiddler-editor-fields-even: #002b36\ntiddler-editor-fields-odd: #073642\ntiddler-info-background: #073642\ntiddler-info-border: #657b83\ntiddler-info-tab-background: #002b36\ntiddler-link-background: #002b36\ntiddler-link-foreground: #2aa198\ntiddler-subtitle-foreground: #839496\ntiddler-title-foreground: #d33682\ntoolbar-cancel-button: #839496\ntoolbar-close-button: #839496\ntoolbar-delete-button: #dc322f\ntoolbar-done-button: #839496\ntoolbar-edit-button: #839496\ntoolbar-info-button: #839496\ntoolbar-new-button: #839496\ntoolbar-options-button: #839496\ntoolbar-save-button: inherit\nuntagged-background: #586e75\nvery-muted-foreground: #586e75\n"
},
"$:/palettes/SolarizedLight": {
"title": "$:/palettes/SolarizedLight",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Precision colors for machines and people",
"license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
"name": "SolarizedLight",
"color-scheme": "light",
"text": "alert-background: #eee8d5\nalert-border: #586e75\nalert-highlight: #d33682\nalert-muted-foreground: #d33682\nbackground: #eee8d5\nblockquote-bar: #d33682\nbutton-background: #eee8d5\nbutton-border: #93a1a1\nbutton-foreground: #586e75\ncode-background: #eee8d5\ncode-border: #93a1a1\ncode-foreground: #586e75\ndirty-indicator: inherit\ndownload-background: #859900\ndownload-foreground: #eee8d5\ndragger-background: #eee8d5\ndragger-foreground: #657b83\ndropdown-background: #eee8d5\ndropdown-border: #586e75\ndropdown-tab-background: #fdf6e3\ndropdown-tab-background-selected: #eee8d5\ndropzone-background: #859900\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: #268bd2\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #268bd2\nforeground: #657b83\nmessage-background: #fdf6e3\nmessage-border: #93a1a1\nmessage-foreground: #657b83\nmodal-backdrop: #839496\nmodal-background: #fdf6e3\nmodal-border: #93a1a1\nmodal-footer-background: #eee8d5\nmodal-footer-border: #93a1a1\nmodal-header-border: #93a1a1\nmuted-foreground: #586e75\nnotification-background: #fdf6e3\nnotification-border: #93a1a1\npage-background: #eee8d5\npre-background: #eee8d5\npre-border: #839496\nprimary: #859900\nselect-tag-background: #fdf6e3\nselect-tag-foreground: #657b83\nsidebar-button-foreground: #586e75\nsidebar-controls-foreground: #586e75\nsidebar-controls-foreground-hover: #d33682\nsidebar-foreground: #586e75\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: #657b83\nsidebar-muted-foreground-hover: #586e75\nsidebar-tab-background: #fdf6e3\nsidebar-tab-background-selected: #eee8d5\nsidebar-tab-border: #eee8d5\nsidebar-tab-border-selected: #657b83\nsidebar-tab-divider: #fdf6e3\nsidebar-tab-foreground: #839496\nsidebar-tab-foreground-selected: #586e75\nsidebar-tiddler-link-foreground: #2aa198\nsidebar-tiddler-link-foreground-hover: #002b36\nsite-title-foreground: #d33682\nstatic-alert-foreground: #586e75\ntab-background: #eee8d5\ntab-background-selected: #fdf6e3\ntab-border: #93a1a1\ntab-border-selected: #586e75\ntab-divider: #586e75\ntab-foreground: #657b83\ntab-foreground-selected: #586e75\ntable-border: #93a1a1\ntable-footer-background: #eee8d5\ntable-header-background: #eee8d5\ntag-background: #b58900\ntag-foreground: #fdf6e3\ntiddler-background: #fdf6e3\ntiddler-border: #93a1a1\ntiddler-controls-foreground: inherit\ntiddler-controls-foreground-hover: #d33682\ntiddler-controls-foreground-selected: #2aa198\ntiddler-editor-background: #fdf6e3\ntiddler-editor-border: #eee8d5\ntiddler-editor-border-image: #fdf6e3\ntiddler-editor-fields-even: #fdf6e3\ntiddler-editor-fields-odd: #eee8d5\ntiddler-info-background: #eee8d5\ntiddler-info-border: #839496\ntiddler-info-tab-background: #fdf6e3\ntiddler-link-background: #fdf6e3\ntiddler-link-foreground: #2aa198\ntiddler-subtitle-foreground: #657b83\ntiddler-title-foreground: #d33682\ntoolbar-cancel-button: #657b83\ntoolbar-close-button: #657b83\ntoolbar-delete-button: #dc322f\ntoolbar-done-button: #657b83\ntoolbar-edit-button: #657b83\ntoolbar-info-button: #657b83\ntoolbar-new-button: #657b83\ntoolbar-options-button: #657b83\ntoolbar-save-button: inherit\nuntagged-background: #586e75\nvery-muted-foreground: #93a1a1\n"
},
"$:/palettes/SpartanDay": {
"title": "$:/palettes/SpartanDay",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Cold, spartan day colors",
"name": "Spartan Day",
"color-scheme": "light",
"text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #FAFAFA\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: #ececec\ncode-border: #ececec\ncode-foreground: \ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #FFFFFF\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #F5F5F5\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: \nexternal-link-foreground: \nforeground: rgba(0, 0, 0, 0.87)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(0, 0, 0, 0.54)\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour very-muted-foreground>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(0, 0, 0, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #f4f4f4\npre-background: #ececec\npre-border: #ececec\nprimary: #3949ab\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #aeaeae\nsidebar-controls-foreground: #c6c6c6\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground-hover: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground: rgba(0, 0, 0, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(0, 0, 0, 0.87)\nsidebar-tab-foreground: rgba(0, 0, 0, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(0, 0, 0, 0.87)\nsidebar-tiddler-link-foreground: rgba(0, 0, 0, 0.54)\nsite-title-foreground: rgba(0, 0, 0, 0.87)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(0, 0, 0, 0.87)\ntab-foreground: rgba(0, 0, 0, 0.54)\ntable-border: #d8d8d8\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: #f9f9f9\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: #e8e7e7\ntiddler-editor-fields-even: rgba(0, 0, 0, 0.1)\ntiddler-editor-fields-odd: rgba(0, 0, 0, 0.04)\ntiddler-info-background: #F5F5F5\ntiddler-info-border: #F5F5F5\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #000000\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(0, 0, 0, 0.12)\n"
},
"$:/palettes/SpartanNight": {
"title": "$:/palettes/SpartanNight",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Dark spartan colors",
"name": "Spartan Night",
"color-scheme": "dark",
"text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #303030\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #424242\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #050505\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #7c318c\nexternal-link-foreground: #9e3eb3\nforeground: rgba(255, 255, 255, 0.7)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(255, 255, 255, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #212121\npre-background: #2a2a2a\npre-border: transparent\nprimary: #5656f3\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #494949\nsidebar-controls-foreground: #5d5d5d\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: rgba(255, 255, 255, 0.7)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #3a3a3a\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: rgb(55,55,55)\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #454545\ntiddler-info-border: #454545\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(255, 255, 255, 0.12)\n"
},
"$:/palettes/Twilight": {
"title": "$:/palettes/Twilight",
"tags": "$:/tags/Palette",
"author": "Thomas Elmiger",
"type": "application/x-tiddler-dictionary",
"name": "Twilight",
"description": "Delightful, soft darkness.",
"color-scheme": "dark",
"text": "alert-background: rgb(255, 255, 102)\nalert-border: rgb(232, 232, 125)\nalert-highlight: rgb(255, 51, 51)\nalert-muted-foreground: rgb(224, 82, 82)\nbackground: rgb(38, 38, 38)\nblockquote-bar: rgba(240, 196, 117, 0.7)\nbutton-background: rgb(63, 63, 63)\nbutton-border: rgb(127, 127, 127)\nbutton-foreground: rgb(179, 179, 179)\ncode-background: rgba(0,0,0,0.03)\ncode-border: rgba(0,0,0,0.08)\ncode-foreground: rgb(255, 94, 94)\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: rgb(255, 94, 94)\ndownload-background: #19a974\ndownload-foreground: rgb(38, 38, 38)\ndragger-background: rgb(179, 179, 179)\ndragger-foreground: rgb(38, 38, 38)\ndropdown-background: rgb(38, 38, 38)\ndropdown-border: rgb(255, 255, 255)\ndropdown-tab-background: rgba(0,0,0,.1)\ndropdown-tab-background-selected: rgba(255,255,255,1)\ndropzone-background: #9eebcf\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: rgb(179, 179, 255)\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: rgb(153, 153, 255)\nforeground: rgb(179, 179, 179)\nmessage-background: <<colour tag-foreground>>\nmessage-border: #96ccff\nmessage-foreground: <<colour tag-background>>\nmodal-backdrop: rgb(179, 179, 179)\nmodal-background: rgb(38, 38, 38)\nmodal-border: rgba(0,0,0,.5)\nmodal-footer-background: #f4f4f4\nmodal-footer-border: rgba(0,0,0,.1)\nmodal-header-border: rgba(0,0,0,.2)\nmuted-foreground: rgb(255, 255, 255)\nnotification-background: <<colour tag-foreground>>\nnotification-border: <<colour tag-background>>\npage-background: rgb(26, 26, 26)\npre-background: rgb(25, 25, 25)\npre-border: rgba(0,0,0,.2)\nprimary: rgb(255, 201, 102)\nselect-tag-background: \nselect-tag-foreground: \nsidebar-button-foreground: rgb(179, 179, 179)\nsidebar-controls-foreground: rgb(153, 153, 153)\nsidebar-controls-foreground-hover: <<colour tiddler-controls-foreground-hover>>\nsidebar-foreground: rgb(141, 141, 141)\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: rgba(0, 0, 0, 0.5)\nsidebar-muted-foreground-hover: rgb(141, 141, 141)\nsidebar-tab-background: rgba(141, 141, 141, 0.2)\nsidebar-tab-background-selected: rgb(26, 26, 26)\nsidebar-tab-border: rgb(127, 127, 127)\nsidebar-tab-border-selected: rgb(127, 127, 127)\nsidebar-tab-divider: rgb(127, 127, 127)\nsidebar-tab-foreground: rgb(179, 179, 179)\nsidebar-tab-foreground-selected: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground-hover: rgb(115, 115, 115)\nsite-title-foreground: rgb(255, 201, 102)\nstatic-alert-foreground: rgba(0,0,0,.3)\ntab-background: rgba(0,0,0,0.125)\ntab-background-selected: rgb(38, 38, 38)\ntab-border: rgb(255, 201, 102)\ntab-border-selected: rgb(255, 201, 102)\ntab-divider: rgb(255, 201, 102)\ntab-foreground: rgb(179, 179, 179)\ntab-foreground-selected: rgb(179, 179, 179)\ntable-border: rgba(255,255,255,.3)\ntable-footer-background: rgba(0,0,0,.4)\ntable-header-background: rgba(0,0,0,.1)\ntag-background: rgb(255, 201, 102)\ntag-foreground: rgb(25, 25, 25)\ntiddler-background: rgb(38, 38, 38)\ntiddler-border: rgba(240, 196, 117, 0.7)\ntiddler-controls-foreground: rgb(128, 128, 128)\ntiddler-controls-foreground-hover: rgba(255, 255, 255, 0.8)\ntiddler-controls-foreground-selected: rgba(255, 255, 255, 0.9)\ntiddler-editor-background: rgb(33, 33, 33)\ntiddler-editor-border: rgb(63, 63, 63)\ntiddler-editor-border-image: rgb(25, 25, 25)\ntiddler-editor-fields-even: rgb(33, 33, 33)\ntiddler-editor-fields-odd: rgb(28, 28, 28)\ntiddler-info-background: rgb(43, 43, 43)\ntiddler-info-border: rgb(25, 25, 25)\ntiddler-info-tab-background: rgb(43, 43, 43)\ntiddler-link-background: rgb(38, 38, 38)\ntiddler-link-foreground: rgb(204, 204, 255)\ntiddler-subtitle-foreground: rgb(255, 255, 255)\ntiddler-title-foreground: rgb(255, 192, 76)\ntoolbar-cancel-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-done-button: \ntoolbar-edit-button: \ntoolbar-info-button: \ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \nuntagged-background: rgb(255, 255, 255)\nvery-muted-foreground: rgba(240, 196, 117, 0.7)\n"
},
"$:/palettes/Vanilla": {
"title": "$:/palettes/Vanilla",
"name": "Vanilla",
"description": "Pale and unobtrusive",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"color-scheme": "light",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselection-background:\nselection-foreground:\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\nwikilist-background: #e5e5e5\nwikilist-item: #fff\nwikilist-info: #000\nwikilist-title: #666\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: #aaa\nwikilist-button-open: #4fb82b\nwikilist-button-open-hover: green\nwikilist-button-reveal: #5778d8\nwikilist-button-reveal-hover: blue\nwikilist-button-remove: #d85778\nwikilist-button-remove-hover: red\nwikilist-toolbar-background: #d3d3d3\nwikilist-toolbar-foreground: #888\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\nwikilist-button-background: #acacac\nwikilist-button-foreground: #000\n"
},
"$:/core/readme": {
"title": "$:/core/readme",
"text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
},
"$:/library/sjcl.js/license": {
"title": "$:/library/sjcl.js/license",
"type": "text/plain",
"text": "SJCL is open. You can use, modify and redistribute it under a BSD\nlicense or under the GNU GPL, version 2.0.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/BSD-2-Clause\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/GPL-2.0\n\nThe Stanford Javascript Crypto Library (hosted here on GitHub) is a\nproject by the Stanford Computer Security Lab to build a secure,\npowerful, fast, small, easy-to-use, cross-browser library for\ncryptography in Javascript.\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
},
"$:/core/templates/alltiddlers.template.html": {
"title": "$:/core/templates/alltiddlers.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
},
"$:/core/templates/canonical-uri-external-image": {
"title": "$:/core/templates/canonical-uri-external-image",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-raw": {
"title": "$:/core/templates/canonical-uri-external-raw",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external raw files that are stored in the same directory\n\n-->\n<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-text": {
"title": "$:/core/templates/canonical-uri-external-text",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
},
"$:/core/templates/css-tiddler": {
"title": "$:/core/templates/css-tiddler",
"text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
},
"$:/core/templates/exporters/CsvFile": {
"title": "$:/core/templates/exporters/CsvFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/CsvFile}}",
"extension": ".csv",
"text": "<$macrocall $name=\"csvtiddlers\" filter=<<exportFilter>> format=\"quoted-comma-sep\" $output=\"text/raw\"/>\n"
},
"$:/core/templates/exporters/JsonFile": {
"title": "$:/core/templates/exporters/JsonFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/JsonFile}}",
"extension": ".json",
"text": "<$macrocall $name=\"jsontiddlers\" filter=<<exportFilter>> $output=\"text/raw\"/>\n"
},
"$:/core/templates/exporters/StaticRiver": {
"title": "$:/core/templates/exporters/StaticRiver",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/StaticRiver}}",
"extension": ".html",
"text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river tc-static-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
},
"$:/core/templates/exporters/StaticRiver/Content": {
"title": "$:/core/templates/exporters/StaticRiver/Content",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>\n"
},
"$:/core/templates/exporters/TidFile": {
"title": "$:/core/templates/exporters/TidFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/TidFile}}",
"extension": ".tid",
"condition": "[<count>compare:lte[1]]",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>"
},
"$:/core/save/all-external-js": {
"title": "$:/core/save/all-external-js",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5-external-js.html}}\n"
},
"$:/core/templates/tiddlywiki5.js": {
"title": "$:/core/templates/tiddlywiki5.js",
"text": "\\rules only filteredtranscludeinline transcludeinline codeinline\n\n/*\n{{ $:/core/copyright.txt ||$:/core/templates/plain-text-tiddler}}\n`*/\n`<!--~~ Library modules ~~-->\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/plain-text-tiddler}}}\n<!--~~ Boot prefix ~~-->\n{{ $:/boot/bootprefix.js ||$:/core/templates/plain-text-tiddler}}\n<!--~~ Core plugin ~~-->\n{{$:/core/templates/tiddlywiki5.js/tiddlers}}\n<!--~~ Boot kernel ~~-->\n{{ $:/boot/boot.js ||$:/core/templates/plain-text-tiddler}}\n"
},
"$:/core/templates/tiddlywiki5.js/tiddlers": {
"title": "$:/core/templates/tiddlywiki5.js/tiddlers",
"text": "`\n$tw.preloadTiddlerArray(`<$text text=<<jsontiddlers \"[[$:/core]]\">>/>`);\n`\n"
},
"$:/core/templates/tiddlywiki5-external-js.html": {
"title": "$:/core/templates/tiddlywiki5-external-js.html",
"text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Raw markup for the bottom of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}\n</body>\n<script src=\"%24%3A%2Fcore%2Ftemplates%2Ftiddlywiki5.js\" onerror=\"alert('Error: Cannot load tiddlywiki.js');\"></script>\n</html>\n"
},
"$:/core/templates/html-div-skinny-tiddler": {
"title": "$:/core/templates/html-div-skinny-tiddler",
"text": "<!--\n\nThis template is a variant of $:/core/templates/html-div-tiddler used for saving skinny tiddlers (with no text field)\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre></pre>\n</div>`\n"
},
"$:/core/templates/html-div-tiddler": {
"title": "$:/core/templates/html-div-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmltextencoded\" />`</pre>\n</div>`\n"
},
"$:/core/templates/html-tiddler": {
"title": "$:/core/templates/html-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
},
"$:/core/templates/javascript-tiddler": {
"title": "$:/core/templates/javascript-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
},
"$:/core/templates/json-tiddler": {
"title": "$:/core/templates/json-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw JSON\n\n--><$text text=<<jsontiddler>>/>"
},
"$:/core/templates/module-tiddler": {
"title": "$:/core/templates/module-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
},
"$:/core/templates/MOTW.html": {
"title": "$:/core/templates/MOTW.html",
"text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)https://tiddlywiki.com --> "
},
"$:/core/templates/plain-text-tiddler": {
"title": "$:/core/templates/plain-text-tiddler",
"text": "<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/raw-static-tiddler": {
"title": "$:/core/templates/raw-static-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as static HTML\n\n--><$view field=\"text\" format=\"plainwikified\" />"
},
"$:/core/save/all": {
"title": "$:/core/save/all",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/empty": {
"title": "$:/core/save/empty",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-all": {
"title": "$:/core/save/lazy-all",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[!is[system]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-images": {
"title": "$:/core/save/lazy-images",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[!is[system]is[image]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/templates/server/static.sidebar.wikitext": {
"title": "$:/core/templates/server/static.sidebar.wikitext",
"text": "\\whitespace trim\n<div class=\"tc-sidebar-scrollable\" style=\"overflow: auto;\">\n<div class=\"tc-sidebar-header\">\n<h1 class=\"tc-site-title\">\n<$transclude tiddler=\"$:/SiteTitle\"/>\n</h1>\n<div class=\"tc-site-subtitle\">\n<$transclude tiddler=\"$:/SiteSubtitle\"/>\n</div>\n<h2>\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$list filter={{$:/DefaultTiddlers}}>\n<div class=\"tc-menu-list-subitem\">\n<$link><$text text=<<currentTiddler>>/></$link>\n</div>\n</$list>\n</div>\n<!-- Currently disabled the recent list as it is unweildy when the responsive narrow view kicks in\n<h2>\n{{$:/language/SideBar/Recent/Caption}}\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n</div>\n</div>\n</div>\n-->\n"
},
"$:/core/templates/server/static.tiddler.html": {
"title": "$:/core/templates/server/static.tiddler.html",
"text": "\\whitespace trim\n\\define tv-wikilink-template() $uri_encoded$\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content={{$:/core/templates/version}} />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"%24%3A%2Fcore%2Ftemplates%2Fstatic.template.css\">\n<title><$view field=\"caption\" format=\"plainwikified\"><$view field=\"title\"/></$view>: <$view tiddler=\"$:/core/wiki/title\" format=\"plainwikified\"/></title>\n</head>\n<body class=\"tc-body\">\n<$transclude tiddler=\"$:/core/templates/server/static.sidebar.wikitext\" mode=\"inline\"/>\n<section class=\"tc-story-river\">\n<div class=\"tc-tiddler-frame\">\n<$transclude tiddler=\"$:/core/templates/server/static.tiddler.wikitext\" mode=\"inline\"/>\n</div>\n</section>\n</body>\n</html>"
},
"$:/core/templates/server/static.tiddler.wikitext": {
"title": "$:/core/templates/server/static.tiddler.wikitext",
"text": "\\whitespace trim\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<h2><$text text=<<currentTiddler>>/></h2>\n</div>\n</div>\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n<div class=\"tc-tags-wrapper\">\n<$list filter=\"[all[current]tags[]sort[title]]\">\n<a href={{{ [<currentTiddler>encodeuricomponent[]] }}}>\n<$macrocall $name=\"tag-pill\" tag=<<currentTiddler>>/>\n</a>\n</$list>\n</div>\n<div class=\"tc-tiddler-body\">\n<$transclude mode=\"block\"/>\n</div>\n"
},
"$:/core/templates/single.tiddler.window": {
"title": "$:/core/templates/single.tiddler.window",
"text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$vars\n\ttv-config-toolbar-icons={{$:/config/Toolbar/Icons}}\n\ttv-config-toolbar-text={{$:/config/Toolbar/Text}}\n\ttv-config-toolbar-class={{$:/config/Toolbar/ButtonClass}}\n\ttv-show-missing-links={{$:/config/MissingLinks}}\n\tstoryviewTitle={{$:/view}}\n\tlanguageTitle={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</div>\n\n</$vars>\n"
},
"$:/core/templates/split-recipe": {
"title": "$:/core/templates/split-recipe",
"text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
},
"$:/core/templates/static-tiddler": {
"title": "$:/core/templates/static-tiddler",
"text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
},
"$:/core/templates/static.area": {
"title": "$:/core/templates/static.area",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n<!-- ensure splash screen isn't shown when JS is disabled -->\n`<style>\n.tc-remove-when-wiki-loaded {display: none;}\n</style>`\n"
},
"$:/core/templates/static.content": {
"title": "$:/core/templates/static.content",
"text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
},
"$:/core/templates/static.template.css": {
"title": "$:/core/templates/static.template.css",
"text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
},
"$:/core/templates/static.template.html": {
"title": "$:/core/templates/static.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
},
"$:/core/templates/static.tiddler.html": {
"title": "$:/core/templates/static.tiddler.html",
"text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river tc-static-story-river\">\n`<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>`\n</section>\n</body>\n</html>\n`\n"
},
"$:/core/templates/store.area.template.html": {
"title": "$:/core/templates/store.area.template.html",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n<$list filter={{{ [<skinnySaveTiddlerFilter>] }}} template=\"$:/core/templates/html-div-skinny-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
},
"$:/core/templates/tid-tiddler": {
"title": "$:/core/templates/tid-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/tiddler-metadata": {
"title": "$:/core/templates/tiddler-metadata",
"text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
},
"$:/core/templates/tiddlywiki5.html": {
"title": "$:/core/templates/tiddlywiki5.html",
"text": "<$set name=\"saveTiddlerAndShadowsFilter\" filter=\"[subfilter<saveTiddlerFilter>] [subfilter<saveTiddlerFilter>plugintiddlers[]]\">\n`<!doctype html>\n`{{$:/core/templates/MOTW.html}}`<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n`{{{ [<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}`\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"`{{$:/core/copyright.txt}}`\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>`{{$:/core/wiki/title}}`</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}`\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}`\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n`{{$:/core/templates/static.area}}`\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n`{{$:/core/templates/store.area.template.html}}`\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n`{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}`\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n`{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n`{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Raw markup for the bottom of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}`\n</body>\n</html>`\n"
},
"$:/core/templates/version": {
"title": "$:/core/templates/version",
"text": "<<version>>"
},
"$:/core/templates/wikified-tiddler": {
"title": "$:/core/templates/wikified-tiddler",
"text": "<$transclude />"
},
"$:/core/ui/AboveStory/tw2-plugin-check": {
"title": "$:/core/ui/AboveStory/tw2-plugin-check",
"tags": "$:/tags/AboveStory",
"text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/Actions/new-image": {
"title": "$:/core/ui/Actions/new-image",
"tags": "$:/tags/Actions",
"description": "create a new image tiddler",
"text": "\\define get-type()\nimage/$(imageType)$\n\\end\n\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars imageType={{$:/config/NewImageType}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=<<get-type>> tags=<<get-tags>>/>\n</$vars>\n"
},
"$:/core/ui/Actions/new-journal": {
"title": "$:/core/ui/Actions/new-journal",
"tags": "$:/tags/Actions",
"description": "create a new journal tiddler",
"text": "\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$reveal type=\"nomatch\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<get-tags>> text={{{ [<journalTitle>get[]] }}}/>\n</$reveal>\n<$reveal type=\"match\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<get-tags>> text=<<journalText>>/>\n</$reveal>\n</$wikify>\n</$vars>\n"
},
"$:/core/ui/Actions/new-tiddler": {
"title": "$:/core/ui/Actions/new-tiddler",
"tags": "$:/tags/Actions",
"description": "create a new empty tiddler",
"text": "\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars textFieldTags={{$:/config/NewTiddler/Tags}} tagsFieldTags={{$:/config/NewTiddler/Tags!!tags}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<get-tags>>/>\n</$vars>\n"
},
"$:/core/ui/AdvancedSearch/Filter": {
"title": "$:/core/ui/AdvancedSearch/Filter",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Filter/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch/input}!match{$:/temp/advancedsearch}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\" \n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\" \n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/temp/advancedsearch]]\" firstSearchFilterField=\"text\" \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> \n\t\tinputCancelActions=<<cancel-search-actions>>/>\n</$keyboard>\n</$keyboard>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]\"><$transclude/></$list>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}}>\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</div>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<<qualify \"$:/state/filterDeleteDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n</$button>\n</$reveal>\n\n<$reveal state=<<qualify \"$:/state/filterDeleteDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<div class=\"tc-dropdown-item-plain\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <<resultCount>> tiddler(s)?\n</$set>\n</div>\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n</$button>\n</div>\n</div>\n</div>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text=<<navigateTo>>/><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text=<<navigateTo>>/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/><$action-sendmessage $message=\"tm-focus-selector\" $param='.tc-advanced-search input' />\"\"\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</div>\n</$linkcatcher>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Shadows": {
"title": "$:/core/ui/AdvancedSearch/Shadows",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Shadows/Caption}}",
"first-search-filter": "[all[shadows]search<userInput>sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]",
"text": "\\define lingo-base() $:/language/Search/\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\"\n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/core/ui/AdvancedSearch/Shadows]]\"\n\t\tinputCancelActions=<<cancel-search-actions>> inputAcceptActions=<<input-accept-actions>> \n\t\tinputAcceptVariantActions=<<input-accept-variant-actions>> filterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]\">\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Standard": {
"title": "$:/core/ui/AdvancedSearch/Standard",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Standard/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define next-search-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/advancedsearch\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/standard/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$keyboard key=\"shift-alt-Right\" actions=<<next-search-tab>>>\n<$keyboard key=\"shift-alt-Left\" actions=<<next-search-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\"\n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\"\n\t\tfilterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$vars userInput={{{ [[$:/temp/advancedsearch]get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} searchListState=\"$:/temp/advancedsearch/selected-item\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/standard/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab/search-results/advancedsearch\" />\n</$list>\n</$vars>\n</$list>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/System": {
"title": "$:/core/ui/AdvancedSearch/System",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/System/Caption}}",
"first-search-filter": "[is[system]search<userInput>sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]",
"text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\",stateTitle,tag,defaultState,currentTabTiddler) <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\"\n\t\ttype=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/core/ui/AdvancedSearch/System]]\"\n\t\tinputCancelActions=<<cancel-search-actions>> inputAcceptActions=<<input-accept-actions>> \n\t\tinputAcceptVariantActions=<<input-accept-variant-actions>> filterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]\">\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/AdvancedSearch": {
"title": "$:/AdvancedSearch",
"icon": "$:/core/images/advanced-search-button",
"color": "#bbb",
"text": "<div class=\"tc-advanced-search\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" default=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab--1498284803\"/>\n</div>\n"
},
"$:/core/ui/AlertTemplate": {
"title": "$:/core/ui/AlertTemplate",
"text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/cancel-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$wikify name=\"format\" text=<<lingo Tiddler/DateFormat>>>\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=<<format>>/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">({{$:/language/Count}}: <$view field=\"count\"/>)</span></$reveal>\n</$wikify>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
},
"$:/core/ui/BinaryWarning": {
"title": "$:/core/ui/BinaryWarning",
"text": "\\define lingo-base() $:/language/BinaryWarning/\n<<lingo Prompt>>\n"
},
"$:/core/ui/Components/plugin-info": {
"title": "$:/core/ui/Components/plugin-info",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage,default-popup-state)\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1>\n''<$text text={{{ [<currentTiddler>get[name]] ~[<currentTiddler>split[/]last[1]] }}}/>'': <$view field=\"description\"><$view field=\"title\"/></$view> $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-info(type,default-popup-state)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>> default=\"\"\"$default-popup-state$\"\"\">\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$set name=\"tabsList\" filter=\"[<currentTiddler>list[]] contents\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList=<<tabsList>> default={{{ [enlist<tabsList>] }}} template=\"$:/core/ui/PluginInfo\"/>\n</$set>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n<$macrocall $name=\"plugin-info\" type=<<plugin-type>> default-popup-state=<<default-popup-state>>/>\n"
},
"$:/core/ui/Components/tag-link": {
"title": "$:/core/ui/Components/tag-link",
"text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>"
},
"$:/core/ui/ControlPanel/Advanced": {
"title": "$:/core/ui/ControlPanel/Advanced",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
"text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/TiddlerFields\" explicitState=\"$:/state/tab--959111941\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Appearance": {
"title": "$:/core/ui/ControlPanel/Appearance",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
"text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Theme\" explicitState=\"$:/state/tab--1963855381\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Basics": {
"title": "$:/core/ui/ControlPanel/Basics",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Basics/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-advanced-search input\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/language/DefaultNewTiddlerTitle\"><<lingo NewTiddler/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/language/DefaultNewTiddlerTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Text\"><<lingo NewJournal/Text/Prompt>></$link> |<$edit tiddler=\"$:/config/NewJournal/Text\" tag=\"textarea\" class=\"tc-edit-texteditor\" default=\"\"/> |\n|<$link to=\"$:/config/NewTiddler/Tags\"><<lingo NewTiddler/Tags/Prompt>></$link> |<$vars currentTiddler=\"$:/config/NewTiddler/Tags\" tagField=\"text\">{{||$:/core/ui/EditTemplate/tags}}<$list filter=\"[<currentTiddler>tags[]] +[limit[1]]\" variable=\"ignore\"><$button tooltip={{$:/language/ControlPanel/Basics/RemoveTags/Hint}}><<lingo RemoveTags>><$action-listops $tiddler=<<currentTiddler>> $field=\"text\" $subfilter={{{ [<currentTiddler>get[tags]] }}}/><$action-setfield $tiddler=<<currentTiddler>> tags=\"\"/></$button></$list></$vars> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$vars currentTiddler=\"$:/config/NewJournal/Tags\" tagField=\"text\">{{||$:/core/ui/EditTemplate/tags}}<$list filter=\"[<currentTiddler>tags[]] +[limit[1]]\" variable=\"ignore\"><$button tooltip={{$:/language/ControlPanel/Basics/RemoveTags/Hint}}><<lingo RemoveTags>><$action-listops $tiddler=<<currentTiddler>> $field=\"text\" $subfilter={{{ [<currentTiddler>get[tags]] }}}/><$action-setfield $tiddler=<<currentTiddler>> tags=\"\"/></$button></$list></$vars> |\n|<$link to=\"$:/config/AutoFocus\"><<lingo AutoFocus/Prompt>></$link> |{{$:/snippets/minifocusswitcher}} |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
},
"$:/core/ui/ControlPanel/EditorTypes": {
"title": "$:/core/ui/ControlPanel/EditorTypes",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/Info": {
"title": "$:/core/ui/ControlPanel/Info",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Info/Caption}}",
"text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Basics\" explicitState=\"$:/state/tab--2112689675\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/KeyboardShortcuts": {
"title": "$:/core/ui/ControlPanel/KeyboardShortcuts",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n<div class=\"tc-dropdown-item-plain\">\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} focus=\"true\" style=\"width:auto;\"/> <$button>\n<<lingo Add/Caption>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n</$button>\n</div>\n\\end\n\n\\define shortcut-list-item(caption)\n<td>\n</td>\n<td style=\"text-align:right;font-size:0.7em;\">\n<<lingo Platform/$caption$>>\n</td>\n<td>\n<div style=\"position:relative;\">\n<$button popup=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n</$button>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\n<$reveal state=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\">\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n<div class=\"tc-dropdown-item-plain\">\n//<<lingo NoShortcuts/Caption>>//\n</div>\n\"\"\">\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint}}>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove<shortcut>]\"\n/>\n<small>{{$:/core/images/close-button}}</small>\n</$button>\n<kbd>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<<shortcut>>/>\n</kbd>\n</div>\n</$list>\n<hr/>\n<$macrocall $name=\"new-shortcut\" title=<<qualify \"$:/state/new-shortcut/$(shortcutTitle)$\">>/>\n</div>\n</div>\n</$reveal>\n</div>\n</td>\n\\end\n\n\\define shortcut-list(caption,prefix)\n<tr>\n<$list filter=\"[[$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<<shortcut-list-item \"$caption$\">>\n</$list>\n</tr>\n\\end\n\n\\define shortcut-editor()\n<<shortcut-list \"All\" \"$:/config/shortcuts/\">>\n<<shortcut-list \"Mac\" \"$:/config/shortcuts-mac/\">>\n<<shortcut-list \"NonMac\" \"$:/config/shortcuts-not-mac/\">>\n<<shortcut-list \"Linux\" \"$:/config/shortcuts-linux/\">>\n<<shortcut-list \"NonLinux\" \"$:/config/shortcuts-not-linux/\">>\n<<shortcut-list \"Windows\" \"$:/config/shortcuts-windows/\">>\n<<shortcut-list \"NonWindows\" \"$:/config/shortcuts-not-windows/\">>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\\end\n\n\\define shortcut-item-inner()\n<tr>\n<td>\n<$reveal type=\"nomatch\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n''<$text text=<<shortcutName>>/>''\n</td>\n<td>\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n</td>\n<td>\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<<shortcut-preview>>\n</$list>\n</td>\n</tr>\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[<dropdownState>match[open]]\" variable=\"listItem\">\n<<shortcut-editor>>\n</$list>\n</$set>\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<<qualify \"$:/state/dropdown/keyboardshortcut/$(shortcutName)$\">>>\n<<shortcut-item-inner>>\n</$set>\n\\end\n\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<<shortcut-item>>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/LoadedModules": {
"title": "$:/core/ui/ControlPanel/LoadedModules",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
},
"$:/core/ui/ControlPanel/Modals/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
"subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
"text": "\\define install-plugin-actions()\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$set name=\"url\" value={{!!url}}>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[name]]\" variable=\"dependency\">\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url=<<url>> title=<<dependency>>/>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define install-plugin-button()\n<div>\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$set name=\"reinstall-type\" value={{{ [<libraryVersion>compare:version:eq<installedVersion>then[tc-reinstall]] [<libraryVersion>compare:version:gt<installedVersion>then[tc-reinstall-upgrade]] [<libraryVersion>compare:version:lt<installedVersion>then[tc-reinstall-downgrade]] }}}>\n<$button actions=<<install-plugin-actions>> class={{{ [<assetInfo>get[original-title]has[version]then<reinstall-type>] tc-btn-invisible tc-install-plugin +[join[ ]] }}}>\n{{$:/core/images/download-button}}\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\">\n<$list filter=\"[<libraryVersion>compare:version:gt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[<libraryVersion>compare:version:lt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\">\n{{$:/language/ControlPanel/Plugins/Downgrade/Caption}}\n</$list>\n\"\"\">\n{{$:/language/ControlPanel/Plugins/Update/Caption}}\n</$list>\n</$list>\n</$button>\n<div>\n</div>\n<$reveal stateTitle=<<assetInfo>> stateField=\"requires-reload\" type=\"match\" text=\"yes\">{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}</$reveal>\n</$set>\n</$set>\n</$set>\n</div>\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<div class=\"tc-plugin-info\">\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$list filter=\"[<assetInfo>has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n<img src={{$(assetInfo)$!!icon}}/>\n</$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1><strong><$text text={{{ [<assetInfo>get[name]] ~[<assetInfo>get[original-title]split[/]last[1]] }}}/></strong>: <$view tiddler=<<assetInfo>> field=\"description\"/></h1>\n<h2><$view tiddler=<<assetInfo>> field=\"original-title\"/></h2>\n<div><em><$view tiddler=<<assetInfo>> field=\"version\"/></em></div>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\"><div><em>{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}</em></div></$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-buttons\">\n<<install-plugin-button>>\n</div>\n</div>\n<$set name=\"original-title\" value={{{ [<assetInfo>get[original-title]] }}}>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]] ~[<assetInfo>get[original-title]!is[tiddler]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]!is[tiddler]]\">\n{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\n</$list>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]]\" variable=\"ignore\">\n<div>\n{{$:/language/ControlPanel/Plugins/AlsoRequires}}\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[name]]\" variable=\"dependency\">\n<$text text=<<dependency>>/>\n</$list>\n</div>\n</$list>\n</$set>\n</div>\n</$list>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-sub-plugins\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>sort[name]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\n</$list>\n</div>\n</$list>\n</div>\n</$reveal>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<$reveal type=\"nomatch\" text=\"yes\" state=<<popup-state>> tag=\"div\" class=\"tc-plugin-info-sub-plugin-indicator\">\n<$wikify name=\"count\" text=\"\"\"<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>]\"/>\"\"\">\n<$button class=\"tc-btn-invisible\" set=<<popup-state>> setTo=\"yes\">\n{{$:/language/ControlPanel/Plugins/SubPluginPrompt}}\n</$button>\n</$wikify>\n</$reveal>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\n<$list filter=\"[<currentTiddler>get[enabled]else[yes]match[yes]]\" variable=\"ignore\">\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n</$list>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search:author,description,original-title,readme,title{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[name]]\" variable=\"assetInfo\">\n<$list filter=\"[[$:/temp/RemoteAssetSearch/$(currentTiddler)$]has[text]] ~[<assetInfo>!has[parent-plugin]]\" variable=\"ignore\"><!-- Hide sub-plugins if we're not searching -->\n<<display-plugin-info \"$type$\">>\n</$list>\n</$list>\n</div>\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<<load-plugin-library-button>>>\n\n<$set name=\"transclusion\" value=<<connectionTiddler>>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Add/Updates]] [[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Add/Plugins\">>\n\n</$set>\n\n</$list>\n\\end\n\n\\define close-library-button()\n<$reveal type='nomatch' state='$:/temp/ServerConnection/$(PluginLibraryURL)$' text=''>\n<$button class='tc-btn-big-green'>\n<$action-sendmessage $message=\"tm-unload-plugin-library\" url={{!!url}}/>\n{{$:/core/images/chevron-left}} {{$:/language/ControlPanel/Plugins/ClosePluginLibrary}}\n<$action-deletetiddler $filter=\"[prefix[$:/temp/ServerConnection/$(PluginLibraryURL)$]][prefix[$:/temp/RemoteAssetInfo/$(PluginLibraryURL)$]]\"/>\n</$button>\n</$reveal>\n\\end\n\n\\define plugin-library-listing()\n<div class=\"tc-tab-set\">\n<$set name=\"defaultTab\" value={{{ [all[tiddlers+shadows]tag[$:/tags/PluginLibrary]] }}}>\n<div class=\"tc-tab-buttons\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$button set=<<qualify \"$:/state/addplugins/tab\">> setTo=<<currentTiddler>> default=<<defaultTab>> selectedClass=\"tc-tab-selected\">\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude field=\"caption\"/>\n</$set>\n</$button>\n</$list>\n</div>\n<div class=\"tc-tab-divider\"/>\n<div class=\"tc-tab-content\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$reveal type=\"match\" state=<<qualify \"$:/state/addplugins/tab\">> text=<<currentTiddler>> default=<<defaultTab>>>\n<h2><$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link></h2>\n//<$view field=\"url\"/>//\n<$transclude mode=\"block\"/>\n<$set name=PluginLibraryURL value={{!!url}}>\n<<close-library-button>>\n</$set>\n<<display-server-connection>>\n</$reveal>\n</$list>\n</div>\n</$set>\n</div>\n\\end\n\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<div>\n<<plugin-library-listing>>\n</div>\n"
},
"$:/core/ui/ControlPanel/Palette": {
"title": "$:/core/ui/ControlPanel/Palette",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Palette/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/PaletteManager}}\n\n</$reveal>\n\n"
},
"$:/core/ui/ControlPanel/Parsing": {
"title": "$:/core/ui/ControlPanel/Parsing",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define toggle(Type)\n<$checkbox\ntiddler=\"\"\"$:/config/WikiParserRules/$Type$/$(rule)$\"\"\"\nfield=\"text\"\nchecked=\"enable\"\nunchecked=\"disable\"\ndefault=\"enable\">\n<<rule>>\n</$checkbox>\n\\end\n\n\\define rules(type,Type)\n<$list filter=\"[wikiparserrules[$type$]]\" variable=\"rule\">\n<dd><<toggle $Type$>></dd>\n</$list>\n\\end\n\n<<lingo Hint>>\n\n<dl>\n<dt><<lingo Pragma/Caption>></dt>\n<<rules pragma Pragma>>\n<dt><<lingo Inline/Caption>></dt>\n<<rules inline Inline>>\n<dt><<lingo Block/Caption>></dt>\n<<rules block Block>>\n</dl>"
},
"$:/core/ui/ControlPanel/Plugins/Add/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)",
"text": "<<display-server-assets language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)",
"text": "<<display-server-assets plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)",
"text": "<<display-server-assets theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Updates": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Updates",
"caption": "<$importvariables filter=\"$:/core/ui/ControlPanel/Plugins/Add/Updates\">{{$:/language/ControlPanel/Plugins/Updates/Caption}} (<<update-count>>)</$importvariables>",
"text": "\\define each-updateable-plugin(body)\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}sort[title]]\" variable=\"assetInfo\">\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$list filter=\"[<assetInfo>get[original-title]has[version]!version<libraryVersion>]\" variable=\"ignore\">\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$list filter=\"[<installedversion>!match<libraryVersion>]\" variable=\"ignore\">\n$body$\n</$list>\n</$set>\n</$list>\n</$set>\n</$list>\n\\end\n\n\\define update-all-actions()\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<<install-plugin-actions>>\n\"\"\"/>\n\\end\n\n\\define update-count()\n<$wikify name=\"count-filter\" text=<<each-updateable-plugin \"[[<$text text=<<assetInfo>>/>]]\">>><$count filter=<<count-filter>>/></$wikify>\n\\end\n\n<$button actions=<<update-all-actions>> class=\"tc-btn-invisible tc-install-plugin tc-reinstall-upgrade\">\n{{$:/core/images/download-button}} {{||$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption}}\n</$button>\n\n<div class=\"tc-plugin-library-listing\">\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<$macrocall $name=\"display-plugin-info\" type={{{ [<assetInfo>get[original-plugin-type]] }}}/>\n\"\"\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Plugins/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green tc-primary-btn\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
"text": "<<plugin-table language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
"text": "<<plugin-table plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
"text": "<<plugin-table theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define plugin-table(type)\n<$set name=\"plugin-type\" value=\"\"\"$type$\"\"\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[name]]\" emptyMessage=<<lingo \"Empty/Hint\">> template=\"$:/core/ui/Components/plugin-info\"/>\n</$set>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<<lingo Installed/Hint>>\n\n<$macrocall $name=\"tabs\" tabsList=\"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" default=\"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\" explicitState=\"$:/state/tab--86143343\"/>\n"
},
"$:/core/ui/ControlPanel/Saving/DownloadSaver": {
"title": "$:/core/ui/ControlPanel/Saving/DownloadSaver",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/DownloadSaver/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/DownloadSaver/\n\n<<lingo Hint>>\n\n!! <$link to=\"$:/config/DownloadSaver/AutoSave\"><<lingo AutoSave/Hint>></$link>\n\n<$checkbox tiddler=\"$:/config/DownloadSaver/AutoSave\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <<lingo AutoSave/Description>> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Saving/General": {
"title": "$:/core/ui/ControlPanel/Saving/General",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/General/Caption}}",
"list-before": "",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/AutoSave\"><<lingo AutoSave/Caption>></$link>\n\n<<lingo AutoSave/Hint>>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo AutoSave/Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo AutoSave/Disabled/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Saving/Gitea": {
"title": "$:/core/ui/ControlPanel/Saving/Gitea",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~Gitea\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/Gitea/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo Gitea/Password>> |<$password name=\"Gitea\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/Gitea/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/Gitea/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/Gitea/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/Gitea/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/Gitea/ServerURL\" default=\"https://gitea/api/v1\" tag=\"input\"/> |\n"
},
"$:/core/ui/ControlPanel/Saving/GitHub": {
"title": "$:/core/ui/ControlPanel/Saving/GitHub",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/GitHub/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitHub\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitHub/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitHub/Password>> |<$password name=\"github\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitHub/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitHub/Branch\" default=\"main\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitHub/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitHub/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitHub/ServerURL\" default=\"https://api.github.com\" tag=\"input\"/> |"
},
"$:/core/ui/ControlPanel/Saving/GitLab": {
"title": "$:/core/ui/ControlPanel/Saving/GitLab",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/GitLab/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitLab\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitLab/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitLab/Password>> |<$password name=\"gitlab\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitLab/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitLab/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitLab/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitLab/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitLab/ServerURL\" default=\"https://gitlab.com/api/v4\" tag=\"input\"/> |"
},
"$:/core/ui/ControlPanel/Saving/TiddlySpot": {
"title": "$:/core/ui/ControlPanel/Saving/TiddlySpot",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/TiddlySpot/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/TiddlySpot/\n\n\\define siteURL(path)\nhttp://$(userName)$.tiddlyspot.com/$path$/\n\\end\n\\define siteLink(path)\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<siteURL $path$>>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n</$reveal>\n</$set>\n</$reveal>\n\\end\n\n<div class=\"tc-message-box\">\n\n<<lingo ReadOnly>>\n\n</div>\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo Password>> |<$password name=\"upload\"/> |\n\n''<<lingo Advanced/Heading>>''\n\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>\n"
},
"$:/core/ui/ControlPanel/Saving": {
"title": "$:/core/ui/ControlPanel/Saving",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Saving/Caption}}",
"text": "{{$:/language/ControlPanel/Saving/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Saving]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Saving/General\" explicitState=\"$:/state/tab-2065006209\"/>\n</div>\n"
},
"$:/core/buttonstyles/Borderless": {
"title": "$:/core/buttonstyles/Borderless",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}",
"text": "tc-btn-invisible"
},
"$:/core/buttonstyles/Boxed": {
"title": "$:/core/buttonstyles/Boxed",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}",
"text": "tc-btn-boxed"
},
"$:/core/buttonstyles/Rounded": {
"title": "$:/core/buttonstyles/Rounded",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}",
"text": "tc-btn-rounded"
},
"$:/core/ui/ControlPanel/Settings/CamelCase": {
"title": "$:/core/ui/ControlPanel/Settings/CamelCase",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab": {
"title": "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab",
"caption": "{{$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption}}",
"tags": "$:/tags/ControlPanel/Settings",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultMoreSidebarTab/\n\n<$link to=\"$:/config/DefaultMoreSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultMoreSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": {
"title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
"caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
"tags": "$:/tags/ControlPanel/Settings",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Settings/EditorToolbar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/InfoPanelMode": {
"title": "$:/core/ui/ControlPanel/Settings/InfoPanelMode",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/InfoPanelMode/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/InfoPanelMode/\n<$link to=\"$:/config/TiddlerInfo/Mode\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"popup\"> <<lingo Popup/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"sticky\"> <<lingo Sticky/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
"title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n <option value=\"above\"><<lingo \"OpenAbove\">></option>\n <option value=\"below\"><<lingo \"OpenBelow\">></option>\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/MissingLinks": {
"title": "$:/core/ui/ControlPanel/Settings/MissingLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationHistory": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationPermalinkviewMode/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/CopyToClipboard\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/CopyToClipboard\"><<lingo CopyToClipboard/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\"><<lingo UpdateAddressBar/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
"title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/TitleLinks": {
"title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings": {
"title": "$:/core/ui/ControlPanel/Settings",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Settings/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ControlPanel/StoryView": {
"title": "$:/core/ui/ControlPanel/StoryView",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
"text": "{{$:/snippets/viewswitcher}}\n"
},
"$:/core/ui/ControlPanel/Stylesheets": {
"title": "$:/core/ui/ControlPanel/Stylesheets",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Stylesheets/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo Stylesheets/Hint>>\n\n{{$:/snippets/peek-stylesheets}}\n"
},
"$:/core/ui/ControlPanel/Theme": {
"title": "$:/core/ui/ControlPanel/Theme",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Theme/Caption}}",
"text": "{{$:/snippets/themeswitcher}}\n"
},
"$:/core/ui/ControlPanel/TiddlerFields": {
"title": "$:/core/ui/ControlPanel/TiddlerFields",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
},
"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"><$transclude tiddler={{!!icon}}/></span> <$transclude field=\"caption\"/> -- <i class=\"tc-muted\"><$transclude field=\"description\"/></i>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditorToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditorToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\"/>\n"
},
"$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>"
},
"$:/core/ui/ControlPanel/Toolbars/ItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"> <$transclude field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude field=\"description\"/></i></span>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/PageControls": {
"title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/PageControlButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/PageControls\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/ViewToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/ViewToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars": {
"title": "$:/core/ui/ControlPanel/Toolbars",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
"text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" class=\"tc-vertical\" explicitState=\"$:/state/tabs/controlpanel/toolbars-1345989671\"/>\n</div>\n"
},
"$:/ControlPanel": {
"title": "$:/ControlPanel",
"icon": "$:/core/images/options-button",
"color": "#bbb",
"text": "<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Info\" explicitState=\"$:/state/tab-1749438307\"/>\n</div>\n"
},
"$:/core/ui/DefaultSearchResultList": {
"title": "$:/core/ui/DefaultSearchResultList",
"tags": "$:/tags/SearchResults",
"caption": "{{$:/language/Search/DefaultResults/Caption}}",
"first-search-filter": "[!is[system]search:title<userInput>sort[title]limit[250]]",
"second-search-filter": "[!is[system]search<userInput>sort[title]limit[250]]",
"text": "\\define searchResultList()\n//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[<userInput>minlength[1]]\" variable=\"ignore\">\n<$list filter={{{ [<configTiddler>get[first-search-filter]] }}}>\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</$list>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[<userInput>minlength[1]]\" variable=\"ignore\">\n<$list filter={{{ [<configTiddler>get[second-search-filter]] }}}>\n<span class={{{[<currentTiddler>addsuffix[-secondaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</$list>\n\n\\end\n<<searchResultList>>\n"
},
"$:/core/ui/EditorToolbar/bold": {
"title": "$:/core/ui/EditorToolbar/bold",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/bold",
"caption": "{{$:/language/Buttons/Bold/Caption}}",
"description": "{{$:/language/Buttons/Bold/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((bold))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n"
},
"$:/core/ui/EditorToolbar/clear-dropdown": {
"title": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n\n</div>\n"
},
"$:/core/ui/EditorToolbar/clear": {
"title": "$:/core/ui/EditorToolbar/clear",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/erase",
"caption": "{{$:/language/Buttons/Clear/Caption}}",
"description": "{{$:/language/Buttons/Clear/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/editor-height-dropdown": {
"title": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<<lingo Hint>>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <<lingo Caption/Auto>></$radio>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <<lingo Caption/Fixed>> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/></$radio>\n"
},
"$:/core/ui/EditorToolbar/editor-height": {
"title": "$:/core/ui/EditorToolbar/editor-height",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/fixed-height",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/EditorHeight/Caption}}",
"description": "{{$:/language/Buttons/EditorHeight/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] [<targetTiddler>get[type]match[application/javascript]] [<targetTiddler>get[type]match[application/json]] [<targetTiddler>get[type]match[application/x-tiddler-dictionary]] [<targetTiddler>get[type]match[image/svg+xml]] +[first[]]",
"dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n</$reveal>\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/excise-dropdown": {
"title": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<<lingo Caption/NewTitle>> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[<new-title>is[tiddler]]\"\"\">\n<div class=\"tc-error\">\n<<lingo Caption/TiddlerExists>>\n</div>\n</$list>\n</$set>\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <<lingo Caption/Tag>></$checkbox>\n\n<<lingo Caption/Replace>> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n<option value=\"link\"><<lingo Caption/Replace/Link>></option>\n<option value=\"transclude\"><<lingo Caption/Replace/Transclusion>></option>\n<option value=\"macro\"><<lingo Caption/Replace/Macro>></option>\n</$select>\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<<lingo Caption/MacroName>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"$config-title$/new-title\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Excise>>\n</$button>\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Excise/\">>/>\n"
},
"$:/core/ui/EditorToolbar/excise": {
"title": "$:/core/ui/EditorToolbar/excise",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/excise",
"caption": "{{$:/language/Buttons/Excise/Caption}}",
"description": "{{$:/language/Buttons/Excise/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] +[first[]]",
"shortcuts": "((excise))",
"dropdown": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/file-import": {
"title": "$:/core/ui/EditorToolbar/file-import",
"tags": "$:/tags/EditorTools",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define closePopupActions()\n<$action-deletetiddler $filter=\"[title<importState>] [title<importTitle>]\"/>\n\\end\n\n\\define replacement-text-image() [img[$title$]]\n\n\\define replacement-text-file() [[$title$]]\n\n\\define postImportActions()\n<$list filter=\"[<importTitle>links[]] :reduce[get[type]prefix[image]then<replacement-text-image>else<replacement-text-file>search-replace[$title$],<currentTiddler>addprefix<accumulator>]\" variable=\"imageTitle\">\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"insert-text\"\n\ttext=<<imageTitle>>\n/>\n</$list>\n<<closePopupActions>>\n\\end\n\n\\define buttons()\n<$button class=\"tc-btn-invisible\" actions=<<closePopupActions>> ><<lingo Listing/Cancel/Caption>></$button>\n<$button class=\"tc-btn-invisible\" message=\"tm-perform-import\" param=<<importTitle>> actions=<<postImportActions>> ><<lingo Listing/Import/Caption>></$button>\n\\end\n\n<$reveal type=\"popup\" state=<<importState>> tag=\"div\" class=\"tc-editor-importpopup\">\n<div class=\"tc-editor-import\">\n<$list filter=\"[<importTitle>field:plugin-type[import]]\">\n<h2><<lingo Editor/Import/Heading>></h2>\n<$tiddler tiddler=<<importTitle>>>\n{{||$:/core/ui/ImportListing}}\n<<buttons>>\n</$tiddler>\n</$list>\n</div>\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/heading-1": {
"title": "$:/core/ui/EditorToolbar/heading-1",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-1",
"caption": "{{$:/language/Buttons/Heading1/Caption}}",
"description": "{{$:/language/Buttons/Heading1/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((heading-1))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-2": {
"title": "$:/core/ui/EditorToolbar/heading-2",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-2",
"caption": "{{$:/language/Buttons/Heading2/Caption}}",
"description": "{{$:/language/Buttons/Heading2/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-2))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-3": {
"title": "$:/core/ui/EditorToolbar/heading-3",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-3",
"caption": "{{$:/language/Buttons/Heading3/Caption}}",
"description": "{{$:/language/Buttons/Heading3/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-3))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/core/ui/EditorToolbar/heading-4",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-4",
"caption": "{{$:/language/Buttons/Heading4/Caption}}",
"description": "{{$:/language/Buttons/Heading4/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-4))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/core/ui/EditorToolbar/heading-5",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-5",
"caption": "{{$:/language/Buttons/Heading5/Caption}}",
"description": "{{$:/language/Buttons/Heading5/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-5))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/core/ui/EditorToolbar/heading-6",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-6",
"caption": "{{$:/language/Buttons/Heading6/Caption}}",
"description": "{{$:/language/Buttons/Heading6/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-6))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n"
},
"$:/core/ui/EditorToolbar/italic": {
"title": "$:/core/ui/EditorToolbar/italic",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/italic",
"caption": "{{$:/language/Buttons/Italic/Caption}}",
"description": "{{$:/language/Buttons/Italic/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((italic))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n"
},
"$:/core/ui/EditorToolbar/line-width-dropdown": {
"title": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<<toolbar-line-width-inner>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/line-width": {
"title": "$:/core/ui/EditorToolbar/line-width",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/line-width",
"caption": "{{$:/language/Buttons/LineWidth/Caption}}",
"description": "{{$:/language/Buttons/LineWidth/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>\n"
},
"$:/core/ui/EditorToolbar/link-dropdown": {
"title": "$:/core/ui/EditorToolbar/link-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define add-link-actions()\n<$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"make-link\" text={{$(linkTiddler)$}} />\n<$action-deletetiddler $filter=\"[<dropdown-state>] [<searchTiddler>] [<linkTiddler>] [<storeTitle>] [<searchListState>]\"/>\n\\end\n\n\\define get-focus-selector() [data-tiddler-title=\"$(cssEscapedTitle)$\"] .tc-create-wikitext-link input\n\n\\define cancel-search-actions-inner()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}><$list filter=\"[<searchTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[<searchTiddler>] [<linkTiddler>] [<storeTitle>] [<searchListState>]\"/>\"\"\"><$action-setfield $tiddler=<<searchTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/></$list></$set>\n\\end\n\n\\define cancel-search-actions() <$list filter=\"[<storeTitle>!has[text]] +[<searchTiddler>!has[text]]\" emptyMessage=\"\"\"<<cancel-search-actions-inner>>\"\"\"><$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"wrap-selection\" prefix=\"\" suffix=\"\"/></$list>\n\n\\define external-link()\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\" actions=<<add-link-actions>>>\n{{$:/core/images/chevron-right}}\n</$button>\n\\end\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/sidebar\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\" linktext=\"\" searchListState=<<qualify \"$:/temp/link-search/selected-item\">> refreshTitle=<<qualify \"$:/temp/link-search/refresh\">> storeTitle=<<qualify \"$:/temp/link-search/input\">>>\n\n<$vars linkTiddler=<<searchTiddler>>>\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">> class=\"tc-create-wikitext-link\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<searchTiddler>> storeTitle=<<storeTitle>>\n\t\tselectionStateTitle=<<searchListState>> refreshTitle=<<refreshTitle>> type=\"search\" filterMinLength=\"1\"\n\t\ttag=\"input\" focus=\"true\" class=\"tc-popup-handle\" inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<add-link-actions>> placeholder={{$:/language/Search/Search}} default=\"\" \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\" />\n</$keyboard>\n</$keyboard>\n<$reveal tag=\"span\" state=<<storeTitle>> type=\"nomatch\" text=\"\">\n<<external-link>>\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<<cancel-search-actions>><$set name=\"cssEscapedTitle\" value={{{ [<storyTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-focus-selector>>/></$set>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</$vars>\n\n<$reveal tag=\"div\" state=<<storeTitle>> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<<add-link-actions>> to=<<linkTiddler>>>\n\n<$vars userInput={{{ [<storeTitle>get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}}>\n\n{{$:/core/ui/SearchResults}}\n\n</$vars>\n\n</$linkcatcher>\n\n</$reveal>\n\n</$vars>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Link/\">>/>\n"
},
"$:/core/ui/EditorToolbar/link": {
"title": "$:/core/ui/EditorToolbar/link",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/link",
"caption": "{{$:/language/Buttons/Link/Caption}}",
"description": "{{$:/language/Buttons/Link/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((link))",
"dropdown": "$:/core/ui/EditorToolbar/link-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/linkify": {
"title": "$:/core/ui/EditorToolbar/linkify",
"caption": "{{$:/language/Buttons/Linkify/Caption}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Buttons/Linkify/Hint}}",
"icon": "$:/core/images/linkify",
"list-before": "$:/core/ui/EditorToolbar/mono-block",
"shortcuts": "((linkify))",
"tags": "$:/tags/EditorToolbar",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"[[\"\n\tsuffix=\"]]\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-bullet": {
"title": "$:/core/ui/EditorToolbar/list-bullet",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-bullet",
"caption": "{{$:/language/Buttons/ListBullet/Caption}}",
"description": "{{$:/language/Buttons/ListBullet/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-bullet))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-number": {
"title": "$:/core/ui/EditorToolbar/list-number",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-number",
"caption": "{{$:/language/Buttons/ListNumber/Caption}}",
"description": "{{$:/language/Buttons/ListNumber/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-number))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-block": {
"title": "$:/core/ui/EditorToolbar/mono-block",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-block",
"caption": "{{$:/language/Buttons/MonoBlock/Caption}}",
"description": "{{$:/language/Buttons/MonoBlock/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((mono-block))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-line": {
"title": "$:/core/ui/EditorToolbar/mono-line",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-line",
"caption": "{{$:/language/Buttons/MonoLine/Caption}}",
"description": "{{$:/language/Buttons/MonoLine/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((mono-line))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
},
"$:/core/ui/EditorToolbar/more-dropdown": {
"title": "$:/core/ui/EditorToolbar/more-dropdown",
"text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<<toolbarItem>> field=\"description\"/>\n</$list>\n\\end\n\n<div class=\"tc-text-editor-toolbar-more\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<<config-visibility-title>> text=\"hide\" tag=\"div\">\n<<conditional-button>>\n</$reveal>\n</$list>\n</div>\n"
},
"$:/core/ui/EditorToolbar/more": {
"title": "$:/core/ui/EditorToolbar/more",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/down-arrow",
"caption": "{{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"condition": "[<targetTiddler>]",
"dropdown": "$:/core/ui/EditorToolbar/more-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/opacity-dropdown": {
"title": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n\\define toolbar-opacity()\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<<toolbar-opacity-inner>>\n\n</$list>\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<<toolbar-opacity>>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/EditorToolbar/opacity": {
"title": "$:/core/ui/EditorToolbar/opacity",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/opacity",
"caption": "{{$:/language/Buttons/Opacity/Caption}}",
"description": "{{$:/language/Buttons/Opacity/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n"
},
"$:/core/ui/EditorToolbar/paint-dropdown": {
"title": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/paint": {
"title": "$:/core/ui/EditorToolbar/paint",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/paint",
"caption": "{{$:/language/Buttons/Paint/Caption}}",
"description": "{{$:/language/Buttons/Paint/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "\\define toolbar-paint()\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<<toolbar-paint>>\n</$set>\n"
},
"$:/core/ui/EditorToolbar/picture-dropdown": {
"title": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<<replacement-text>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/picture": {
"title": "$:/core/ui/EditorToolbar/picture",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/picture",
"caption": "{{$:/language/Buttons/Picture/Caption}}",
"description": "{{$:/language/Buttons/Picture/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((picture))",
"dropdown": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/preview-type-dropdown": {
"title": "$:/core/ui/EditorToolbar/preview-type-dropdown",
"text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<previewType>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<previewType>> field=\"title\" mode=\"inline\"/>\n\n</$transclude> \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<<previewType>> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<<preview-type-button>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/preview-type": {
"title": "$:/core/ui/EditorToolbar/preview-type",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/chevron-down",
"caption": "{{$:/language/Buttons/PreviewType/Caption}}",
"description": "{{$:/language/Buttons/PreviewType/Hint}}",
"condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]",
"button-classes": "tc-text-editor-toolbar-item-adjunct",
"dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown"
},
"$:/core/ui/EditorToolbar/preview": {
"title": "$:/core/ui/EditorToolbar/preview",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/preview-open",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/Preview/Caption}}",
"description": "{{$:/language/Buttons/Preview/Hint}}",
"condition": "[<targetTiddler>]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((preview))",
"text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n</$reveal>\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/quote": {
"title": "$:/core/ui/EditorToolbar/quote",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/quote",
"caption": "{{$:/language/Buttons/Quote/Caption}}",
"description": "{{$:/language/Buttons/Quote/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((quote))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n"
},
"$:/core/ui/EditorToolbar/rotate-left": {
"title": "$:/core/ui/EditorToolbar/rotate-left",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/rotate-left",
"caption": "{{$:/language/Buttons/RotateLeft/Caption}}",
"description": "{{$:/language/Buttons/RotateLeft/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"rotate-left\"\n/>\n"
},
"$:/core/ui/EditorToolbar/size-dropdown": {
"title": "$:/core/ui/EditorToolbar/size-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<<width>>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<<height>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<<width>>/> × <$text text=<<height>>/>\n\n</$button>\n\n</$set>\n\n</$set>\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<<lingo Caption/Width>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<<tv-bitmap-editor-width>> focus=\"true\" size=\"8\"/> <<lingo Caption/Height>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<<tv-bitmap-editor-height>> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down tc-popup-keep\">\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Resize>>\n</$button>\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<<qualify \"$:/state/Size/\">>/>\n"
},
"$:/core/ui/EditorToolbar/size": {
"title": "$:/core/ui/EditorToolbar/size",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/size",
"caption": "{{$:/language/Buttons/Size/Caption}}",
"description": "{{$:/language/Buttons/Size/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/size-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/stamp-dropdown": {
"title": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n</$list>\n\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix={{{ [[$(snippetTitle)$]addsuffix[/prefix]get[text]] }}}\nsuffix={{{ [[$(snippetTitle)$]addsuffix[/suffix]get[text]] }}}\n/>\n\n</$list>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<snippetTitle>> field=\"title\" />\n\n</$transclude>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n"
},
"$:/core/ui/EditorToolbar/stamp": {
"title": "$:/core/ui/EditorToolbar/stamp",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/stamp",
"caption": "{{$:/language/Buttons/Stamp/Caption}}",
"description": "{{$:/language/Buttons/Stamp/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] [<targetTiddler>get[type]match[application/javascript]] [<targetTiddler>get[type]match[application/json]] [<targetTiddler>get[type]match[application/x-tiddler-dictionary]] [<targetTiddler>get[type]match[image/svg+xml]] +[first[]]",
"shortcuts": "((stamp))",
"dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/strikethrough": {
"title": "$:/core/ui/EditorToolbar/strikethrough",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/strikethrough",
"caption": "{{$:/language/Buttons/Strikethrough/Caption}}",
"description": "{{$:/language/Buttons/Strikethrough/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((strikethrough))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n"
},
"$:/core/ui/EditorToolbar/subscript": {
"title": "$:/core/ui/EditorToolbar/subscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/subscript",
"caption": "{{$:/language/Buttons/Subscript/Caption}}",
"description": "{{$:/language/Buttons/Subscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((subscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n"
},
"$:/core/ui/EditorToolbar/superscript": {
"title": "$:/core/ui/EditorToolbar/superscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/superscript",
"caption": "{{$:/language/Buttons/Superscript/Caption}}",
"description": "{{$:/language/Buttons/Superscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((superscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n"
},
"$:/core/ui/EditorToolbar/transcludify": {
"title": "$:/core/ui/EditorToolbar/transcludify",
"caption": "{{$:/language/Buttons/Transcludify/Caption}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Buttons/Transcludify/Hint}}",
"icon": "$:/core/images/transcludify",
"list-before": "$:/core/ui/EditorToolbar/mono-block",
"shortcuts": "((transcludify))",
"tags": "$:/tags/EditorToolbar",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"{{\"\n\tsuffix=\"}}\"\n/>\n"
},
"$:/core/ui/EditorToolbar/underline": {
"title": "$:/core/ui/EditorToolbar/underline",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/underline",
"caption": "{{$:/language/Buttons/Underline/Caption}}",
"description": "{{$:/language/Buttons/Underline/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((underline))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n"
},
"$:/core/ui/EditTemplate/body/editor": {
"title": "$:/core/ui/EditTemplate/body/editor",
"text": "<$edit\n\n field=\"text\"\n class=\"tc-edit-texteditor tc-edit-texteditor-body\"\n placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n tabindex={{$:/config/EditTabIndex}}\n focus={{{ [{$:/config/AutoFocus}match[text]then[true]] ~[[false]] }}}\n cancelPopups=\"yes\"\n fileDrop={{{ [{$:/config/DragAndDrop/Enable}match[no]] :else[subfilter{$:/config/Editor/EnableImportFilter}then[yes]else[no]] }}}\n\n><$set\n\n name=\"targetTiddler\"\n value=<<currentTiddler>>\n\n><$list\n\n filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n type=\"nomatch\"\n state=<<config-visibility-title>>\n text=\"hide\"\n class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n mode=\"inline\"\n\n/></$reveal></$list><$list\n\n filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorTools]!has[draft.of]]\"\n\n><$list\n\tfilter={{!!condition}}\n\tvariable=\"list-condition\"\n><$transclude/>\n</$list></$list></$set></$edit>\n"
},
"$:/core/ui/EditTemplate/body/toolbar/button": {
"title": "$:/core/ui/EditTemplate/body/toolbar/button",
"text": "\\define toolbar-button-icon()\n<$list\n\n filter=\"[all[current]!has[custom-icon]]\"\n variable=\"no-custom-icon\"\n\n><$transclude\n\n tiddler={{!!icon}}\n\n/></$list>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n filter={{!!condition}}\n variable=\"list-condition\"\n\n><$wikify\n\n name=\"tooltip-text\"\n text=<<toolbar-button-tooltip>>\n mode=\"inline\"\n output=\"text\"\n\n><$list\n\n filter=\"[all[current]!has[dropdown]]\"\n variable=\"no-dropdown\"\n\n><$set name=disabled filter={{!!condition-disabled}}><$button\n\n class=\"tc-btn-invisible $(buttonClasses)$\"\n tooltip=<<tooltip-text>>\n actions={{!!actions}}\n disabled=<<disabled>>\n\n><span\n\n data-tw-keyboard-shortcut={{{ [<disabled>match[yes]then[]else{!!shortcuts}] }}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button></$set></$list><$list\n\n filter=\"[all[current]has[dropdown]]\"\n variable=\"dropdown\"\n\n><$set\n\n name=\"dropdown-state\"\n value=<<qualify \"$:/state/EditorToolbarDropdown\">>\n\n><$set name=disabled filter={{!!condition-disabled}}><$button\n\n popup=<<dropdown-state>>\n class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n selectedClass=\"tc-selected\"\n tooltip=<<tooltip-text>>\n actions={{!!actions}}\n disabled=<<disabled>>\n\n><span\n\n data-tw-keyboard-shortcut={{{ [<disabled>match[yes]then[]else{!!shortcuts}] }}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button></$set><$reveal\n\n state=<<dropdown-state>>\n type=\"popup\"\n position=\"below\"\n animate=\"yes\"\n tag=\"span\"\n\n><div\n\n class=\"tc-drop-down tc-popup-keep\"\n\n><$transclude\n\n tiddler={{!!dropdown}}\n mode=\"block\"\n\n/></div></$reveal></$set></$list></$wikify></$list>\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n name=\"buttonClasses\"\n value={{!!button-classes}}\n\n><<toolbar-button>></$set>\n\\end\n\n<<toolbar-button-outer>>"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n\n\\define importFileActions()\n<$action-popup $state=<<importState>> $coords=\"(0,0,0,0)\" $floating=\"yes\"/>\n\\end\n\n<$list filter=\"[all[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\" tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[all[current]!has[_canonical_uri]]\">\n<$vars importTitle=<<qualify $:/ImportImage>> importState=<<qualify $:/state/ImportImage>> >\n<$dropzone importTitle=<<importTitle>> autoOpenOnImport=\"no\" contentTypesFilter={{$:/config/Editor/ImportContentTypesFilter}} class=\"tc-dropzone-editor\" enable={{{ [{$:/config/DragAndDrop/Enable}match[no]] :else[subfilter{$:/config/Editor/EnableImportFilter}then[yes]else[no]] }}} filesOnly=\"yes\" actions=<<importFileActions>> ><$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n<div class=\"tc-tiddler-preview\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n</$transclude>\n\n</div>\n\n</div>\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n</$reveal>\n</$dropzone>\n</$vars>\n</$list>"
},
"$:/core/ui/EditTemplate/controls": {
"title": "$:/core/ui/EditTemplate/controls",
"tags": "$:/tags/EditTemplate",
"text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define current-tiddler-new-field-selector()\n[data-tiddler-title=\"$(currentTiddlerCSSescaped)$\"] .tc-edit-field-add-name-wrapper input\n\\end\n\n\\define new-field-actions()\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<storeTitle>] [<searchListState>]\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/>\n\\end\n\n\\define delete-state-tiddlers() <$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<storeTitle>] [<searchListState>]\"/>\n\n\\define cancel-search-actions-inner()\n<$list filter=\"[<storeTitle>has[text]] [<newFieldNameTiddler>has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\">\n<<delete-state-tiddlers>>\n</$list>\n\\end\n\n\\define cancel-search-actions()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<newFieldNameTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<<cancel-search-actions-inner>>\"\"\">\n<$action-setfield $tiddler=<<newFieldNameTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n</$set>\n\\end\n\n\\define new-field()\n<$vars name={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button tooltip=<<lingo Fields/Add/Button/Hint>>>\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<<name>>\n$value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<storeTitle>] [<searchListState>]\"/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n</$vars>\n\\end\n\\whitespace trim\n\n<div class=\"tc-edit-fields\">\n<table class={{{ [all[current]fields[]] :filter[lookup[$:/config/EditTemplateFields/Visibility/]!match[hide]] +[count[]!match[0]] +[then[tc-edit-fields]] ~[[tc-edit-fields tc-edit-fields-small]] }}}>\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\" storyview=\"pop\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$keyboard key=\"((delete-field))\" actions=\"\"\"<$action-deletefield $field=<<currentField>>/><$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/></$set>\"\"\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n</$keyboard>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/><$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/></$set>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit tc-small-gap-right\">\n<<lingo Fields/Add/Prompt>>\n</em>\n<$vars refreshTitle=<<qualify \"$:/temp/fieldname/refresh\">> storeTitle=<<newFieldNameInputTiddler>> searchListState=<<newFieldNameSelectionTiddler>>>\n<div class=\"tc-edit-field-add-name-wrapper\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<newFieldNameTiddler>> storeTitle=<<storeTitle>> refreshTitle=<<refreshTitle>>\n\t\tselectionStateTitle=<<searchListState>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}}\n\t\tfocusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}}\n\t\tfocus={{{ [{$:/config/AutoFocus}match[fields]then[true]] ~[[false]] }}} cancelPopups=\"yes\"\n\t\tconfigTiddlerFilter=\"[[$:/config/EditMode/fieldname-filter]]\" inputCancelActions=<<cancel-search-actions>> />\n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown tc-small-gap\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=<<newFieldNameTiddler>>>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$set name=\"newFieldName\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title<newFieldName>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\" variable=\"currentField\">\n<$list filter=\"[<currentField>addsuffix[-primaryList]] -[<searchListState>get[text]]\" emptyMessage=\"\"\"<$link to=<<currentField>> class=\"tc-list-item-selected\"><$text text=<<currentField>>/></$link>\"\"\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]search:title<newFieldName>sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$list filter=\"[<currentField>addsuffix[-secondaryList]] -[<searchListState>get[text]]\" emptyMessage=\"\"\"<$link to=<<currentField>> class=\"tc-list-item-selected\"><$text text=<<currentField>>/></$link>\"\"\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$list>\n</$set>\n</$linkcatcher>\n</$set>\n</div>\n</$reveal>\n</div>\n<span class=\"tc-edit-field-add-value tc-small-gap-right\">\n<$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}>\n<$keyboard key=\"((add-field))\" actions=<<new-field-actions>>>\n<$edit-text tiddler=<<newFieldValueTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\" tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n</$keyboard>\n</$set>\n</span>\n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</$vars>\n</div>\n</$fieldmangler>\n"
},
"$:/core/ui/EditTemplate/body/preview/diffs-current": {
"title": "$:/core/ui/EditTemplate/body/preview/diffs-current",
"tags": "$:/tags/EditPreview",
"caption": "{{$:/language/EditTemplate/Body/Preview/Type/DiffCurrent}}",
"list-after": "$:/core/ui/EditTemplate/body/preview/output",
"text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
},
"$:/core/ui/EditTemplate/body/preview/diffs-shadow": {
"title": "$:/core/ui/EditTemplate/body/preview/diffs-shadow",
"tags": "$:/tags/EditPreview",
"caption": "{{$:/language/EditTemplate/Body/Preview/Type/DiffShadow}}",
"list-after": "$:/core/ui/EditTemplate/body/preview/output",
"text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{{ [{!!draft.of}shadowsource[]] }}} sourceSubTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
},
"$:/core/ui/EditTemplate/body/preview/output": {
"title": "$:/core/ui/EditTemplate/body/preview/output",
"tags": "$:/tags/EditPreview",
"caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}",
"text": "\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n"
},
"$:/state/showeditpreview": {
"title": "$:/state/showeditpreview",
"text": "no"
},
"$:/core/ui/EditTemplate/shadow": {
"title": "$:/core/ui/EditTemplate/shadow",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
},
"$:/core/ui/EditTemplate/tags": {
"title": "$:/core/ui/EditTemplate/tags",
"tags": "$:/tags/EditTemplate",
"text": "\\whitespace trim\n\n\\define lingo-base() $:/language/EditTemplate/\n\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB,icon,tagField:\"tags\")\n\\whitespace trim\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<span style=<<tag-styles>> class=\"tc-tag-label tc-tag-list-item tc-small-gap-right\">\n<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view field=\"title\" format=\"text\" />\n<$button class=\"tc-btn-invisible tc-remove-tag-button\" style=<<tag-styles>>><$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"-[{!!title}]\"/>{{$:/core/images/close-button}}</$button>\n</span>\n</$vars>\n\\end\n\n\\define tag-body(colour,palette,icon,tagField:\"tags\")\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon=\"\"\"$icon$\"\"\" tagField=<<__tagField__>>/>\n\\end\n\n\\define edit-tags-template(tagField:\"tags\")\n\\whitespace trim\n<div class=\"tc-edit-tags\">\n<$list filter=\"[list[!!$tagField$]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}} tagField=<<__tagField__>>/>\n</$list>\n<$vars tabIndex={{$:/config/EditTabIndex}} cancelPopups=\"yes\">\n<$macrocall $name=\"tag-picker\" tagField=<<__tagField__>>/>\n</$vars>\n</div>\n\\end\n<$set name=\"saveTiddler\" value=<<currentTiddler>>>\n<$macrocall $name=\"edit-tags-template\" tagField=<<tagField>>/>\n</$set>\n"
},
"$:/core/ui/EditTemplate/title": {
"title": "$:/core/ui/EditTemplate/title",
"tags": "$:/tags/EditTemplate",
"text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus={{{ [{$:/config/AutoFocus}match[title]then[true]] ~[[false]] }}} tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n\n<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[all[current]regexp:draft.title<pattern>]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n</div>\n\n</$list>\n\n</$vars>\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}: <$link to={{!!draft.title}} />\n\n</div>\n\n</$list>\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}</$checkbox>\n\n<$list filter=\"[title<fromTitle>backlinks[]limit[1]]\" variable=\"listItem\">\n\n<$vars stateTiddler=<<qualify \"$:/state/edit/references\">> >\n\n<$reveal type=\"nomatch\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$tiddler tiddler=<<fromTitle>> >\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo/References\"/>\n</$tiddler>\n</$reveal>\n\n</$vars>\n\n</$list>\n\n</$vars>\n\n</$list>\n\n</$reveal>\n"
},
"$:/core/ui/EditTemplate/type": {
"title": "$:/core/ui/EditTemplate/type",
"tags": "$:/tags/EditTemplate",
"first-search-filter": "[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]sort[description]sort[group-sort]removeprefix[$:/language/Docs/Types/]search<userInput>]",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define input-cancel-actions() <$list filter=\"[<storeTitle>get[text]] [<currentTiddler>get[type]] +[limit[1]]\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\"><$action-sendmessage $message=\"tm-remove-field\" $param=\"type\"/><$action-deletetiddler $filter=\"[<typeInputTiddler>] [<refreshTitle>] [<typeSelectionTiddler>]\"/></$list>\n\\whitespace trim\n<$set name=\"refreshTitle\" value=<<qualify \"$:/temp/type-search/refresh\">>>\n<div class=\"tc-edit-type-selector-wrapper\">\n<em class=\"tc-edit tc-small-gap-right\"><<lingo Type/Prompt>></em>\n<div class=\"tc-type-selector-dropdown-wrapper\">\n<div class=\"tc-type-selector\"><$fieldmangler>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<currentTiddler>> storeTitle=<<typeInputTiddler>> refreshTitle=<<refreshTitle>> selectionStateTitle=<<typeSelectionTiddler>> field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] ~[[false]] }}} cancelPopups=\"yes\" configTiddlerFilter=\"[[$:/core/ui/EditTemplate/type]]\" inputCancelActions=<<input-cancel-actions>>/><$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown tc-small-gap\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button><$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}<$action-deletetiddler $filter=\"[<storeTitle>] [<refreshTitle>] [<selectionStateTitle>]\"/></$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group-sort]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$set name=\"userInput\" value={{{ [<typeInputTiddler>get[text]] }}}>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]] +[removeprefix[$:/language/Docs/Types/]] +[search<userInput>]\"><span class={{{ [<currentTiddler>addsuffix[-primaryList]] -[<typeSelectionTiddler>get[text]] +[then[]else[tc-list-item-selected]] }}}><$link to={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]get[name]] }}}><$view tiddler={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]] }}} field=\"description\"/> (<$view tiddler={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]] }}} field=\"name\"/>)</$link></span>\n</$list>\n</$set>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</$set>\n</div>\n</div>\n</div>\n</$set>\n"
},
"$:/core/ui/EditTemplate": {
"title": "$:/core/ui/EditTemplate",
"text": "\\define delete-edittemplate-state-tiddlers() <$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<newFieldNameInputTiddler>] [<newFieldNameSelectionTiddler>] [<newTagNameTiddler>] [<newTagNameInputTiddler>] [<newTagNameSelectionTiddler>] [<typeInputTiddler>] [<typeSelectionTiddler>]\"/>\n\\define save-tiddler-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<<delete-edittemplate-state-tiddlers>>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n\\define cancel-delete-tiddler-actions(message)\n<<delete-edittemplate-state-tiddlers>>\n<$action-sendmessage $message=\"tm-$message$-tiddler\"/>\n\\end\n<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>\n<$fieldmangler>\n<$vars storyTiddler=<<currentTiddler>> newTagNameTiddler=<<qualify \"$:/temp/NewTagName\">> newFieldNameTiddler=<<qualify \"$:/temp/NewFieldName\">> newFieldValueTiddler=<<qualify \"$:/temp/NewFieldValue\">> newFieldNameInputTiddler=<<qualify \"$:/temp/NewFieldName/input\">> newFieldNameSelectionTiddler=<<qualify \"$:/temp/NewFieldName/selected-item\">> newTagNameInputTiddler=<<qualify \"$:/temp/NewTagName/input\">> newTagNameSelectionTiddler=<<qualify \"$:/temp/NewTagName/selected-item\">> typeInputTiddler=<<qualify \"$:/temp/Type/input\">> typeSelectionTiddler=<<qualify \"$:/temp/Type/selected-item\">>>\n<$keyboard key=\"((cancel-edit-tiddler))\" actions=<<cancel-delete-tiddler-actions \"cancel\">>>\n<$keyboard key=\"((save-tiddler))\" actions=<<save-tiddler-actions>>>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>>/>\n</$set>\n</$list>\n</$keyboard>\n</$keyboard>\n</$vars>\n</$fieldmangler>\n</div>\n"
},
"$:/core/ui/Buttons/cancel": {
"title": "$:/core/ui/Buttons/cancel",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
"description": "{{$:/language/Buttons/Cancel/Hint}}",
"text": "\\whitespace trim\n<$button actions=<<cancel-delete-tiddler-actions \"cancel\">> tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/delete": {
"title": "$:/core/ui/Buttons/delete",
"tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
"caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
"description": "{{$:/language/Buttons/Delete/Hint}}",
"text": "\\whitespace trim\n<$button actions=<<cancel-delete-tiddler-actions \"delete\">> tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/save": {
"title": "$:/core/ui/Buttons/save",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
"description": "{{$:/language/Buttons/Save/Hint}}",
"text": "\\define save-tiddler-button()\n\\whitespace trim\n<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<<save-tiddler-actions>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button></$fieldmangler>\n\\end\n<<save-tiddler-button>>\n"
},
"$:/core/Filters/AllTags": {
"title": "$:/core/Filters/AllTags",
"tags": "$:/tags/Filter",
"filter": "[tags[]!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTags}}",
"text": ""
},
"$:/core/Filters/AllTiddlers": {
"title": "$:/core/Filters/AllTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTiddlers}}",
"text": ""
},
"$:/core/Filters/Drafts": {
"title": "$:/core/Filters/Drafts",
"tags": "$:/tags/Filter",
"filter": "[has[draft.of]sort[title]]",
"description": "{{$:/language/Filters/Drafts}}",
"text": ""
},
"$:/core/Filters/Missing": {
"title": "$:/core/Filters/Missing",
"tags": "$:/tags/Filter",
"filter": "[all[missing]sort[title]]",
"description": "{{$:/language/Filters/Missing}}",
"text": ""
},
"$:/core/Filters/Orphans": {
"title": "$:/core/Filters/Orphans",
"tags": "$:/tags/Filter",
"filter": "[all[orphans]sort[title]]",
"description": "{{$:/language/Filters/Orphans}}",
"text": ""
},
"$:/core/Filters/OverriddenShadowTiddlers": {
"title": "$:/core/Filters/OverriddenShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[shadow]]",
"description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentSystemTiddlers": {
"title": "$:/core/Filters/RecentSystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentSystemTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentTiddlers": {
"title": "$:/core/Filters/RecentTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentTiddlers}}",
"text": ""
},
"$:/core/Filters/SessionTiddlers": {
"title": "$:/core/Filters/SessionTiddlers",
"tags": "$:/tags/Filter",
"filter": "[haschanged[]]",
"description": "{{$:/language/Filters/SessionTiddlers}}",
"text": ""
},
"$:/core/Filters/ShadowTiddlers": {
"title": "$:/core/Filters/ShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[all[shadows]sort[title]]",
"description": "{{$:/language/Filters/ShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/StoryList": {
"title": "$:/core/Filters/StoryList",
"tags": "$:/tags/Filter",
"filter": "[list[$:/StoryList]] -$:/AdvancedSearch",
"description": "{{$:/language/Filters/StoryList}}",
"text": ""
},
"$:/core/Filters/SystemTags": {
"title": "$:/core/Filters/SystemTags",
"tags": "$:/tags/Filter",
"filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTags}}",
"text": ""
},
"$:/core/Filters/SystemTiddlers": {
"title": "$:/core/Filters/SystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTiddlers}}",
"text": ""
},
"$:/core/Filters/TypedTiddlers": {
"title": "$:/core/Filters/TypedTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Filters/TypedTiddlers}}",
"text": ""
},
"$:/core/ui/ImportListing": {
"title": "$:/core/ui/ImportListing",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define messageField() message-$(payloadTiddler)$\n\n\\define payloadTitleFilter() [<currentTiddler>get<renameField>minlength[1]else<payloadTiddler>]\n\n\\define overWriteWarning()\n<$list filter=\"[<currentTiddler>!has<suppressedField>]\">\n<$text text={{{[subfilter<payloadTitleFilter>!is[tiddler]then[]] ~[<lingo-base>addsuffix[Listing/Rename/OverwriteWarning]get[text]]}}}/>\n</$list>\n\\end\n\n\\define selectionInfo()\n\\whitespace trim\n<$set name=\"escUnselected\" value={{{[{$:/language/Import/Upgrader/Tiddler/Unselected}escaperegexp[]addprefix[(?g)]]}}}>\n\t<$list filter=\"[all[current]get<messageField>regexp<escUnselected>]\" variable=\"ignore\">\n\t\t<$text text={{{[all[current]get<selectionField>match[checked]then{$:/language/Import/Upgrader/Tiddler/Selected}else[]]}}}/>\n\t</$list>\n</$set>\n\\end\n\n\\define libraryInfo()\n\\whitespace trim\n<$set name=\"escUnselected\" value={{{[{$:/language/Import/Upgrader/Tiddler/Unselected}escaperegexp[]addprefix[(?g)]]}}}>\n\t<$list filter=\"[all[current]get<messageField>!regexp<escUnselected>]\" variable=\"ignore\">\n\t\t<$text text={{{[all[current]get<messageField>]}}}/>\n\t</$list>\n</$set>\n\\end\n\n\\define selectionField() selection-$(payloadTiddler)$\n\n\\define renameField() rename-$(payloadTiddler)$\n\n\\define suppressedField() suppressed-$(payloadTiddler)$\n\n\\define newImportTitleTiddler() $:/temp/NewImportTitle-$(payloadTiddler)$\n\n\\define previewPopupState() $(currentTiddler)$!!popup-$(payloadTiddler)$\n\n\\define renameFieldState() $(currentTiddler)$!!state-rename-$(payloadTiddler)$\n\n\\define select-all-actions()\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<$action-setfield $field={{{ [<payloadTiddler>addprefix[selection-]] }}} $value={{$:/state/import/select-all}}/>\n</$list>\n\\end\n\n<table class=\"tc-import-table\">\n<tbody>\n<tr>\n<th align=\"left\">\n<$checkbox tiddler=\"$:/state/import/select-all\" field=\"text\" checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" actions=<<select-all-actions>>>\n<<lingo Listing/Select/Caption>>\n</$checkbox>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr class={{{[<currentTiddler>has<suppressedField>then[tc-row-disabled]] ~[subfilter<payloadTitleFilter>is[tiddler]then[tc-row-warning]] }}}>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" disabled={{{[<currentTiddler>has<suppressedField>then[yes]else[no]]}}}/>\n</td>\n<td>\n<$reveal type=\"nomatch\" state=<<renameFieldState>> text=\"yes\" tag=\"div\">\n<$reveal type=\"nomatch\" state=<<previewPopupState>> text=\"yes\" tag=\"div\" class=\"tc-flex\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown tc-flex-grow-1 tc-word-break\" set=<<previewPopupState>> setTo=\"yes\" disabled={{{[<currentTiddler>has<suppressedField>then[yes]else[no]]}}}>\n<span class=\"tc-small-gap-right\">{{$:/core/images/right-arrow}}</span><$text text={{{[subfilter<payloadTitleFilter>]}}}/>\n</$button>\n<$list filter=\"[<currentTiddler>!has<suppressedField>]\"><$button class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"yes\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/Tooltip]get[text]]}}}>{{$:/core/images/edit-button}}</$button></$list>\n</$reveal>\n<$reveal type=\"match\" state=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"no\">\n<span class=\"tc-small-gap-right\">{{$:/core/images/down-arrow}}</span><$text text={{{[subfilter<payloadTitleFilter>]}}}/>\n</$button>\n</$reveal>\n</$reveal>\n<$reveal type=\"match\" state=<<renameFieldState>> text=\"yes\" tag=\"div\">\n<$text text={{{[<lingo-base>addsuffix[Listing/Rename/Prompt]get[text]]}}}/>\n</$reveal>\n</td>\n<td>\n<<selectionInfo>>\n<<libraryInfo>>\n<<overWriteWarning>>\n</td>\n</tr>\n<$reveal type=\"match\" state=<<renameFieldState>> text=\"yes\" tag=\"tr\">\n<td colspan=\"3\">\n<div class=\"tc-flex\">\n<$edit-text tiddler=<<newImportTitleTiddler>> default={{{[subfilter<payloadTitleFilter>]}}} tag=\"input\" class=\"tc-import-rename tc-flex-grow-1\"/><span class=\"tc-small-gap-left\"><$button class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"no\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/CancelRename]get[text]]}}}>{{$:/core/images/close-button}}<$action-deletetiddler $tiddler=<<newImportTitleTiddler>>/></$button><span class=\"tc-small-gap-right\"/></span><$button class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"no\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/ConfirmRename]get[text]]}}}>{{$:/core/images/done-button}}<$action-setfield $field=<<renameField>> $value={{{[<newImportTitleTiddler>get[text]minlength[1]else<payloadTiddler>]}}} /><$action-deletetiddler $tiddler=<<newImportTitleTiddler>>/></$button>\n</div>\n</td>\n</$reveal>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" state=<<previewPopupState>> tag=\"div\">\n<$list filter=\"[{$:/state/importpreviewtype}has[text]]\" variable=\"listItem\" emptyMessage={{$:/core/ui/ImportPreviews/Text}}>\n<$transclude tiddler={{$:/state/importpreviewtype}}/>\n</$list>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ImportPreviews/Diff": {
"title": "$:/core/ui/ImportPreviews/Diff",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Diff}}",
"text": "<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>>/>\n"
},
"$:/core/ui/ImportPreviews/DiffFields": {
"title": "$:/core/ui/ImportPreviews/DiffFields",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/DiffFields}}",
"text": "<$macrocall $name=\"compareTiddlers\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>> exclude=\"text\"/>\n"
},
"$:/core/ui/ImportPreviews/Fields": {
"title": "$:/core/ui/ImportPreviews/Fields",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Fields}}",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[<payloadTiddler>subtiddlerfields<currentTiddler>sort[]] -text\" variable=\"fieldName\">\n<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<fieldName>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<fieldName>> tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>>/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ImportPreviews/Text": {
"title": "$:/core/ui/ImportPreviews/Text",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Text}}",
"text": "<$transclude tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> mode=\"block\"/>\n"
},
"$:/core/ui/ImportPreviews/TextRaw": {
"title": "$:/core/ui/ImportPreviews/TextRaw",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/TextRaw}}",
"text": "<pre><code><$view tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> /></code></pre>"
},
"$:/core/ui/KeyboardShortcuts/advanced-search": {
"title": "$:/core/ui/KeyboardShortcuts/advanced-search",
"tags": "$:/tags/KeyboardShortcut",
"key": "((advanced-search))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\" preventScroll=\"true\"/>\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/change-sidebar-layout": {
"title": "$:/core/ui/KeyboardShortcuts/change-sidebar-layout",
"tags": "$:/tags/KeyboardShortcut",
"key": "((change-sidebar-layout))",
"text": "<$list filter=\"[{$:/themes/tiddlywiki/vanilla/options/sidebarlayout}match[fixed-fluid]]\" \nemptyMessage=\"\"\"<$action-setfield $tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" text=\"fixed-fluid\"/>\"\"\">\n<$action-setfield $tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" text=\"fluid-fixed\"/>\n</$list>\n"
},
"$:/core/ui/KeyboardShortcuts/new-image": {
"title": "$:/core/ui/KeyboardShortcuts/new-image",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-image))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-image}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-journal": {
"title": "$:/core/ui/KeyboardShortcuts/new-journal",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-journal))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-journal}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-tiddler": {
"title": "$:/core/ui/KeyboardShortcuts/new-tiddler",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-tiddler))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-tiddler}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/save-wiki": {
"title": "$:/core/ui/KeyboardShortcuts/save-wiki",
"tags": "$:/tags/KeyboardShortcut",
"key": "((save-wiki))",
"text": "<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n"
},
"$:/core/ui/KeyboardShortcuts/sidebar-search": {
"title": "$:/core/ui/KeyboardShortcuts/sidebar-search",
"tags": "$:/tags/KeyboardShortcut",
"key": "((sidebar-search))",
"text": "<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n"
},
"$:/core/ui/KeyboardShortcuts/switcher": {
"title": "$:/core/ui/KeyboardShortcuts/switcher",
"tags": "$:/tags/KeyboardShortcut",
"key": "((layout-switcher))",
"text": "<$action-sendmessage $message=\"tm-show-switcher\" switch=\"layout\"/>"
},
"$:/core/ui/KeyboardShortcuts/toggle-sidebar": {
"title": "$:/core/ui/KeyboardShortcuts/toggle-sidebar",
"tags": "$:/tags/KeyboardShortcut",
"key": "((toggle-sidebar))",
"text": "<$list filter=\"[[$:/state/sidebar]is[missing]] [{$:/state/sidebar}removeprefix[yes]]\" emptyMessage=\"\"\"\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"yes\"/>\n\"\"\">\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"no\"/>\n</$list>\n"
},
"$:/snippets/LayoutSwitcher": {
"title": "$:/snippets/LayoutSwitcher",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/LayoutSwitcher/Caption}}",
"text": "<$linkcatcher to=\"$:/layout\">\n<div class=\"tc-chooser\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/Layout]] [[$:/core/ui/PageTemplate]] +[!is[draft]sort[name]]\">\n<$list filter=\"[{$:/layout}!has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/layout}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$transclude field=\"name\"/>'' - <$transclude field=\"description\"/></$link></div>\n</$set>\n\"\"\">\n<$set name=\"cls\" filter=\"[all[current]field:title[$:/core/ui/PageTemplate]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$transclude field=\"name\"/>'' - <$transclude field=\"description\"/></$link></div>\n</$set>\n</$list>\n</$list>\n</div>\n</$linkcatcher>\n"
},
"$:/core/ui/ListItemTemplate": {
"title": "$:/core/ui/ListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link />\n</div>"
},
"$:/Manager/ItemMain/Fields": {
"title": "$:/Manager/ItemMain/Fields",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/Fields}}",
"text": "<table>\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/Manager/ItemMain/RawText": {
"title": "$:/Manager/ItemMain/RawText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/RawText}}",
"text": "<pre><code><$view/></code></pre>\n"
},
"$:/Manager/ItemMain/WikifiedText": {
"title": "$:/Manager/ItemMain/WikifiedText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/WikifiedText}}",
"text": "<$transclude mode=\"block\"/>\n"
},
"$:/Manager/ItemSidebar/Colour": {
"title": "$:/Manager/ItemSidebar/Colour",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Colour}}",
"text": "\\define swatch-styles()\nheight: 1em;\nbackground-color: $(colour)$\n\\end\n\n<$vars colour={{!!color}}>\n<p style=<<swatch-styles>>/>\n</$vars>\n<p>\n<$edit-text field=\"color\" tag=\"input\" type=\"color\"/> / <$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>\n</p>\n"
},
"$:/Manager/ItemSidebar/Icon": {
"title": "$:/Manager/ItemSidebar/Icon",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Icon}}",
"text": "<p>\n<div class=\"tc-manager-icon-editor\">\n<$button popup=<<qualify \"$:/state/popup/image-picker\">> class=\"tc-btn-invisible\">\n<$transclude tiddler={{!!icon}}>\n{{$:/language/Manager/Item/Icon/None}}\n</$transclude>\n</$button>\n<div class=\"tc-block-dropdown-wrapper\" style=\"position: static;\">\n<$reveal state=<<qualify \"$:/state/popup/image-picker\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-popup\">\n<div class=\"tc-block-dropdown tc-popup-keep\" style=\"width: 80%; left: 10%; right: 10%; padding: 0.5em;\">\n<$macrocall $name=\"image-picker-include-tagged-images\" actions=\"\"\"\n<$action-setfield $field=\"icon\" $value=<<imageTitle>>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/image-picker\">>/>\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n</div>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tags": {
"title": "$:/Manager/ItemSidebar/Tags",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tags}}",
"text": "\\whitespace trim\n\\define tag-checkbox-actions()\n<$action-listops\n\t$tiddler=\"$:/config/Manager/RecentTags\"\n\t$subfilter=\"[<tag>] [list[$:/config/Manager/RecentTags]] +[limit[12]]\"\n/>\n\\end\n\n\\define tag-picker-actions()\n<<tag-checkbox-actions>>\n\\end\n\n<p>\n<$list filter=\"[all[current]tags[]] [list[$:/config/Manager/RecentTags]] +[sort[title]] \" variable=\"tag\" storyview=\"pop\">\n<div>\n<$checkbox tiddler=<<currentTiddler>> tag=<<tag>> actions=<<tag-checkbox-actions>>>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$checkbox>\n</div>\n</$list>\n</p>\n<p>\n<$fieldmangler>\n<$macrocall $name=\"tag-picker\" actions=<<tag-picker-actions>>/>\n</$fieldmangler>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tools": {
"title": "$:/Manager/ItemSidebar/Tools",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tools}}",
"text": "<p>\n<$button to=<<currentTiddler>>>{{$:/core/images/link}} open</$button>\n</p>\n<p>\n<$button message=\"tm-edit-tiddler\" param=<<currentTiddler>>>{{$:/core/images/edit-button}} edit</$button>\n</p>\n"
},
"$:/Manager": {
"title": "$:/Manager",
"icon": "$:/core/images/list",
"color": "#bbb",
"text": "\\define lingo-base() $:/language/Manager/\n\n\\define list-item-content-item()\n<div class=\"tc-manager-list-item-content-item\">\n\t<$vars state-title=\"\"\"$:/state/popup/manager/item/$(listItem)$\"\"\">\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"hide\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/down-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"nomatch\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"show\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/right-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\" class=\"tc-manager-list-item-content-item-body\">\n\t\t\t<$transclude tiddler=<<listItem>>/>\n\t\t</$reveal>\n\t</$vars>\n</div>\n\\end\n\n<div class=\"tc-manager-wrapper\">\n\t<div class=\"tc-manager-controls\">\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Show/Prompt>> <$select tiddler=\"$:/config/Manager/Show\" default=\"tiddlers\">\n\t\t\t\t<option value=\"tiddlers\"><<lingo Controls/Show/Option/Tiddlers>></option>\n\t\t\t\t<option value=\"tags\"><<lingo Controls/Show/Option/Tags>></option>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Search/Prompt>> <$edit-text tiddler=\"$:/config/Manager/Filter\" tag=\"input\" default=\"\" placeholder={{$:/language/Manager/Controls/Search/Placeholder}}/>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/FilterByTag/Prompt>> <$select tiddler=\"$:/config/Manager/Tag\" default=\"\">\n\t\t\t\t<option value=\"\"><<lingo Controls/FilterByTag/None>></option>\n\t\t\t\t<$list filter=\"[!is{$:/config/Manager/System}tags[]!is[system]sort[title]]\" variable=\"tag\">\n\t\t\t\t\t<option value=<<tag>>><$text text=<<tag>>/></option>\n\t\t\t\t</$list>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Sort/Prompt>> <$select tiddler=\"$:/config/Manager/Sort\" default=\"title\">\n\t\t\t\t<optgroup label=\"Common\">\n\t\t\t\t\t<$list filter=\"title modified modifier created creator created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t\t<optgroup label=\"All\">\n\t\t\t\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}fields[]sort[title]] -title -modified -modifier -created -creator -created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t</$select>\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/Order\" field=\"text\" checked=\"reverse\" unchecked=\"forward\" default=\"forward\">\n\t\t\t\t<<lingo Controls/Order/Prompt>>\n\t\t\t</$checkbox>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/System\" field=\"text\" checked=\"\" unchecked=\"system\" default=\"system\">\n\t\t\t\t{{$:/language/SystemTiddlers/Include/Prompt}}\n\t\t\t</$checkbox>\n\t\t</div>\n\t</div>\n\t<div class=\"tc-manager-list\">\n\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}search{$:/config/Manager/Filter}tag:strict{$:/config/Manager/Tag}sort{$:/config/Manager/Sort}order{$:/config/Manager/Order}]\">\n\t\t\t<$vars transclusion=<<currentTiddler>>>\n\t\t\t\t<div style=\"tc-manager-list-item\">\n\t\t\t\t\t<$button popup=<<qualify \"$:/state/manager/popup\">> class=\"tc-btn-invisible tc-manager-list-item-heading\" selectedClass=\"tc-manager-list-item-heading-selected\">\n\t\t\t\t\t\t<$text text=<<currentTiddler>>/>\n\t\t\t\t\t</$button>\n\t\t\t\t\t<$reveal state=<<qualify \"$:/state/manager/popup\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-manager-list-item-content tc-popup-handle\">\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-tiddler\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemMain]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-sidebar\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemSidebar]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</$reveal>\n\t\t\t\t</div>\n\t\t\t</$vars>\n\t\t</$list>\n\t</div>\n</div>\n"
},
"$:/core/ui/MissingTemplate": {
"title": "$:/core/ui/MissingTemplate",
"text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
},
"$:/core/ui/MoreSideBar/All": {
"title": "$:/core/ui/MoreSideBar/All",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/All/Caption}}",
"text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Drafts": {
"title": "$:/core/ui/MoreSideBar/Drafts",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Drafts/Caption}}",
"text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Explorer": {
"title": "$:/core/ui/MoreSideBar/Explorer",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Explorer/Caption}}",
"text": "<<tree \"$:/\">>\n"
},
"$:/core/ui/MoreSideBar/Missing": {
"title": "$:/core/ui/MoreSideBar/Missing",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Missing/Caption}}",
"text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Orphans": {
"title": "$:/core/ui/MoreSideBar/Orphans",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Orphans/Caption}}",
"text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Languages": {
"title": "$:/core/ui/MoreSideBar/Plugins/Languages",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[language]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins/Plugins",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[plugin]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Theme": {
"title": "$:/core/ui/MoreSideBar/Plugins/Theme",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[theme]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/MoreSideBar/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\n{{$:/language/ControlPanel/Plugins/Installed/Hint}}\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar/Plugins]!has[draft.of]]\" default=\"$:/core/ui/MoreSideBar/Plugins/Plugins\" explicitState=\"$:/state/tab-1163638994\"/>\n"
},
"$:/core/ui/MoreSideBar/Recent": {
"title": "$:/core/ui/MoreSideBar/Recent",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/MoreSideBar/Shadows": {
"title": "$:/core/ui/MoreSideBar/Shadows",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Shadows/Caption}}",
"text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/System": {
"title": "$:/core/ui/MoreSideBar/System",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/System/Caption}}",
"text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Tags": {
"title": "$:/core/ui/MoreSideBar/Tags",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Tags/Caption}}",
"text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}}\n"
},
"$:/core/ui/MoreSideBar/Types": {
"title": "$:/core/ui/MoreSideBar/Types",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Types/Caption}}",
"text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
},
"$:/core/ui/Buttons/advanced-search": {
"title": "$:/core/ui/Buttons/advanced-search",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
"description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
"text": "\\whitespace trim\n\\define advanced-search-button(class)\n\\whitespace trim\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<advanced-search-button>>>\n<<advanced-search-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/close-all": {
"title": "$:/core/ui/Buttons/close-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
"description": "{{$:/language/Buttons/CloseAll/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/CloseAll/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/control-panel": {
"title": "$:/core/ui/Buttons/control-panel",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
"description": "{{$:/language/Buttons/ControlPanel/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n\\whitespace trim\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/encryption": {
"title": "$:/core/ui/Buttons/encryption",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
"description": "{{$:/language/Buttons/Encryption/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/export-page": {
"title": "$:/core/ui/Buttons/export-page",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
"description": "{{$:/language/Buttons/ExportPage/Hint}}",
"text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
},
"$:/core/ui/Buttons/fold-all": {
"title": "$:/core/ui/Buttons/fold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
"description": "{{$:/language/Buttons/FoldAll/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/FoldAll/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/full-screen": {
"title": "$:/core/ui/Buttons/full-screen",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
"description": "{{$:/language/Buttons/FullScreen/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/FullScreen/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/home": {
"title": "$:/core/ui/Buttons/home",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
"description": "{{$:/language/Buttons/Home/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Home/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/import": {
"title": "$:/core/ui/Buttons/import",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
"description": "{{$:/language/Buttons/Import/Hint}}",
"text": "\\whitespace trim\n<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Import/Caption}}/>\n</span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
},
"$:/core/ui/Buttons/language": {
"title": "$:/core/ui/Buttons/language",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
"description": "{{$:/language/Buttons/Language/Hint}}",
"text": "\\whitespace trim\n\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/languageswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/manager": {
"title": "$:/core/ui/Buttons/manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}",
"description": "{{$:/language/Buttons/Manager/Hint}}",
"text": "\\whitespace trim\n\\define manager-button(class)\n\\whitespace trim\n<$button to=\"$:/Manager\" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/list}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Manager/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/Manager]]\" emptyMessage=<<manager-button>>>\n<<manager-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/more-page-actions": {
"title": "$:/core/ui/Buttons/more-page-actions",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/More/Caption}}/>\n</span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-image": {
"title": "$:/core/ui/Buttons/new-image",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}",
"description": "{{$:/language/Buttons/NewImage/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-image}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-image-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewImage/Caption}}/>\n</span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/new-journal": {
"title": "$:/core/ui/Buttons/new-journal",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
"description": "{{$:/language/Buttons/NewJournal/Hint}}",
"text": "\\whitespace trim\n\\define journalButton()\n\\whitespace trim\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-journal}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewJournal/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n<<journalButton>>\n"
},
"$:/core/ui/Buttons/new-tiddler": {
"title": "$:/core/ui/Buttons/new-tiddler",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
"description": "{{$:/language/Buttons/NewTiddler/Hint}}",
"text": "\\whitespace trim\n<$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewTiddler/Caption}}/>\n</span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/palette": {
"title": "$:/core/ui/Buttons/palette",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}",
"description": "{{$:/language/Buttons/Palette/Hint}}",
"text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/palette\">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Palette/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/palette\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\" style=\"font-size:0.7em;\">\n{{$:/snippets/paletteswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/print": {
"title": "$:/core/ui/Buttons/print",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/print-button}} {{$:/language/Buttons/Print/Caption}}",
"description": "{{$:/language/Buttons/Print/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-print\" tooltip={{$:/language/Buttons/Print/Hint}} aria-label={{$:/language/Buttons/Print/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/print-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Print/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/refresh": {
"title": "$:/core/ui/Buttons/refresh",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
"description": "{{$:/language/Buttons/Refresh/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Refresh/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/save-wiki": {
"title": "$:/core/ui/Buttons/save-wiki",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
"description": "{{$:/language/Buttons/SaveWiki/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/SaveWiki/Caption}}/>\n</span>\n</$list>\n</span>\n</$button>"
},
"$:/core/ui/Buttons/storyview": {
"title": "$:/core/ui/Buttons/storyview",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
"description": "{{$:/language/Buttons/StoryView/Hint}}",
"text": "\\whitespace trim\n\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/viewswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/tag-manager": {
"title": "$:/core/ui/Buttons/tag-manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
"description": "{{$:/language/Buttons/TagManager/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n\\whitespace trim\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/TagManager/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/theme": {
"title": "$:/core/ui/Buttons/theme",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
"description": "{{$:/language/Buttons/Theme/Hint}}",
"text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n{{$:/snippets/themeswitcher}}\n</$linkcatcher>\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/timestamp": {
"title": "$:/core/ui/Buttons/timestamp",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}",
"description": "{{$:/language/Buttons/Timestamp/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"yes\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-on}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Timestamp/On/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/Off/Hint}} aria-label={{$:/language/Buttons/Timestamp/Off/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"no\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-off}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/unfold-all": {
"title": "$:/core/ui/Buttons/unfold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
"description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/UnfoldAll/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/PageTemplate/pagecontrols": {
"title": "$:/core/ui/PageTemplate/pagecontrols",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"hidden\" value=<<config-title>>>\n<$list filter=\"[<hidden>!text[hide]]\" storyview=\"pop\" variable=\"ignore\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$list>\n</$set>\n</$list>\n</div>\n"
},
"$:/core/ui/PageStylesheet": {
"title": "$:/core/ui/PageStylesheet",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/PageTemplate/alerts": {
"title": "$:/core/ui/PageTemplate/alerts",
"tags": "$:/tags/PageTemplate",
"text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
},
"$:/core/ui/PageTemplate/drafts": {
"title": "$:/core/ui/PageTemplate/drafts",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n<$reveal state=\"$:/status/IsReadOnly\" type=\"nomatch\" text=\"yes\" tag=\"div\" class=\"tc-drafts-list\">\n<$list filter=\"[has[draft.of]!sort[modified]] -[list[$:/StoryList]]\">\n<$link>\n{{$:/core/images/edit-button}} <$text text=<<currentTiddler>>/>\n</$link>\n</$list>\n</$reveal>\n"
},
"$:/core/ui/PageTemplate/pluginreloadwarning": {
"title": "$:/core/ui/PageTemplate/pluginreloadwarning",
"tags": "$:/tags/PageTemplate",
"text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[{$:/status/RequireReloadDueToPluginChange}match[yes]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n<div class=\"tc-plugin-reload-warning\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<<lingo PluginReloadWarning>> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}</$button>\n\n</$set>\n\n</div>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/PageTemplate/sidebar": {
"title": "$:/core/ui/PageTemplate/sidebar",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/SideBarSegments/Visibility/$(listItem)$\n\\end\n\n<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBarSegment]!has[draft.of]]\" variable=\"listItem\">\n\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\" tag=\"div\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n\n</$reveal>\n\n</$list>\n\n</$reveal>\n\n</div>\n\n</$scrollable>\n"
},
"$:/core/ui/PageTemplate/story": {
"title": "$:/core/ui/PageTemplate/story",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template={{$:/config/ui/ViewTemplate}} editTemplate={{$:/config/ui/EditTemplate}} storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
},
"$:/core/ui/PageTemplate/topleftbar": {
"title": "$:/core/ui/PageTemplate/topleftbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate/toprightbar": {
"title": "$:/core/ui/PageTemplate/toprightbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate": {
"title": "$:/core/ui/PageTemplate",
"name": "{{$:/language/PageTemplate/Name}}",
"description": "{{$:/language/PageTemplate/Description}}",
"text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$vars\n\ttv-config-toolbar-icons={{$:/config/Toolbar/Icons}}\n\ttv-config-toolbar-text={{$:/config/Toolbar/Text}}\n\ttv-config-toolbar-class={{$:/config/Toolbar/ButtonClass}}\n\ttv-enable-drag-and-drop={{$:/config/DragAndDrop/Enable}}\n\ttv-show-missing-links={{$:/config/MissingLinks}}\n\tstoryviewTitle={{$:/view}}\n\tlanguageTitle={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n\n<$dropzone enable=<<tv-enable-drag-and-drop>>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$vars>\n"
},
"$:/PaletteManager": {
"title": "$:/PaletteManager",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/></$transclude>\n\\end\n\\define edit-colour-placeholder()\n edit $(colourName)$\n\\end\n\\define colour-tooltip(showhide) $showhide$ editor for $(newColourName)$ \n\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define delete-colour-index-actions() <$action-setfield $index=<<colourName>>/>\n\\define palette-manager-colour-row-segment()\n\\whitespace trim\n<$edit-text index=<<colourName>> tag=\"input\" placeholder=<<edit-colour-placeholder>> default=\"\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\" class=\"tc-palette-manager-colour-input\"/>\n<$list filter=\"[<currentTiddler>getindex<colourName>removeprefix[<<]removesuffix[>>]] [<currentTiddler>getindex<colourName>removeprefix[<$]removesuffix[/>]]\" variable=\"ignore\">\n<$set name=\"state\" value={{{ [[$:/state/palettemanager/]addsuffix<currentTiddler>addsuffix[/]addsuffix<colourName>] }}}>\n<$wikify name=\"newColourName\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall={{{ [<currentTiddler>getindex<colourName>] }}}/>\"\"\">\n<$reveal state=<<state>> type=\"nomatch\" text=\"show\">\n<$button tooltip=<<colour-tooltip show>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" set=<<state>> setTo=\"show\">{{$:/core/images/down-arrow}}<$text text=<<newColourName>> class=\"tc-small-gap-left\"/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$button tooltip=<<colour-tooltip hide>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" actions=\"\"\"<$action-deletetiddler $tiddler=<<state>>/>\"\"\">{{$:/core/images/up-arrow}}<$text text=<<newColourName>> class=\"tc-small-gap-left\"/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$set name=\"colourName\" value=<<newColourName>>>\n<br>\n<<palette-manager-colour-row-segment>>\n<br><br>\n</$set>\n</$reveal>\n</$wikify>\n</$set>\n</$list>\n\\end\n\\define palette-manager-colour-row()\n\\whitespace trim\n<tr>\n<td>\n<span style=\"float:right;\">\n<$button tooltip={{$:/language/ControlPanel/Palette/Editor/Delete/Hint}} aria-label={{$:/language/ControlPanel/Palette/Editor/Delete/Hint}} class=\"tc-btn-invisible\" actions=<<delete-colour-index-actions>>>\n{{$:/core/images/delete-button}}</$button>\n</span>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<<palette-manager-colour-row-segment>>\n</td>\n</tr>\n\\end\n\\define palette-manager-table()\n\\whitespace trim\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]indexes[]]\" variable=\"colourName\">\n<$list filter=\"[<currentTiddler>indexes[]removeprefix<colourName>suffix[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[{$:/state/palettemanager/showexternal}removeprefix[yes]suffix[]]\" variable=\"ignore\">\n<<palette-manager-colour-row>>\n</$list>\n\"\"\">\n<<palette-manager-colour-row>>\n</$list>\n</$list>\n</tbody>\n</table>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<$checkbox tiddler=\"$:/state/palettemanager/showexternal\" field=\"text\" checked=\"yes\" unchecked=\"no\"><span class=\"tc-small-gap-left\"><<lingo Names/External/Show>></span></$checkbox>\n\n<<palette-manager-table>>\n"
},
"$:/core/ui/PluginInfo": {
"title": "$:/core/ui/PluginInfo",
"text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n\\define default-tiddler-title()\n$:/core/ui/PluginInfo/Default/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<default-tiddler-title>> mode=\"block\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\n</$transclude>\n</$transclude>\n</$transclude>\n</$transclude>\n"
},
"$:/core/ui/PluginInfo/Default/contents": {
"title": "$:/core/ui/PluginInfo/Default/contents",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link />\n</li>\n</$list>\n</ul>\n"
},
"$:/core/ui/PluginListItemTemplate": {
"title": "$:/core/ui/PluginListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}><$view field=\"description\"><$view field=\"title\"/></$view></$link>\n</div>"
},
"$:/core/ui/RootTemplate": {
"title": "$:/core/ui/RootTemplate",
"text": "<$transclude tiddler={{{ [{$:/layout}has[text]] ~[[$:/core/ui/PageTemplate]] }}} mode=\"inline\"/>\n\n"
},
"$:/core/ui/SearchResults": {
"title": "$:/core/ui/SearchResults",
"text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab/search-results/sidebar\"/>\n\n</$list>\n\n</div>\n"
},
"$:/core/ui/SideBar/More": {
"title": "$:/core/ui/SideBar/More",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/More/Caption}}",
"text": "<div class=\"tc-more-sidebar\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" default={{$:/config/DefaultMoreSidebarTab}} state=\"$:/state/tab/moresidebar\" class=\"tc-vertical tc-sidebar-tabs-more\" explicitState=\"$:/state/tab/moresidebar-1850697562\"/>\n</div>\n"
},
"$:/core/ui/SideBar/Open": {
"title": "$:/core/ui/SideBar/Open",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Open/Caption}}",
"text": "\\whitespace trim\n\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n<$action-listops $tiddler=<<tv-story-list>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define placeholder()\n<div class=\"tc-droppable-placeholder\"/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n<$droppable actions=<<drop-actions>> enable=<<tv-allow-drag-and-drop>>>\n<<placeholder>>\n<div>\n$button$\n</div>\n</$droppable>\n\\end\n\n<div class=\"tc-sidebar-tab-open\">\n<$list filter=\"[list<tv-story-list>]\" history=<<tv-history-list>> storyview=\"pop\">\n<div class=\"tc-sidebar-tab-open-item\">\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini tc-small-gap-right\">{{$:/core/images/close-button}}</$button><$link to={{!!title}}><$view field=\"title\"/></$link>\"\"\"/>\n</div>\n</$list>\n<$tiddler tiddler=\"\">\n<div>\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\"\"\"/>\n</div>\n</$tiddler>\n</div>\n"
},
"$:/core/ui/SideBar/Recent": {
"title": "$:/core/ui/SideBar/Recent",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/SideBar/Tools": {
"title": "$:/core/ui/SideBar/Tools",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/SideBarLists": {
"title": "$:/core/ui/SideBarLists",
"text": "<$transclude tiddler=\"$:/core/ui/SideBarSegments/search\"/>\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\"/>\n\n"
},
"$:/core/ui/SideBarSegments/page-controls": {
"title": "$:/core/ui/SideBarSegments/page-controls",
"tags": "$:/tags/SideBarSegment",
"text": "{{||$:/core/ui/PageTemplate/pagecontrols}}\n"
},
"$:/core/ui/SideBarSegments/search": {
"title": "$:/core/ui/SideBarSegments/search",
"tags": "$:/tags/SideBarSegment",
"text": "\\whitespace trim\n\n\\define count-popup-button()\n\\whitespace trim\n<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<$list filter=\"[{$(searchTiddler)$}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$vars userInput={{{ [<searchTiddler>get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} replaceRegexp=\"limit\\[\\d+\\]\">\n<$vars primaryListFilter={{{ [<configTiddler>get[first-search-filter]search-replace:g:regexp<replaceRegexp>,[]] }}} secondaryListFilter={{{ [<configTiddler>get[second-search-filter]search-replace:g:regexp<replaceRegexp>,[]] }}}>\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[subfilter<primaryListFilter>] [subfilter<secondaryListFilter>]\"/>\"\"\">\n{{$:/language/Search/Matches}}\n</$set>\n</$vars>\n</$vars>\n</$list>\n</$button>\n\\end\n\n\\define search-results-list()\n\\whitespace trim\n<$vars userInput={{$(searchTiddler)$}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}}>\n<$list filter=\"[<userInput>minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$tiddler tiddler=<<configTiddler>>>\n\n{{$:/core/ui/SearchResults}}\n\n</$tiddler>\n\n</$list>\n</$vars>\n\\end\n\n\\define cancel-search-actions() <$list filter=\"[<searchTiddler>get[text]!match{$:/temp/search}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/search]] [<searchTiddler>] [<searchListState>]\"/>\"\"\"><$action-setfield $tiddler=\"$:/temp/search\" text={{{ [<searchTiddler>get[text]] }}}/><$action-setfield $tiddler=\"$:/temp/search/refresh\" text=\"yes\"/></$list>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/sidebar\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define advanced-search-actions() <$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search/input}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/search/input}}/><<delete-state-tiddlers>><$action-navigate $to=\"$:/AdvancedSearch\"/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\" preventScroll=\"true\"/><$action-deletetiddler $filter=\"$:/temp/search $:/temp/search/input $:/temp/search/refresh [<searchListState>]\"/>\n\n<div class=\"tc-sidebar-lists tc-sidebar-search\">\n\n<$vars editTiddler=\"$:/temp/search\" searchTiddler=\"$:/temp/search/input\" searchListState=<<qualify \"$:/state/search-list/selected-item\">>>\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$keyboard key=\"((advanced-search-sidebar))\" actions=<<advanced-search-actions>>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<editTiddler>> storeTitle=<<searchTiddler>> \n\t\tselectionStateTitle=<<searchListState>> refreshTitle=\"$:/temp/search/refresh\" type=\"search\" \n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> \n\t\tclass=\"tc-popup-handle\" filterMinLength={{$:/config/Search/MinLength}} inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> cancelPopups=\"yes\" \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\"/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n<$reveal state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<<advanced-search-actions>>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>><$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n{{$:/core/images/close-button}}\n</$button>\n<<count-popup-button>>\n</$reveal>\n<$reveal state=<<searchTiddler>> type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n<<search-results-list>>\n\n</$reveal>\n\n</$reveal>\n\n</$vars>\n\n</div>\n"
},
"$:/core/ui/SideBarSegments/site-subtitle": {
"title": "$:/core/ui/SideBarSegments/site-subtitle",
"tags": "$:/tags/SideBarSegment",
"text": "<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n"
},
"$:/core/ui/SideBarSegments/site-title": {
"title": "$:/core/ui/SideBarSegments/site-title",
"tags": "$:/tags/SideBarSegment",
"text": "<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n"
},
"$:/core/ui/SideBarSegments/tabs": {
"title": "$:/core/ui/SideBarSegments/tabs",
"tags": "$:/tags/SideBarSegment",
"text": "<div class=\"tc-sidebar-lists tc-sidebar-tabs\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" class=\"tc-sidebar-tabs-main\" explicitState=\"$:/state/tab/sidebar--595412856\"/>\n\n</div>\n"
},
"$:/core/ui/SwitcherModal": {
"title": "$:/core/ui/SwitcherModal",
"subtitle": "<$text text={{{[<switch>lookup[$:/language/Switcher/Subtitle/]]}}}/>",
"class": "tc-modal-centered",
"text": "<$tiddler tiddler={{{[<switch>lookup[$:/config/SwitcherTargets/]]}}}>\n\n\n<$transclude/>\n\n\n</$tiddler>"
},
"$:/TagManager": {
"title": "$:/TagManager",
"icon": "$:/core/images/tag-button",
"color": "#bbb",
"text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n\\whitespace trim\n<$link to=\"\"><<lingo Icons/None>></$link>\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n\\whitespace trim\n<div class=\"tc-drop-down-wrapper\">\n<$button popupTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal stateTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=<<__title__>> icon=<<navigateTo>>/>\"\"\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define toggleButton(state)\n\\whitespace trim\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"closed\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"open\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n\\whitespace trim\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Count/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td>{{||$:/core/ui/TagTemplate}}</td>\n<td><$count filter=\"[all[current]tagging[]]\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal stateTitle={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n</tr>\n</$list>\n<tr>\n<td></td>\n<td style=\"position:relative;\">\n{{$:/core/ui/UntaggedTemplate}}\n</td>\n<td>\n<small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n</td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n"
},
"$:/core/ui/TagPickerTagTemplate": {
"title": "$:/core/ui/TagPickerTagTemplate",
"text": "\\whitespace trim\n<$button class=<<button-classes>> tag=\"a\" tooltip={{$:/language/EditTemplate/Tags/Add/Button/Hint}}>\n<$list filter=\"[<saveTiddler>minlength[1]]\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<tagField>> $subfilter=\"[<tag>]\"/>\n</$list>\n<$set name=\"currentTiddlerCSSEscaped\" value={{{ [<saveTiddler>escapecss[]] }}}>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-tagpicker-focus-selector>> preventScroll=\"true\"/>\n</$set>\n<<delete-tag-state-tiddlers>>\n<$list filter=\"[<refreshTitle>minlength[1]]\">\n<$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n<<actions>>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<$wikify name=\"foregroundColor\" text=\"\"\"<$macrocall $name=\"contrastcolour\" target={{!!color}} fallbackTarget=<<fallbackTarget>> colourA=<<colourA>> colourB=<<colourB>>/>\"\"\">\n<span class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n<$transclude tiddler={{!!icon}}/><$view field=\"title\" format=\"text\"/>\n</span>\n</$wikify>\n</$set>\n</$button>\n"
},
"$:/core/ui/TagTemplate": {
"title": "$:/core/ui/TagTemplate",
"text": "\\whitespace trim\n<span class=\"tc-tag-list-item\" data-tag-title=<<currentTiddler>>>\n<$set name=\"transclusion\" value=<<currentTiddler>>>\n<$macrocall $name=\"tag-pill-body\" tag=<<currentTiddler>> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag=\"\"\"$button\"\"\" element-attributes=\"\"\"popup=<<qualify \"$:/state/popup/tag\">> dragFilter='[all[current]tagging[]]' tag='span'\"\"\"/>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\" class=\"tc-drop-down\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</$set>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<<listItem>>/> \n</$list>\n<hr>\n<$macrocall $name=\"list-tagged-draggable\" tag=<<currentTiddler>>/>\n</$reveal>\n</$set>\n</span>\n"
},
"$:/core/ui/TiddlerFields": {
"title": "$:/core/ui/TiddlerFields",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/core/ui/TiddlerFieldTemplate": {
"title": "$:/core/ui/TiddlerFieldTemplate",
"text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
},
"$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
},
"$:/core/ui/TiddlerInfo/Advanced": {
"title": "$:/core/ui/TiddlerInfo/Advanced",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Fields": {
"title": "$:/core/ui/TiddlerInfo/Fields",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
"text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
},
"$:/core/ui/TiddlerInfo/List": {
"title": "$:/core/ui/TiddlerInfo/List",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/List/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Listed": {
"title": "$:/core/ui/TiddlerInfo/Listed",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/References": {
"title": "$:/core/ui/TiddlerInfo/References",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/References/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>"
},
"$:/core/ui/TiddlerInfo/Tagging": {
"title": "$:/core/ui/TiddlerInfo/Tagging",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Tools": {
"title": "$:/core/ui/TiddlerInfo/Tools",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/TiddlerInfo": {
"title": "$:/core/ui/TiddlerInfo",
"text": "<div style=\"position:relative;\">\n<div class=\"tc-tiddler-controls\" style=\"position:absolute;right:0;\">\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n</div>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>\n"
},
"$:/core/ui/TopBar/menu": {
"title": "$:/core/ui/TopBar/menu",
"tags": "$:/tags/TopRightBar",
"text": "<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]!match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible tc-hide-sidebar-btn\">{{$:/core/images/chevron-right}}</$button>\n</$list>\n<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible tc-show-sidebar-btn\">{{$:/core/images/chevron-left}}</$button>\n</$list>\n"
},
"$:/core/ui/UntaggedTemplate": {
"title": "$:/core/ui/UntaggedTemplate",
"text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/body": {
"title": "$:/core/ui/ViewTemplate/body",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/classic": {
"title": "$:/core/ui/ViewTemplate/classic",
"tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
},
"$:/core/ui/ViewTemplate/import": {
"title": "$:/core/ui/ViewTemplate/import",
"tags": "$:/tags/ViewTemplate",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define buttons()\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n<<lingo Listing/Preview>> <$select tiddler=\"$:/state/importpreviewtype\" default=\"$:/core/ui/ImportPreviews/Text\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ImportPreview]!has[draft.of]]\">\n<option value=<<currentTiddler>>>{{!!caption}}</option>\n</$list>\n</$select>\n\\end\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n<<buttons>>\n\n{{||$:/core/ui/ImportListing}}\n\n<<buttons>>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ViewTemplate/plugin": {
"title": "$:/core/ui/ViewTemplate/plugin",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" class=\"tc-tiddler-plugin-info\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n<$set name=\"plugin-type\" value={{!!plugin-type}}>\n<$set name=\"default-popup-state\" value=\"yes\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n{{||$:/core/ui/Components/plugin-info}}\n</$set>\n</$set>\n</$set>\n</$list>\n</$reveal>"
},
"$:/core/ui/ViewTemplate/subtitle": {
"title": "$:/core/ui/ViewTemplate/subtitle",
"tags": "$:/tags/ViewTemplate",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}} />\n<$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/tags": {
"title": "$:/core/ui/ViewTemplate/tags",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/title": {
"title": "$:/core/ui/ViewTemplate/title",
"tags": "$:/tags/ViewTemplate",
"text": "\\whitespace trim\n\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<<listItem>>/></$set></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<$list filter=\"[all[current]has[icon]]~[[$:/config/DefaultTiddlerIcon]has[text]]\">\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}>\n<$transclude tiddler={{$:/config/DefaultTiddlerIcon}}/>\n</$transclude>\n</span>\n</$list>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</$link>\n</$set>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfoSegment]!has[draft.of]] [[$:/core/ui/TiddlerInfo]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>> mode=\"block\"/></$list>\n\n</$reveal>\n</div>"
},
"$:/core/ui/ViewTemplate/unfold": {
"title": "$:/core/ui/ViewTemplate/unfold",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate": {
"title": "$:/core/ui/ViewTemplate",
"text": "\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n\\define cancel-delete-tiddler-actions(message) <$action-sendmessage $message=\"tm-$message$-tiddler\"/>\n\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$vars storyTiddler=<<currentTiddler>> tiddlerInfoState=<<qualify \"$:/state/popup/tiddler-info\">>><div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-view-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[shadow]is[tiddler]then[tc-tiddler-overridden-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$vars>\n"
},
"$:/core/ui/Buttons/clone": {
"title": "$:/core/ui/Buttons/clone",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
"description": "{{$:/language/Buttons/Clone/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Clone/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close-others": {
"title": "$:/core/ui/Buttons/close-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
"description": "{{$:/language/Buttons/CloseOthers/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/CloseOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close": {
"title": "$:/core/ui/Buttons/close",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
"description": "{{$:/language/Buttons/Close/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Close/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/edit": {
"title": "$:/core/ui/Buttons/edit",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
"description": "{{$:/language/Buttons/Edit/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Edit/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/export-tiddler": {
"title": "$:/core/ui/Buttons/export-tiddler",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
"description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
"text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
},
"$:/core/ui/Buttons/fold-bar": {
"title": "$:/core/ui/Buttons/fold-bar",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Fold/FoldBar/Caption}}",
"description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
"text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
},
"$:/core/ui/Buttons/fold-others": {
"title": "$:/core/ui/Buttons/fold-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
"description": "{{$:/language/Buttons/FoldOthers/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/FoldOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/fold": {
"title": "$:/core/ui/Buttons/fold",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
"description": "{{$:/language/Buttons/Fold/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/info": {
"title": "$:/core/ui/Buttons/info",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
"description": "{{$:/language/Buttons/Info/Hint}}",
"text": "\\whitespace trim\n\\define button-content()\n\\whitespace trim\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Info/Caption}}/>\n</span>\n</$list>\n\\end\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"popup\">\n<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$reveal state=<<tiddlerInfoState>> type=\"match\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"yes\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=<<tiddlerInfoState>> type=\"nomatch\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n</$reveal>"
},
"$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/core/ui/Buttons/more-tiddler-actions",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/More/Caption}}/>\n</span>\n</$list>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-here": {
"title": "$:/core/ui/Buttons/new-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
"description": "{{$:/language/Buttons/NewHere/Hint}}",
"text": "\\whitespace trim\n\\define newHereActions()\n<$set name=\"tags\" filter=\"[<currentTiddler>] [{$:/config/NewTiddler/Tags}]\">\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<tags>>/>\n</$set>\n\\end\n\\define newHereButton()\n\\whitespace trim\n<$button actions=<<newHereActions>> tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewHere/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>\n"
},
"$:/core/ui/Buttons/new-journal-here": {
"title": "$:/core/ui/Buttons/new-journal-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
"description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
"text": "\\whitespace trim\n\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n\\whitespace trim\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewJournalHere/Caption}}/>\n</span>\n</$list>\n</$wikify>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set>\n</$set>\n</$set>\n"
},
"$:/core/ui/Buttons/open-window": {
"title": "$:/core/ui/Buttons/open-window",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}",
"description": "{{$:/language/Buttons/OpenWindow/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/OpenWindow/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permalink": {
"title": "$:/core/ui/Buttons/permalink",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
"description": "{{$:/language/Buttons/Permalink/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Permalink/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permaview": {
"title": "$:/core/ui/Buttons/permaview",
"tags": "$:/tags/ViewToolbar $:/tags/PageControls",
"caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
"description": "{{$:/language/Buttons/Permaview/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Permaview/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/temp/advancedsearch": {
"title": "$:/temp/advancedsearch",
"text": ""
},
"$:/snippets/allfields": {
"title": "$:/snippets/allfields",
"text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
},
"$:/config/AnimationDuration": {
"title": "$:/config/AnimationDuration",
"text": "400"
},
"$:/config/AutoFocus": {
"title": "$:/config/AutoFocus",
"text": "title"
},
"$:/config/AutoSave": {
"title": "$:/config/AutoSave",
"text": "yes"
},
"$:/config/BitmapEditor/Colour": {
"title": "$:/config/BitmapEditor/Colour",
"text": "#444"
},
"$:/config/BitmapEditor/ImageSizes": {
"title": "$:/config/BitmapEditor/ImageSizes",
"text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]"
},
"$:/config/BitmapEditor/LineWidth": {
"title": "$:/config/BitmapEditor/LineWidth",
"text": "3px"
},
"$:/config/BitmapEditor/LineWidths": {
"title": "$:/config/BitmapEditor/LineWidths",
"text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px"
},
"$:/config/BitmapEditor/Opacities": {
"title": "$:/config/BitmapEditor/Opacities",
"text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0"
},
"$:/config/BitmapEditor/Opacity": {
"title": "$:/config/BitmapEditor/Opacity",
"text": "1.0"
},
"$:/config/DefaultMoreSidebarTab": {
"title": "$:/config/DefaultMoreSidebarTab",
"text": "$:/core/ui/MoreSideBar/Tags"
},
"$:/config/DefaultSidebarTab": {
"title": "$:/config/DefaultSidebarTab",
"text": "$:/core/ui/SideBar/Open"
},
"$:/config/DownloadSaver/AutoSave": {
"title": "$:/config/DownloadSaver/AutoSave",
"text": "no"
},
"$:/config/Drafts/TypingTimeout": {
"title": "$:/config/Drafts/TypingTimeout",
"text": "400"
},
"$:/config/EditMode/fieldname-filter": {
"title": "$:/config/EditMode/fieldname-filter",
"first-search-filter": "[!is[shadow]!is[system]fields[]search:title<userInput>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type",
"second-search-filter": "[fields[]search:title<userInput>sort[]] -[!is[shadow]!is[system]fields[]]"
},
"$:/config/Editor/EnableImportFilter": {
"title": "$:/config/Editor/EnableImportFilter",
"type": "text/vnd.tiddlywiki",
"text": "[all[current]type[text/vnd.tiddlywiki]] [all[current]!has[type]]"
},
"$:/config/Editor/ImportContentTypesFilter": {
"title": "$:/config/Editor/ImportContentTypesFilter",
"type": "text/vnd.tiddlywiki",
"text": "[prefix[image/]]"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6",
"text": "hide"
},
"$:/config/EditorTypeMappings/image/gif": {
"title": "$:/config/EditorTypeMappings/image/gif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/webp": {
"title": "$:/config/EditorTypeMappings/image/webp",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/heic": {
"title": "$:/config/EditorTypeMappings/image/heic",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/heif": {
"title": "$:/config/EditorTypeMappings/image/heif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpeg": {
"title": "$:/config/EditorTypeMappings/image/jpeg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpg": {
"title": "$:/config/EditorTypeMappings/image/jpg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/png": {
"title": "$:/config/EditorTypeMappings/image/png",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/x-icon": {
"title": "$:/config/EditorTypeMappings/image/x-icon",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
"text": "text"
},
"$:/config/EditTabIndex": {
"title": "$:/config/EditTabIndex",
"text": "1\n"
},
"$:/config/EditTemplateFields/Visibility/title": {
"title": "$:/config/EditTemplateFields/Visibility/title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/tags": {
"title": "$:/config/EditTemplateFields/Visibility/tags",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/text": {
"title": "$:/config/EditTemplateFields/Visibility/text",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/creator": {
"title": "$:/config/EditTemplateFields/Visibility/creator",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/created": {
"title": "$:/config/EditTemplateFields/Visibility/created",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modified": {
"title": "$:/config/EditTemplateFields/Visibility/modified",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modifier": {
"title": "$:/config/EditTemplateFields/Visibility/modifier",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/type": {
"title": "$:/config/EditTemplateFields/Visibility/type",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.title": {
"title": "$:/config/EditTemplateFields/Visibility/draft.title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.of": {
"title": "$:/config/EditTemplateFields/Visibility/draft.of",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/revision": {
"title": "$:/config/EditTemplateFields/Visibility/revision",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/bag": {
"title": "$:/config/EditTemplateFields/Visibility/bag",
"text": "hide"
},
"$:/config/Manager/Show": {
"title": "$:/config/Manager/Show",
"text": "tiddlers"
},
"$:/config/Manager/Filter": {
"title": "$:/config/Manager/Filter",
"text": ""
},
"$:/config/Manager/Order": {
"title": "$:/config/Manager/Order",
"text": "forward"
},
"$:/config/Manager/Sort": {
"title": "$:/config/Manager/Sort",
"text": "title"
},
"$:/config/Manager/System": {
"title": "$:/config/Manager/System",
"text": "system"
},
"$:/config/Manager/Tag": {
"title": "$:/config/Manager/Tag",
"text": ""
},
"$:/state/popup/manager/item/$:/Manager/ItemMain/RawText": {
"title": "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText",
"text": "hide"
},
"$:/config/MissingLinks": {
"title": "$:/config/MissingLinks",
"text": "yes"
},
"$:/config/Navigation/UpdateAddressBar": {
"title": "$:/config/Navigation/UpdateAddressBar",
"text": "no"
},
"$:/config/Navigation/UpdateHistory": {
"title": "$:/config/Navigation/UpdateHistory",
"text": "no"
},
"$:/config/NewImageType": {
"title": "$:/config/NewImageType",
"text": "jpeg"
},
"$:/config/OfficialPluginLibrary": {
"title": "$:/config/OfficialPluginLibrary",
"tags": "$:/tags/PluginLibrary",
"url": "https://tiddlywiki.com/library/v5.1.24/index.html",
"caption": "{{$:/language/OfficialPluginLibrary}}",
"text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
},
"$:/config/Navigation/openLinkFromInsideRiver": {
"title": "$:/config/Navigation/openLinkFromInsideRiver",
"text": "below"
},
"$:/config/Navigation/openLinkFromOutsideRiver": {
"title": "$:/config/Navigation/openLinkFromOutsideRiver",
"text": "top"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
"text": "hide"
},
"$:/config/Performance/Instrumentation": {
"title": "$:/config/Performance/Instrumentation",
"text": "no"
},
"$:/config/RegisterPluginType/plugin": {
"title": "$:/config/RegisterPluginType/plugin",
"text": "yes"
},
"$:/config/RegisterPluginType/theme": {
"title": "$:/config/RegisterPluginType/theme",
"text": "no"
},
"$:/config/RegisterPluginType/language": {
"title": "$:/config/RegisterPluginType/language",
"text": "no"
},
"$:/config/RegisterPluginType/info": {
"title": "$:/config/RegisterPluginType/info",
"text": "yes"
},
"$:/config/RegisterPluginType/import": {
"title": "$:/config/RegisterPluginType/import",
"text": "no"
},
"$:/config/SaverFilter": {
"title": "$:/config/SaverFilter",
"text": "[all[]] -[prefix[$:/HistoryList]] -[prefix[$:/StoryList]] -[status[pending]plugin-type[import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]\n"
},
"$:/config/SaveWikiButton/Template": {
"title": "$:/config/SaveWikiButton/Template",
"text": "$:/core/save/all"
},
"$:/config/Search/AutoFocus": {
"title": "$:/config/Search/AutoFocus",
"text": "true"
},
"$:/config/Search/MinLength": {
"title": "$:/config/Search/MinLength",
"text": "3"
},
"$:/config/SearchResults/Default": {
"title": "$:/config/SearchResults/Default",
"text": "$:/core/ui/DefaultSearchResultList"
},
"$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]": {
"title": "$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]",
"text": "yes"
},
"$:/config/ShortcutInfo/add-field": {
"title": "$:/config/ShortcutInfo/add-field",
"text": "{{$:/language/EditTemplate/Fields/Add/Button/Hint}}"
},
"$:/config/ShortcutInfo/advanced-search": {
"title": "$:/config/ShortcutInfo/advanced-search",
"text": "{{$:/language/Buttons/AdvancedSearch/Hint}}"
},
"$:/config/ShortcutInfo/advanced-search-sidebar": {
"title": "$:/config/ShortcutInfo/advanced-search-sidebar",
"text": "{{$:/language/Shortcuts/Input/AdvancedSearch/Hint}}"
},
"$:/config/ShortcutInfo/bold": {
"title": "$:/config/ShortcutInfo/bold",
"text": "{{$:/language/Buttons/Bold/Hint}}"
},
"$:/config/ShortcutInfo/cancel-edit-tiddler": {
"title": "$:/config/ShortcutInfo/cancel-edit-tiddler",
"text": "{{$:/language/Buttons/Cancel/Hint}}"
},
"$:/config/ShortcutInfo/change-sidebar-layout": {
"title": "$:/config/ShortcutInfo/change-sidebar-layout",
"text": "{{$:/language/Shortcuts/SidebarLayout/Hint}}"
},
"$:/config/ShortcutInfo/delete-field": {
"title": "$:/config/ShortcutInfo/delete-field",
"text": "{{$:/language/EditTemplate/Field/Remove/Hint}}"
},
"$:/config/ShortcutInfo/excise": {
"title": "$:/config/ShortcutInfo/excise",
"text": "{{$:/language/Buttons/Excise/Hint}}"
},
"$:/config/ShortcutInfo/heading-1": {
"title": "$:/config/ShortcutInfo/heading-1",
"text": "{{$:/language/Buttons/Heading1/Hint}}"
},
"$:/config/ShortcutInfo/heading-2": {
"title": "$:/config/ShortcutInfo/heading-2",
"text": "{{$:/language/Buttons/Heading2/Hint}}"
},
"$:/config/ShortcutInfo/heading-3": {
"title": "$:/config/ShortcutInfo/heading-3",
"text": "{{$:/language/Buttons/Heading3/Hint}}"
},
"$:/config/ShortcutInfo/heading-4": {
"title": "$:/config/ShortcutInfo/heading-4",
"text": "{{$:/language/Buttons/Heading4/Hint}}"
},
"$:/config/ShortcutInfo/heading-5": {
"title": "$:/config/ShortcutInfo/heading-5",
"text": "{{$:/language/Buttons/Heading5/Hint}}"
},
"$:/config/ShortcutInfo/heading-6": {
"title": "$:/config/ShortcutInfo/heading-6",
"text": "{{$:/language/Buttons/Heading6/Hint}}"
},
"$:/config/ShortcutInfo/input-accept": {
"title": "$:/config/ShortcutInfo/input-accept",
"text": "{{$:/language/Shortcuts/Input/Accept/Hint}}"
},
"$:/config/ShortcutInfo/input-accept-variant": {
"title": "$:/config/ShortcutInfo/input-accept-variant",
"text": "{{$:/language/Shortcuts/Input/AcceptVariant/Hint}}"
},
"$:/config/ShortcutInfo/input-cancel": {
"title": "$:/config/ShortcutInfo/input-cancel",
"text": "{{$:/language/Shortcuts/Input/Cancel/Hint}}"
},
"$:/config/ShortcutInfo/input-down": {
"title": "$:/config/ShortcutInfo/input-down",
"text": "{{$:/language/Shortcuts/Input/Down/Hint}}"
},
"$:/config/ShortcutInfo/input-tab-left": {
"title": "$:/config/ShortcutInfo/input-tab-left",
"text": "{{$:/language/Shortcuts/Input/Tab-Left/Hint}}"
},
"$:/config/ShortcutInfo/input-tab-right": {
"title": "$:/config/ShortcutInfo/input-tab-right",
"text": "{{$:/language/Shortcuts/Input/Tab-Right/Hint}}"
},
"$:/config/ShortcutInfo/input-up": {
"title": "$:/config/ShortcutInfo/input-up",
"text": "{{$:/language/Shortcuts/Input/Up/Hint}}"
},
"$:/config/ShortcutInfo/italic": {
"title": "$:/config/ShortcutInfo/italic",
"text": "{{$:/language/Buttons/Italic/Hint}}"
},
"$:/config/ShortcutInfo/layout-switcher": {
"title": "$:/config/ShortcutInfo/layout-switcher",
"text": "{{$:/language/LayoutSwitcher/Description}}"
},
"$:/config/ShortcutInfo/link": {
"title": "$:/config/ShortcutInfo/link",
"text": "{{$:/language/Buttons/Link/Hint}}"
},
"$:/config/ShortcutInfo/linkify": {
"title": "$:/config/ShortcutInfo/linkify",
"text": "{{$:/language/Buttons/Linkify/Hint}}"
},
"$:/config/ShortcutInfo/list-bullet": {
"title": "$:/config/ShortcutInfo/list-bullet",
"text": "{{$:/language/Buttons/ListBullet/Hint}}"
},
"$:/config/ShortcutInfo/list-number": {
"title": "$:/config/ShortcutInfo/list-number",
"text": "{{$:/language/Buttons/ListNumber/Hint}}"
},
"$:/config/ShortcutInfo/mono-block": {
"title": "$:/config/ShortcutInfo/mono-block",
"text": "{{$:/language/Buttons/MonoBlock/Hint}}"
},
"$:/config/ShortcutInfo/mono-line": {
"title": "$:/config/ShortcutInfo/mono-line",
"text": "{{$:/language/Buttons/MonoLine/Hint}}"
},
"$:/config/ShortcutInfo/new-image": {
"title": "$:/config/ShortcutInfo/new-image",
"text": "{{$:/language/Buttons/NewImage/Hint}}"
},
"$:/config/ShortcutInfo/new-journal": {
"title": "$:/config/ShortcutInfo/new-journal",
"text": "{{$:/language/Buttons/NewJournal/Hint}}"
},
"$:/config/ShortcutInfo/new-tiddler": {
"title": "$:/config/ShortcutInfo/new-tiddler",
"text": "{{$:/language/Buttons/NewTiddler/Hint}}"
},
"$:/config/ShortcutInfo/picture": {
"title": "$:/config/ShortcutInfo/picture",
"text": "{{$:/language/Buttons/Picture/Hint}}"
},
"$:/config/ShortcutInfo/preview": {
"title": "$:/config/ShortcutInfo/preview",
"text": "{{$:/language/Buttons/Preview/Hint}}"
},
"$:/config/ShortcutInfo/quote": {
"title": "$:/config/ShortcutInfo/quote",
"text": "{{$:/language/Buttons/Quote/Hint}}"
},
"$:/config/ShortcutInfo/save-tiddler": {
"title": "$:/config/ShortcutInfo/save-tiddler",
"text": "{{$:/language/Buttons/Save/Hint}}"
},
"$:/config/ShortcutInfo/save-wiki": {
"title": "$:/config/ShortcutInfo/save-wiki",
"text": "{{$:/language/Buttons/SaveWiki/Hint}}"
},
"$:/config/ShortcutInfo/sidebar-search": {
"title": "$:/config/ShortcutInfo/sidebar-search",
"text": "{{$:/language/Buttons/SidebarSearch/Hint}}"
},
"$:/config/ShortcutInfo/stamp": {
"title": "$:/config/ShortcutInfo/stamp",
"text": "{{$:/language/Buttons/Stamp/Hint}}"
},
"$:/config/ShortcutInfo/strikethrough": {
"title": "$:/config/ShortcutInfo/strikethrough",
"text": "{{$:/language/Buttons/Strikethrough/Hint}}"
},
"$:/config/ShortcutInfo/subscript": {
"title": "$:/config/ShortcutInfo/subscript",
"text": "{{$:/language/Buttons/Subscript/Hint}}"
},
"$:/config/ShortcutInfo/superscript": {
"title": "$:/config/ShortcutInfo/superscript",
"text": "{{$:/language/Buttons/Superscript/Hint}}"
},
"$:/config/ShortcutInfo/toggle-sidebar": {
"title": "$:/config/ShortcutInfo/toggle-sidebar",
"text": "{{$:/language/Buttons/ToggleSidebar/Hint}}"
},
"$:/config/ShortcutInfo/transcludify": {
"title": "$:/config/ShortcutInfo/transcludify",
"text": "{{$:/language/Buttons/Transcludify/Hint}}"
},
"$:/config/ShortcutInfo/underline": {
"title": "$:/config/ShortcutInfo/underline",
"text": "{{$:/language/Buttons/Underline/Hint}}"
},
"$:/config/shortcuts-mac/bold": {
"title": "$:/config/shortcuts-mac/bold",
"text": "meta-B"
},
"$:/config/shortcuts-mac/input-tab-left": {
"title": "$:/config/shortcuts-mac/input-tab-left",
"text": "ctrl-Left"
},
"$:/config/shortcuts-mac/input-tab-right": {
"title": "$:/config/shortcuts-mac/input-tab-right",
"text": "ctrl-Right"
},
"$:/config/shortcuts-mac/italic": {
"title": "$:/config/shortcuts-mac/italic",
"text": "meta-I"
},
"$:/config/shortcuts-mac/underline": {
"title": "$:/config/shortcuts-mac/underline",
"text": "meta-U"
},
"$:/config/shortcuts-mac/new-image": {
"title": "$:/config/shortcuts-mac/new-image",
"text": "ctrl-I"
},
"$:/config/shortcuts-mac/new-journal": {
"title": "$:/config/shortcuts-mac/new-journal",
"text": "ctrl-J"
},
"$:/config/shortcuts-mac/new-tiddler": {
"title": "$:/config/shortcuts-mac/new-tiddler",
"text": "ctrl-N"
},
"$:/config/shortcuts-mac/save-wiki": {
"title": "$:/config/shortcuts-mac/save-wiki",
"text": "meta-S"
},
"$:/config/shortcuts-not-mac/bold": {
"title": "$:/config/shortcuts-not-mac/bold",
"text": "ctrl-B"
},
"$:/config/shortcuts-not-mac/italic": {
"title": "$:/config/shortcuts-not-mac/italic",
"text": "ctrl-I"
},
"$:/config/shortcuts-not-mac/underline": {
"title": "$:/config/shortcuts-not-mac/underline",
"text": "ctrl-U"
},
"$:/config/shortcuts-not-mac/new-image": {
"title": "$:/config/shortcuts-not-mac/new-image",
"text": "alt-I"
},
"$:/config/shortcuts-not-mac/new-journal": {
"title": "$:/config/shortcuts-not-mac/new-journal",
"text": "alt-J"
},
"$:/config/shortcuts-not-mac/new-tiddler": {
"title": "$:/config/shortcuts-not-mac/new-tiddler",
"text": "alt-N"
},
"$:/config/shortcuts/add-field": {
"title": "$:/config/shortcuts/add-field",
"text": "enter"
},
"$:/config/shortcuts/advanced-search": {
"title": "$:/config/shortcuts/advanced-search",
"text": "ctrl-shift-A"
},
"$:/config/shortcuts/advanced-search-sidebar": {
"title": "$:/config/shortcuts/advanced-search-sidebar",
"text": "alt-Enter"
},
"$:/config/shortcuts/cancel-edit-tiddler": {
"title": "$:/config/shortcuts/cancel-edit-tiddler",
"text": "escape"
},
"$:/config/shortcuts/change-sidebar-layout": {
"title": "$:/config/shortcuts/change-sidebar-layout",
"text": "shift-alt-Down"
},
"$:/config/shortcuts/delete-field": {
"title": "$:/config/shortcuts/delete-field",
"text": "shift-alt-D"
},
"$:/config/shortcuts/excise": {
"title": "$:/config/shortcuts/excise",
"text": "ctrl-E"
},
"$:/config/shortcuts/sidebar-search": {
"title": "$:/config/shortcuts/sidebar-search",
"text": "ctrl-shift-F"
},
"$:/config/shortcuts/heading-1": {
"title": "$:/config/shortcuts/heading-1",
"text": "ctrl-1"
},
"$:/config/shortcuts/heading-2": {
"title": "$:/config/shortcuts/heading-2",
"text": "ctrl-2"
},
"$:/config/shortcuts/heading-3": {
"title": "$:/config/shortcuts/heading-3",
"text": "ctrl-3"
},
"$:/config/shortcuts/heading-4": {
"title": "$:/config/shortcuts/heading-4",
"text": "ctrl-4"
},
"$:/config/shortcuts/heading-5": {
"title": "$:/config/shortcuts/heading-5",
"text": "ctrl-5"
},
"$:/config/shortcuts/heading-6": {
"title": "$:/config/shortcuts/heading-6",
"text": "ctrl-6"
},
"$:/config/shortcuts/input-accept": {
"title": "$:/config/shortcuts/input-accept",
"text": "Enter"
},
"$:/config/shortcuts/input-accept-variant": {
"title": "$:/config/shortcuts/input-accept-variant",
"text": "ctrl-Enter"
},
"$:/config/shortcuts/input-cancel": {
"title": "$:/config/shortcuts/input-cancel",
"text": "Escape"
},
"$:/config/shortcuts/input-down": {
"title": "$:/config/shortcuts/input-down",
"text": "Down"
},
"$:/config/shortcuts/input-tab-left": {
"title": "$:/config/shortcuts/input-tab-left",
"text": "alt-Left"
},
"$:/config/shortcuts/input-tab-right": {
"title": "$:/config/shortcuts/input-tab-right",
"text": "alt-Right"
},
"$:/config/shortcuts/input-up": {
"title": "$:/config/shortcuts/input-up",
"text": "Up"
},
"$:/config/shortcuts/layout-switcher": {
"title": "$:/config/shortcuts/layout-switcher",
"text": "ctrl-shift-L"
},
"$:/config/shortcuts/link": {
"title": "$:/config/shortcuts/link",
"text": "ctrl-L"
},
"$:/config/shortcuts/linkify": {
"title": "$:/config/shortcuts/linkify",
"text": "alt-shift-L"
},
"$:/config/shortcuts/list-bullet": {
"title": "$:/config/shortcuts/list-bullet",
"text": "ctrl-shift-L"
},
"$:/config/shortcuts/list-number": {
"title": "$:/config/shortcuts/list-number",
"text": "ctrl-shift-N"
},
"$:/config/shortcuts/mono-block": {
"title": "$:/config/shortcuts/mono-block",
"text": "ctrl-shift-M"
},
"$:/config/shortcuts/mono-line": {
"title": "$:/config/shortcuts/mono-line",
"text": "ctrl-M"
},
"$:/config/shortcuts/picture": {
"title": "$:/config/shortcuts/picture",
"text": "ctrl-shift-I"
},
"$:/config/shortcuts/preview": {
"title": "$:/config/shortcuts/preview",
"text": "alt-P"
},
"$:/config/shortcuts/quote": {
"title": "$:/config/shortcuts/quote",
"text": "ctrl-Q"
},
"$:/config/shortcuts/save-tiddler": {
"title": "$:/config/shortcuts/save-tiddler",
"text": "ctrl+enter"
},
"$:/config/shortcuts/save-wiki": {
"title": "$:/config/shortcuts/save-wiki",
"text": "ctrl-S"
},
"$:/config/shortcuts/stamp": {
"title": "$:/config/shortcuts/stamp",
"text": "ctrl-S"
},
"$:/config/shortcuts/strikethrough": {
"title": "$:/config/shortcuts/strikethrough",
"text": "ctrl-T"
},
"$:/config/shortcuts/subscript": {
"title": "$:/config/shortcuts/subscript",
"text": "ctrl-shift-B"
},
"$:/config/shortcuts/superscript": {
"title": "$:/config/shortcuts/superscript",
"text": "ctrl-shift-P"
},
"$:/config/shortcuts/toggle-sidebar": {
"title": "$:/config/shortcuts/toggle-sidebar",
"text": "alt-shift-S"
},
"$:/config/shortcuts/transcludify": {
"title": "$:/config/shortcuts/transcludify",
"text": "alt-shift-T"
},
"$:/config/SwitcherTargets/layout": {
"title": "$:/config/SwitcherTargets/layout",
"text": "$:/snippets/LayoutSwitcher"
},
"$:/config/SwitcherTargets/language": {
"title": "$:/config/SwitcherTargets/language",
"text": "$:/snippets/languageswitcher"
},
"$:/config/SwitcherTargets/palette": {
"title": "$:/config/SwitcherTargets/palette",
"text": "$:/core/ui/ControlPanel/Palette"
},
"$:/config/SwitcherTargets/theme": {
"title": "$:/config/SwitcherTargets/theme",
"text": "$:/core/ui/ControlPanel/Theme"
},
"$:/config/SyncFilter": {
"title": "$:/config/SyncFilter",
"text": "[is[tiddler]] -[[$:/core]] -[[$:/library/sjcl.js]] -[prefix[$:/boot/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]\n"
},
"$:/config/SyncSystemTiddlersFromServer": {
"title": "$:/config/SyncSystemTiddlersFromServer",
"text": "no"
},
"$:/config/Tags/MinLength": {
"title": "$:/config/Tags/MinLength",
"text": "0"
},
"$:/config/TextEditor/EditorHeight/Height": {
"title": "$:/config/TextEditor/EditorHeight/Height",
"text": "400px"
},
"$:/config/TextEditor/EditorHeight/Mode": {
"title": "$:/config/TextEditor/EditorHeight/Mode",
"text": "auto"
},
"$:/config/TiddlerInfo/Default": {
"title": "$:/config/TiddlerInfo/Default",
"text": "$:/core/ui/TiddlerInfo/Fields"
},
"$:/config/TiddlerInfo/Mode": {
"title": "$:/config/TiddlerInfo/Mode",
"text": "popup"
},
"$:/config/Tiddlers/TitleLinks": {
"title": "$:/config/Tiddlers/TitleLinks",
"text": "no"
},
"$:/config/Toolbar/ButtonClass": {
"title": "$:/config/Toolbar/ButtonClass",
"text": "tc-btn-invisible"
},
"$:/config/Toolbar/Icons": {
"title": "$:/config/Toolbar/Icons",
"text": "yes"
},
"$:/config/Toolbar/Text": {
"title": "$:/config/Toolbar/Text",
"text": "no"
},
"$:/config/ui/EditTemplate": {
"title": "$:/config/ui/EditTemplate",
"text": "$:/core/ui/EditTemplate"
},
"$:/config/ui/ViewTemplate": {
"title": "$:/config/ui/ViewTemplate",
"text": "$:/core/ui/ViewTemplate"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
"text": "show"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
"text": "hide"
},
"$:/config/WikiParserRules/Inline/wikilink": {
"title": "$:/config/WikiParserRules/Inline/wikilink",
"text": "enable"
},
"$:/snippets/currpalettepreview": {
"title": "$:/snippets/currpalettepreview",
"text": "\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch-inner()\n<$set name=\"swatchColour\" value={{##$(colourResolved)$}}>\n<$list filter=\"[<swatchColour>!prefix[<<colour ]!suffix[>>]]\" variable=\"ignore\">\n<div class=\"tc-swatch\" style=<<swatchStyle>> title=<<swatchTitle>>/>\n</$list>\n<$list filter=\"[<swatchColour>prefix[<<colour ]suffix[>>]]\" variable=\"ignore\">\n<$wikify name=\"colourResolved\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall=<<swatchColour>>/>\"\"\">\n<<swatch-inner>>\n</$wikify>\n</$list>\n</$set>\n\\end\n\\define swatch()\n<$set name=\"swatchColour\" value={{##$(colour)$}}>\n<$set name=\"swatchTitle\" value=<<colour>>>\n<$list filter=\"[<swatchColour>!prefix[<<colour ]!suffix[>>]]\" variable=\"ignore\">\n<div class=\"tc-swatch\" style=<<swatchStyle>> title=<<swatchTitle>>/>\n</$list>\n<$list filter=\"[<swatchColour>prefix[<<colour ]suffix[>>]]\" variable=\"ignore\">\n<$wikify name=\"colourResolved\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall=<<swatchColour>>/>\"\"\">\n<<swatch-inner>>\n</$wikify>\n</$list>\n</$set>\n</$set>\n\\end\n<div class=\"tc-swatches-horiz\"><$list filter=\"\nforeground\nbackground\nmuted-foreground\nprimary\npage-background\ntab-background\ntiddler-info-background\n\" variable=\"colour\"><<swatch>></$list></div>\n"
},
"$:/DefaultTiddlers": {
"title": "$:/DefaultTiddlers",
"text": "GettingStarted\n"
},
"$:/snippets/download-wiki-button": {
"title": "$:/snippets/download-wiki-button",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
},
"$:/language": {
"title": "$:/language",
"text": "$:/languages/en-GB"
},
"$:/snippets/languageswitcher": {
"title": "$:/snippets/languageswitcher",
"text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n\n<$linkcatcher to=\"$:/language\">\n<div class=\"tc-chooser tc-language-chooser\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/language}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/core/macros/colour-picker": {
"title": "$:/core/macros/colour-picker",
"tags": "$:/tags/Macro",
"text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n<span style=\"display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\"/>\n\n</$button>\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/></$list>\n\\end\n\n\\define colour-picker(actions)\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/>\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\n</div>\n\n\\end\n"
},
"$:/core/macros/copy-to-clipboard": {
"title": "$:/core/macros/copy-to-clipboard",
"tags": "$:/tags/Macro",
"text": "\\define copy-to-clipboard(src,class:\"tc-btn-invisible\",style)\n<$button class=<<__class__>> style=<<__style__>> message=\"tm-copy-to-clipboard\" param=<<__src__>> tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}>\n{{$:/core/images/copy-clipboard}} <$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>\n</$button>\n\\end\n\n\\define copy-to-clipboard-above-right(src,class:\"tc-btn-invisible\",style)\n<div style=\"position: relative;\">\n<div style=\"position: absolute; bottom: 0; right: 0;\">\n<$macrocall $name=\"copy-to-clipboard\" src=<<__src__>> class=<<__class__>> style=<<__style__>>/>\n</div>\n</div>\n\\end\n\n"
},
"$:/core/macros/CSS": {
"title": "$:/core/macros/CSS",
"tags": "$:/tags/Macro",
"text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"><$transclude tiddler=\"$:/config/DefaultColourMappings/$name$\"/></$transclude></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n -webkit-box-shadow: $shadow$;\n -moz-box-shadow: $shadow$;\n box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n -webkit-filter: $filter$;\n -moz-filter: $filter$;\n filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n -webkit-transition: $transition$;\n -moz-transition: $transition$;\n transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n -webkit-transform-origin: $origin$;\n -moz-transform-origin: $origin$;\n transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define column-count(columns)\n``\n-moz-column-count: $columns$;\n-webkit-column-count: $columns$;\ncolumn-count: $columns$;\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}} _canonical_uri={{$title$!!_canonical_uri}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-background-attachment(text)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" type=\"nomatch\" text=\"\">$text$</$reveal>\n\\end\n"
},
"$:/core/macros/diff": {
"title": "$:/core/macros/diff",
"tags": "$:/tags/Macro",
"text": "\\define compareTiddlerText(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle)\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>>>\n<$diff-text source=<<source>> dest=<<dest>>/>\n</$set>\n</$set>\n\\end\n\n\\define compareTiddlers(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle,exclude)\n<table class=\"tc-diff-tiddlers\">\n<tbody>\n<$set name=\"sourceFields\" filter=\"[<__sourceTiddlerTitle__>fields[]sort[]]\">\n<$set name=\"destFields\" filter=\"[<__destSubTiddlerTitle__>subtiddlerfields<__destTiddlerTitle__>sort[]]\">\n<$list filter=\"[enlist<sourceFields>] [enlist<destFields>] -[enlist<__exclude__>] +[sort[]]\" variable=\"fieldName\">\n<tr>\n<th>\n<$text text=<<fieldName>>/> \n</th>\n<td>\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>> field=<<fieldName>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>> field=<<fieldName>>>\n<$diff-text source=<<source>> dest=<<dest>>>\n</$diff-text>\n</$set>\n</$set>\n</td>\n</tr>\n</$list>\n</$set>\n</$set>\n</tbody>\n</table>\n\\end\n"
},
"$:/core/macros/dumpvariables": {
"title": "$:/core/macros/dumpvariables",
"tags": "$:/tags/Macro",
"text": "\\define dumpvariables()\n<ul>\n<$list filter=\"[variables[]]\" variable=\"varname\">\n<li>\n<strong><code><$text text=<<varname>>/></code></strong>:<br/>\n<$codeblock code={{{ [<varname>getvariable[]] }}}/>\n</li>\n</$list>\n</ul>\n\\end\n"
},
"$:/core/macros/export": {
"title": "$:/core/macros/export",
"tags": "$:/tags/Macro",
"text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n\\whitespace trim\n<$vars hint={{{ [<__lingoBase__>addsuffix[Hint]get[text]] }}} caption={{{ [<__lingoBase__>addsuffix[Caption]get[text]] }}}>\n<span class=\"tc-popup-keep\"><$button popup=<<qualify \"$:/state/popup/export\">> tooltip=<<hint>> aria-label=<<caption>> class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text=<<caption>>/></span>\n</$list>\n</$button></span></$vars><$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$set name=\"count\" value={{{ [subfilter<__exportFilter__>count[]] }}}>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$list filter=\"[<currentTiddler>has[condition]subfilter{!!condition}limit[1]] ~[<currentTiddler>!has[condition]then[true]]\" variable=\"ignore\">\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=<<__exportFilter__>> filename={{{ [<__baseFilename__>addsuffix{!!extension}] }}}/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$list>\n</$list>\n</$set>\n</div>\n</$reveal>\n\\end\n"
},
"$:/core/macros/image-picker": {
"title": "$:/core/macros/image-picker",
"created": "20170715180840889",
"modified": "20170715180914005",
"tags": "$:/tags/Macro",
"type": "text/vnd.tiddlywiki",
"text": "\\define image-picker-thumbnail(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n$actions$\n<$transclude tiddler=<<imageTitle>>/>\n</$button>\n\\end\n\n\\define image-picker-list(filter,actions)\n<$list filter=\"\"\"$filter$\"\"\" variable=\"imageTitle\">\n<$macrocall $name=\"image-picker-thumbnail\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\\end\n\n\\define image-picker(actions,filter:\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]\",subfilter:\"\")\n<div class=\"tc-image-chooser\">\n<$vars state-system=<<qualify \"$:/state/image-picker/system\">>>\n<$checkbox tiddler=<<state-system>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"hide\">\n{{$:/language/SystemTiddlers/Include/Prompt}}\n</$checkbox>\n<$reveal state=<<state-system>> type=\"match\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$ +[!is[system]]\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n<$reveal state=<<state-system>> type=\"nomatch\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n</$vars>\n</div>\n\\end\n\n\\define image-picker-include-tagged-images(actions)\n<$macrocall $name=\"image-picker\" filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n"
},
"$:/core/macros/keyboard-driven-input": {
"title": "$:/core/macros/keyboard-driven-input",
"tags": "$:/tags/Macro",
"text": "\\define change-input-tab(stateTitle,tag,beforeafter,defaultState,actions)\n<$set name=\"tabsList\" filter=\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]]\">\n<$vars currentState={{{ [<__stateTitle__>!is[missing]get[text]] ~[<__defaultState__>] }}} firstTab={{{ [enlist<tabsList>nth[1]] }}} lastTab={{{ [enlist<tabsList>last[]] }}}>\n<$set name=\"nextTab\" value={{{ [all[shadows+tiddlers]tag<__tag__>!has[draft.of]$beforeafter$<currentState>] ~[[$beforeafter$]removeprefix[after]suffix[]addprefix<firstTab>] ~[[$beforeafter$]removeprefix[before]suffix[]addprefix<lastTab>] }}}>\n<$action-setfield $tiddler=<<__stateTitle__>> text=<<nextTab>>/>\n$actions$\n</$set>\n</$vars>\n</$set>\n\\end\n\n\\define keyboard-input-actions()\n<$list filter=\"[<__index__>match[]]\">\n<$action-setfield $tiddler=<<__storeTitle__>> text={{{ [<__tiddler__>get<__field__>] }}}/>\n</$list>\n<$list filter=\"[<__index__>!match[]]\">\n<$action-setfield $tiddler=<<__storeTitle__>> text={{{ [<__tiddler__>getindex<__index__>] }}}/>\n</$list>\n\\end\n\n\\define input-next-actions-inner()\n<$list filter=\"[<nextItem>minlength[1]]\" variable=\"ignore\">\n<$action-setfield $tiddler=<<__selectionStateTitle__>> text=<<nextItem>>/>\n<$list filter=\"[<__index__>match[]]\">\n<$action-setfield $tiddler=<<__tiddler__>> $field=<<__field__>> $value={{{ [<nextItem>] +[splitregexp[(?:.(?!-))+$]] }}}/>\n</$list>\n<$list filter=\"[<__index__>!match[]]\">\n<$action-setfield $tiddler=<<__tiddler__>> $index=<<__index__>> $value={{{ [<nextItem>] +[splitregexp[(?:.(?!-))+$]] }}}/>\n</$list>\n<$action-setfield $tiddler=<<__refreshTitle__>> text=\"yes\"/>\n</$list>\n\\end\n\n\\define input-next-actions(afterOrBefore:\"after\",reverse:\"\")\n<$list filter=\"[<__storeTitle__>get[text]minlength<__filterMinLength__>] [<__filterMinLength__>match[0]] +[limit[1]]\" variable=\"ignore\">\n<$vars userInput={{{ [<__storeTitle__>get[text]] }}} selectedItem={{{ [<__selectionStateTitle__>get[text]] }}}>\n<$set name=\"configTiddler\" value={{{ [subfilter<__configTiddlerFilter__>] }}}>\n<$vars primaryListFilter={{{ [<configTiddler>get<__firstSearchFilterField__>] }}} secondaryListFilter={{{ [<configTiddler>get<__secondSearchFilterField__>] }}}>\n<$set name=\"filteredList\" filter=\"[subfilter<primaryListFilter>addsuffix[-primaryList]] =[subfilter<secondaryListFilter>addsuffix[-secondaryList]]\">\n<$vars nextItem={{{ [enlist<filteredList>$afterOrBefore$<selectedItem>] ~[enlist<filteredList>$reverse$nth[1]] }}} firstItem={{{ [enlist<filteredList>nth[1]] }}} lastItem={{{ [enlist<filteredList>last[]] }}}>\n<$list filter=\"[<selectedItem>match<firstItem>!match<lastItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [[$afterOrBefore$]match[before]then<userInput>addsuffix[-userInput]] ~[<nextItem>] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>match<lastItem>!match<firstItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [[$afterOrBefore$]match[after]then<userInput>addsuffix[-userInput]] ~[<nextItem>] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>match<firstItem>match<lastItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [<userInput>addsuffix[-userInput]] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>!match<firstItem>!match<lastItem>]\" variable=\"ignore\">\n<<input-next-actions-inner>>\n</$list>\n</$vars>\n</$set>\n</$vars>\n</$set>\n</$vars>\n</$list>\n\\end\n\n\\define keyboard-driven-input(tiddler,storeTitle,field:\"text\",index:\"\",tag:\"input\",type,focus:\"\",inputAcceptActions,inputAcceptVariantActions,inputCancelActions,placeholder:\"\",default:\"\",class,focusPopup,rows,minHeight,tabindex,size,autoHeight,filterMinLength:\"0\",refreshTitle,selectionStateTitle,cancelPopups:\"\",configTiddlerFilter,firstSearchFilterField:\"first-search-filter\",secondSearchFilterField:\"second-search-filter\")\n\\whitespace trim\n<$keyboard key=\"((input-accept))\" actions=<<__inputAcceptActions__>>>\n<$keyboard key=\"((input-accept-variant))\" actions=<<__inputAcceptVariantActions__>>>\n<$keyboard key=\"((input-up))\" actions=<<input-next-actions \"before\" \"reverse[]\">>>\n<$keyboard key=\"((input-down))\" actions=<<input-next-actions>>>\n<$keyboard key=\"((input-cancel))\" actions=<<__inputCancelActions__>>>\n<$edit-text tiddler=<<__tiddler__>> field=<<__field__>> index=<<__index__>> \n\t\tinputActions=<<keyboard-input-actions>> tag=<<__tag__>> class=<<__class__>> \n\t\tplaceholder=<<__placeholder__>> default=<<__default__>> focusPopup=<<__focusPopup__>> \n\t\tfocus=<<__focus__>> type=<<__type__>> rows=<<__rows__>> minHeight=<<__minHeight__>> \n\t\ttabindex=<<__tabindex__>> size=<<__size__>> autoHeight=<<__autoHeight__>> \n\t\trefreshTitle=<<__refreshTitle__>> cancelPopups=<<__cancelPopups__>>/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n\\end\n"
},
"$:/core/macros/lingo": {
"title": "$:/core/macros/lingo",
"tags": "$:/tags/Macro",
"text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
},
"$:/core/macros/list": {
"title": "$:/core/macros/list",
"tags": "$:/tags/Macro",
"text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\",emptyMessage)\n\\whitespace trim\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\" emptyMessage=<<__emptyMessage__>>>\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n\n\\define list-links-draggable-drop-actions()\n<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define list-links-draggable(tiddler,field:\"list\",type:\"ul\",subtype:\"li\",class:\"\",itemTemplate)\n\\whitespace trim\n<span class=\"tc-links-draggable-list\">\n<$vars targetTiddler=\"\"\"$tiddler$\"\"\" targetField=\"\"\"$field$\"\"\">\n<$type$ class=\"$class$\">\n<$list filter=\"[list[$tiddler$!!$field$]]\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"\"\"$subtype$\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\"/>\n<div>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$transclude>\n</div>\n</$droppable>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"div\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\">\n{{$:/core/images/blank}}\n</div>\n<div style=\"height:0.5em;\"/>\n</$droppable>\n</$tiddler>\n</$type$>\n</$vars>\n</span>\n\\end\n\n\\define list-tagged-draggable-drop-actions(tag)\n<!-- Save the current ordering of the tiddlers with this tag -->\n<$set name=\"order\" filter=\"[<__tag__>tagging[]]\">\n<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->\n<$list filter=\"[<__tag__>tagging[]]\">\n<$action-deletefield $field=\"list-before\"/>\n<$action-deletefield $field=\"list-after\"/>\n</$list>\n<!-- Save the new order to the Tag Tiddler -->\n<$action-listops $tiddler=<<__tag__>> $field=\"list\" $filter=\"+[enlist<order>] +[insertbefore:currentTiddler<actionTiddler>]\"/>\n<!-- Make sure the newly added item has the right tag -->\n<!-- Removing this line makes dragging tags within the dropdown work as intended -->\n<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->\n<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->\n<$list filter=\"[<actionTiddler>!contains:tags<__tag__>]\">\n<$fieldmangler tiddler=<<actionTiddler>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<__tag__>>/>\n</$fieldmangler>\n</$list>\n</$set>\n\\end\n\n\\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:\"div\",storyview:\"\")\n\\whitespace trim\n<span class=\"tc-tagged-draggable-list\">\n<$set name=\"tag\" value=<<__tag__>>>\n<$list filter=\"[<__tag__>tagging[]$subFilter$]\" emptyMessage=<<__emptyMessage__>> storyview=<<__storyview__>>>\n<$elementTag$ class=\"tc-menu-list-item\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</$transclude>\n</$elementTag$>\n</$droppable>\n</$elementTag$>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$ style=\"height:0.5em;\">\n</$elementTag$>\n</$droppable>\n</$tiddler>\n</$set>\n</span>\n\\end\n"
},
"$:/core/macros/tabs": {
"title": "$:/core/macros/tabs",
"tags": "$:/tags/Macro",
"text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain,actions,explicitState)\n<$set name=\"qualifiedState\" value=<<qualify \"$state$\">>>\n<$vars tabsState={{{ [<__explicitState__>minlength[1]] ~[<qualifiedState>] }}}>\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\" storyview=\"pop\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<tabsState>> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=\"$buttonTemplate$\" mode=\"inline\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$transclude>\n</$set></$tiddler>$actions$</$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<tabsState>> text=<<currentTab>> default=\"$default$\" retain=\"\"\"$retain$\"\"\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n</$vars>\n</$set>\n\\end\n"
},
"$:/core/macros/tag-picker": {
"title": "$:/core/macros/tag-picker",
"tags": "$:/tags/Macro",
"first-search-filter": "[tags[]!is[system]search:title<userInput>sort[]]",
"second-search-filter": "[tags[]is[system]search:title<userInput>sort[]]",
"text": "\\define get-tagpicker-focus-selector() [data-tiddler-title=\"$(currentTiddlerCSSEscaped)$\"] .tc-add-tag-name input\n\n\\define delete-tag-state-tiddlers() <$action-deletetiddler $filter=\"[<newTagNameTiddler>] [<storeTitle>] [<tagSelectionState>]\"/>\n\n\\define add-tag-actions(actions,tagField:\"tags\")\n<$set name=\"tag\" value={{{ [<__tiddler__>get[text]] }}}>\n<$list filter=\"[<saveTiddler>!contains:$tagField$<tag>!match[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"-[<tag>]\"/>\n\"\"\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"[<tag>]\"/>\n$actions$\n</$list>\n</$set>\n<<delete-tag-state-tiddlers>>\n<$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n\\end\n\n\\define clear-tags-actions-inner()\n<$list filter=\"[<storeTitle>has[text]] [<newTagNameTiddler>has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\">\n<<delete-tag-state-tiddlers>>\n</$list>\n\\end\n\n\\define clear-tags-actions()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<newTagNameTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<<clear-tags-actions-inner>>\"\"\">\n<$action-setfield $tiddler=<<newTagNameTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n</$set>\n\\end\n\n\\define tag-picker-inner(actions,tagField:\"tags\")\n\\whitespace trim\n<$vars newTagNameInputTiddlerQualified=<<qualify \"$:/temp/NewTagName/input\">> newTagNameSelectionTiddlerQualified=<<qualify \"$:/temp/NewTagName/selected-item\">> fallbackTarget={{$(palette)$##tag-background}} colourA={{$(palette)$##foreground}} colourB={{$(palette)$##background}}>\n<$vars storeTitle={{{ [<newTagNameInputTiddler>!match[]] ~[<newTagNameInputTiddlerQualified>] }}} tagSelectionState={{{ [<newTagNameSelectionTiddler>!match[]] ~[<newTagNameSelectionTiddlerQualified>] }}}>\n<$vars refreshTitle=<<qualify \"$:/temp/NewTagName/refresh\">> nonSystemTagsFilter=\"[tags[]!is[system]search:title<userInput>sort[]]\" systemTagsFilter=\"[tags[]is[system]search:title<userInput>sort[]]\">\n<div class=\"tc-edit-add-tag\">\n<div>\n<span class=\"tc-add-tag-name tc-small-gap-right\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<newTagNameTiddler>> storeTitle=<<storeTitle>> refreshTitle=<<refreshTitle>>\n\t\tselectionStateTitle=<<tagSelectionState>> inputAcceptActions=\"\"\"<$macrocall $name=\"add-tag-actions\" actions=<<__actions__>> tagField=<<__tagField__>>/>\"\"\"\n\t\tinputCancelActions=<<clear-tags-actions>> tag=\"input\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}}\n\t\tfocusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex=<<tabIndex>> \n\t\tfocus={{{ [{$:/config/AutoFocus}match[tags]then[true]] ~[[false]] }}} filterMinLength={{$:/config/Tags/MinLength}} \n\t\tcancelPopups=<<cancelPopups>> configTiddlerFilter=\"[[$:/core/macros/tag-picker]]\"/>\n</span><$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button><$reveal state=<<storeTitle>> type=\"nomatch\" text=\"\"><$button class=\"tc-btn-invisible tc-small-gap tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags/ClearInput/Hint}} aria-label={{$:/language/EditTemplate/Tags/ClearInput/Caption}}>{{$:/core/images/close-button}}<<delete-tag-state-tiddlers>></$button></$reveal><span class=\"tc-add-tag-button tc-small-gap-left\">\n<$set name=\"tag\" value={{{ [<newTagNameTiddler>get[text]] }}}>\n<$button set=<<newTagNameTiddler>> setTo=\"\" class=\"\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"[<tag>]\"/>\n$actions$\n<$set name=\"currentTiddlerCSSEscaped\" value={{{ [<saveTiddler>escapecss[]] }}}>\n<<delete-tag-state-tiddlers>><$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-tagpicker-focus-selector>>/>\n</$set>\n{{$:/language/EditTemplate/Tags/Add/Button}}\n</$button>\n</$set>\n</span>\n</div>\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-block-tags-dropdown\">\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<userInput>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=<<nonSystemTagsFilter>> variable=\"tag\">\n<$list filter=\"[<tag>addsuffix[-primaryList]] -[<tagSelectionState>get[text]]\" emptyMessage=\"\"\"<$vars button-classes=\"tc-btn-invisible tc-tag-button-selected\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\"\"\">\n<$vars button-classes=\"tc-btn-invisible\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\n</$list>\n</$list></$list>\n<hr>\n<$list filter=\"[<userInput>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=<<systemTagsFilter>> variable=\"tag\">\n<$list filter=\"[<tag>addsuffix[-secondaryList]] -[<tagSelectionState>get[text]]\" emptyMessage=\"\"\"<$vars button-classes=\"tc-btn-invisible tc-tag-button-selected\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\"\"\">\n<$vars button-classes=\"tc-btn-invisible\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\n</$list>\n</$list></$list>\n</$set>\n</div>\n</$reveal>\n</div>\n</div>\n</$vars>\n</$vars>\n</$vars>\n\\end\n\\define tag-picker(actions,tagField:\"tags\")\n\\whitespace trim\n<$vars saveTiddler=<<currentTiddler>> palette={{$:/palette}}>\n<$list filter=\"[<newTagNameTiddler>match[]]\" emptyMessage=\"\"\"<$macrocall $name=\"tag-picker-inner\" actions=<<__actions__>> tagField=<<__tagField__>>/>\"\"\">\n<$set name=\"newTagNameTiddler\" value=<<qualify \"$:/temp/NewTagName\">>>\n<$macrocall $name=\"tag-picker-inner\" actions=<<__actions__>> tagField=<<__tagField__>>/>\n</$set>\n</$list>\n</$vars>\n\\end\n"
},
"$:/core/macros/tag": {
"title": "$:/core/macros/tag",
"tags": "$:/tags/Macro",
"text": "\\define tag-pill-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<$element-tag$ $element-attributes$ class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n$actions$<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view tiddler=<<__tag__>> field=\"title\" format=\"text\" />\n</$element-tag$>\n</$vars>\n\\end\n\n\\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)\n<$macrocall $name=\"tag-pill-inner\" tag=<<__tag__>> icon=\"\"\"$icon$\"\"\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n\n\\define tag-pill(tag,element-tag:\"span\",element-attributes:\"\",actions:\"\")\n<span class=\"tc-tag-list-item\" data-tag-title=<<__tag__>>>\n<$macrocall $name=\"tag-pill-body\" tag=<<__tag__>> icon={{{ [<__tag__>get[icon]] }}} colour={{{ [<__tag__>get[color]] }}} palette={{$:/palette}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</span>\n\\end\n\n\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
},
"$:/core/macros/thumbnails": {
"title": "$:/core/macros/thumbnails",
"tags": "$:/tags/Macro",
"text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
},
"$:/core/macros/timeline": {
"title": "$:/core/macros/timeline",
"created": "20141212105914482",
"modified": "20141212110330815",
"tags": "$:/tags/Macro",
"text": "\\define timeline-title()\n\\whitespace trim\n<!-- Override this macro with a global macro \n of the same name if you need to change \n how titles are displayed on the timeline \n -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><<timeline-title>></$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
},
"$:/core/macros/toc": {
"title": "$:/core/macros/toc",
"tags": "$:/tags/Macro",
"text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n <$transclude field=\"caption\">\n <$view field=\"title\"/>\n </$transclude>\n</$set>\n\\end\n\n\\define toc-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<ol class=\"tc-toc\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$vars item=<<currentTiddler>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}><$view field='caption'><$view field='title'/></$view></$link>\">\n <<toc-caption>>\n </$list>\n <$macrocall $name=\"toc-body\" tag=<<item>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n </li>\n </$set>\n </$set>\n </$vars>\n </$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter:\"\")\n<$macrocall $name=\"toc-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> />\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}>\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-expandable-empty-message()\n<$macrocall $name=\"toc-linked-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter:\"\",exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <ol class=\"tc-toc toc-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=<<toc-expandable-empty-message>> >\n <$macrocall $name=\"toc-unlinked-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"\"\"itemClassFilter\"\"\" exclude=<<excluded>> path=<<path>> />\n </$list>\n </$list>\n </ol>\n </$set>\n</$vars>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\" >\n <li class=<<toc-item-class>>>\n <$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}>\n <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n </$list>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n </$list>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-selective-expandable-empty-message()\n<$macrocall $name=\"toc-linked-selective-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter,exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <ol class=\"tc-toc toc-selective-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<<toc-selective-expandable-empty-message>> >\n <$macrocall $name=\"toc-unlinked-selective-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n </$list>\n </$list>\n </ol>\n </$set>\n</$vars>\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{{ [<__selectedTiddler__>get[text]] }}}>\n <div class=\"tc-tabbed-table-of-contents\">\n <$linkcatcher to=<<__selectedTiddler__>>>\n <div class=\"tc-table-of-contents\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"[all[current]] -[<__selectedTiddler__>get[text]]\"/>\n </div>\n </$linkcatcher>\n <div class=\"tc-tabbed-table-of-contents-content\">\n <$reveal stateTitle=<<__selectedTiddler__>> type=\"nomatch\" text=\"\">\n <$transclude mode=\"block\" tiddler=<<__template__>>>\n <h1><<toc-caption>></h1>\n <$transclude mode=\"block\">$missingText$</$transclude>\n </$transclude>\n </$reveal>\n <$reveal stateTitle=<<__selectedTiddler__>> type=\"match\" text=\"\">\n $unselectedText$\n </$reveal>\n </div>\n </div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=<<__selectedTiddler__>>>\n <$macrocall $name=\"toc-tabbed-external-nav\" tag=<<__tag__>> sort=<<__sort__>> selectedTiddler=<<__selectedTiddler__>> unselectedText=<<__unselectedText__>> missingText=<<__missingText__>> template=<<__template__>>/>\n</$linkcatcher>\n\\end\n\n"
},
"$:/core/macros/translink": {
"title": "$:/core/macros/translink",
"tags": "$:/tags/Macro",
"text": "\\define translink(title,mode:\"block\")\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: black; foreground; white;\">\n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n</$link>\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: white; foreground; black;\">\n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n</$transclude>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/tree": {
"title": "$:/core/macros/tree",
"tags": "$:/tags/Macro",
"text": "\\define leaf-link(full-title,chunk,separator: \"/\")\n<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link>\n\\end\n\n\\define leaf-node(prefix,chunk)\n<li>\n<$list filter=\"[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]\" variable=\"full-title\">\n<$list filter=\"[<full-title>removeprefix<__prefix__>]\" variable=\"chunk\">\n<span>{{$:/core/images/file}}</span> <$macrocall $name=\"leaf-link\" full-title=<<full-title>> chunk=<<chunk>>/>\n</$list>\n</$list>\n</li>\n\\end\n\n\\define branch-node(prefix,chunk,separator: \"/\")\n<li>\n<$set name=\"reveal-state\" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>\n<$reveal type=\"nomatch\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"show\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"hide\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<span>(<$count filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]\"/>)</span>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$macrocall $name=\"tree-node\" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/>\n</$reveal>\n</$set>\n</li>\n\\end\n\n\\define tree-node(prefix,separator: \"/\")\n<ol>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"leaf-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"branch-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n</ol>\n\\end\n\n\\define tree(prefix: \"$:/\",separator: \"/\")\n<div class=\"tc-tree\">\n<span><$text text=<<__prefix__>>/></span>\n<div>\n<$macrocall $name=\"tree-node\" prefix=<<__prefix__>> separator=<<__separator__>>/>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/utils": {
"title": "$:/core/macros/utils",
"text": "\\define colour(colour)\n$colour$\n\\end\n"
},
"$:/snippets/minifocusswitcher": {
"title": "$:/snippets/minifocusswitcher",
"text": "<$select tiddler=\"$:/config/AutoFocus\">\n<$list filter=\"title tags text type fields\">\n<option value=<<currentTiddler>>><<currentTiddler>></option>\n</$list>\n</$select>\n"
},
"$:/snippets/minilanguageswitcher": {
"title": "$:/snippets/minilanguageswitcher",
"text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/minithemeswitcher": {
"title": "$:/snippets/minithemeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/modules": {
"title": "$:/snippets/modules",
"text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
},
"$:/palette": {
"title": "$:/palette",
"text": "$:/palettes/Vanilla"
},
"$:/snippets/paletteeditor": {
"title": "$:/snippets/paletteeditor",
"text": "<$transclude tiddler=\"$:/PaletteManager\"/>\n"
},
"$:/snippets/palettepreview": {
"title": "$:/snippets/palettepreview",
"text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n{{||$:/snippets/currpalettepreview}}\n</$set>\n"
},
"$:/snippets/paletteswitcher": {
"title": "$:/snippets/paletteswitcher",
"text": "<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[name]]\"><$set name=\"cls\" filter=\"[all[current]prefix{$:/palette}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/>{{||$:/snippets/currpalettepreview}}</$link>\n</div></$set>\n</$list>\n</div>\n</$linkcatcher>\n"
},
"$:/snippets/peek-stylesheets": {
"title": "$:/snippets/peek-stylesheets",
"text": "\\define expandable-stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$vars state=<<qualify \"$:/state/peek-stylesheets/open/\">>>\n<$set name=\"state\" value={{{ [<state>addsuffix<currentTiddler>] }}}>\n<li>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"no\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"yes\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"div\">\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</$reveal>\n</li>\n</$set>\n</$vars>\n</$list>\n</ol>\n\\end\n\n\\define stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<li>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</li>\n</$list>\n</ol>\n\\end\n\n<$vars modeState=<<qualify \"$:/state/peek-stylesheets/mode/\">>>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"expanded\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Stylesheets/Expand/Caption}}</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"restored\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-down}} {{$:/language/ControlPanel/Stylesheets/Restore/Caption}}</$button>\n</$reveal>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<expandable-stylesheets-list>>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<stylesheets-list>>\n</$reveal>\n\n</$vars>\n"
},
"$:/temp/search": {
"title": "$:/temp/search",
"text": ""
},
"$:/tags/AdvancedSearch": {
"title": "$:/tags/AdvancedSearch",
"list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
},
"$:/tags/AdvancedSearch/FilterButton": {
"title": "$:/tags/AdvancedSearch/FilterButton",
"list": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete"
},
"$:/tags/ControlPanel": {
"title": "$:/tags/ControlPanel",
"list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
},
"$:/tags/ControlPanel/Info": {
"title": "$:/tags/ControlPanel/Info",
"list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
},
"$:/tags/ControlPanel/Plugins": {
"title": "$:/tags/ControlPanel/Plugins",
"list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
},
"$:/tags/EditorToolbar": {
"title": "$:/tags/EditorToolbar",
"list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type"
},
"$:/tags/EditTemplate": {
"title": "$:/tags/EditTemplate",
"list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
},
"$:/tags/EditToolbar": {
"title": "$:/tags/EditToolbar",
"list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
},
"$:/tags/Manager/ItemMain": {
"title": "$:/tags/Manager/ItemMain",
"list": "$:/Manager/ItemMain/WikifiedText $:/Manager/ItemMain/RawText $:/Manager/ItemMain/Fields"
},
"$:/tags/Manager/ItemSidebar": {
"title": "$:/tags/Manager/ItemSidebar",
"list": "$:/Manager/ItemSidebar/Tags $:/Manager/ItemSidebar/Colour $:/Manager/ItemSidebar/Icon $:/Manager/ItemSidebar/Tools"
},
"$:/tags/MoreSideBar": {
"title": "$:/tags/MoreSideBar",
"list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Explorer]] [[$:/core/ui/MoreSideBar/Plugins]]",
"text": ""
},
"$:/tags/PageControls": {
"title": "$:/tags/PageControls",
"list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
},
"$:/tags/PageTemplate": {
"title": "$:/tags/PageTemplate",
"list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]",
"text": ""
},
"$:/tags/PluginLibrary": {
"title": "$:/tags/PluginLibrary",
"list": "$:/config/OfficialPluginLibrary"
},
"$:/tags/SideBar": {
"title": "$:/tags/SideBar",
"list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
"text": ""
},
"$:/tags/SideBarSegment": {
"title": "$:/tags/SideBarSegment",
"list": "[[$:/core/ui/SideBarSegments/site-title]] [[$:/core/ui/SideBarSegments/site-subtitle]] [[$:/core/ui/SideBarSegments/page-controls]] [[$:/core/ui/SideBarSegments/search]] [[$:/core/ui/SideBarSegments/tabs]]"
},
"$:/tags/TiddlerInfo": {
"title": "$:/tags/TiddlerInfo",
"list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
"text": ""
},
"$:/tags/TiddlerInfo/Advanced": {
"title": "$:/tags/TiddlerInfo/Advanced",
"list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
},
"$:/tags/ViewTemplate": {
"title": "$:/tags/ViewTemplate",
"list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
},
"$:/tags/ViewToolbar": {
"title": "$:/tags/ViewToolbar",
"list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
},
"$:/snippets/themeswitcher": {
"title": "$:/snippets/themeswitcher",
"text": "<$linkcatcher to=\"$:/theme\">\n<div class=\"tc-chooser\"><$list filter=\"[plugin-type[theme]sort[title]]\"><$set name=\"cls\" filter=\"[all[current]field:title{$:/theme}] [[$:/theme]!has[text]addsuffix[s/tiddlywiki/vanilla]field:title<currentTiddler>] +[limit[1]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/core/wiki/title": {
"title": "$:/core/wiki/title",
"text": "{{$:/SiteTitle}}\n<$list filter=\"[{$:/SiteSubtitle}trim[]minlength[1]]\" variable=\"ignore\">\n--- {{$:/SiteSubtitle}}\n</$list>"
},
"$:/view": {
"title": "$:/view",
"text": "classic"
},
"$:/snippets/viewswitcher": {
"title": "$:/snippets/viewswitcher",
"text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<$linkcatcher to=\"$:/view\">\n<div class=\"tc-chooser tc-viewswitcher\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$set name=\"cls\" filter=\"[<storyview>prefix{$:/view}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$button tag=\"a\" class=\"tc-tiddlylink tc-btn-invisible\" to=<<storyview>>><$transclude tiddler=<<icon>>/><$text text=<<storyview>>/></$button>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>\n"
}
}
}
\define list-links(filter,type:"ul",subtype:"li",class:"",emptyMessage)
\whitespace trim
<$type$ class="$class$">
<$list filter="$filter$" emptyMessage=<<__emptyMessage__>>>
<$subtype$>
<$link to={{!!title}}>
<$set name="tv-wikilinks" value="no">
<$transclude field="caption">
<$view field="title"/>
</$transclude>
</$set>
</$link>
</$subtype$>
</$list>
</$type$>
\end
\define list-links-draggable-drop-actions()
<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore:currentTiddler<actionTiddler>]"/>
\end
\define list-links-draggable(tiddler,field:"list",type:"ul",subtype:"li",class:"",itemTemplate)
\whitespace trim
<span class="tc-links-draggable-list">
<$vars targetTiddler="""$tiddler$""" targetField="""$field$""">
<$type$ class="$class$">
<$list filter="[list[$tiddler$!!$field$]]">
<$droppable actions=<<list-links-draggable-drop-actions>> tag="""$subtype$""" enable=<<tv-enable-drag-and-drop>>>
<div class="tc-droppable-placeholder" />
<div>
<$transclude tiddler="""$itemTemplate$""">
<$link to={{!!title}}>
<$set name="tv-wikilinks" value="no">
<$transclude field="caption">
<$view field="title"/>
</$transclude>
</$set>
</$link>
</$transclude>
</div>
</$droppable>
</$list>
<$tiddler tiddler="">
<$droppable actions=<<list-links-draggable-drop-actions>> tag="div" enable=<<tv-enable-drag-and-drop>>>
<div class="tc-droppable-placeholder">
{{$:/core/images/blank}}
</div>
<div style="height:0.5em;"/>
</$droppable>
</$tiddler>
</$type$>
</$vars>
</span>
\end
\define list-tagged-draggable-drop-actions(tag)
<!-- Save the current ordering of the tiddlers with this tag -->
<$set name="order" filter="[<__tag__>tagging[]]">
<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->
<$list filter="[<__tag__>tagging[]]">
<$action-deletefield $field="list-before"/>
<$action-deletefield $field="list-after"/>
</$list>
<!-- Save the new order to the Tag Tiddler -->
<$action-listops $tiddler=<<__tag__>> $field="list" $filter="+[enlist<order>] +[insertbefore:currentTiddler<actionTiddler>]"/>
<!-- Make sure the newly added item has the right tag -->
<!-- Removing this line makes dragging tags within the dropdown work as intended -->
<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->
<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->
<$list filter="[<actionTiddler>!contains:tags<__tag__>]">
<$fieldmangler tiddler=<<actionTiddler>>>
<$action-sendmessage $message="tm-add-tag" $param=<<__tag__>>/>
</$fieldmangler>
</$list>
</$set>
\end
\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:"div",storyview:"")
\whitespace trim
<span class="tc-tagged-draggable-list">
<$set name="tag" value=<<__tag__>>>
<$list filter="[<__tag__>tagging[]$subFilter$]" emptyMessage=<<__emptyMessage__>> storyview=<<__storyview__>>>
<$elementTag$ class="tc-menu-list-item">
<$droppable actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<__tag__>>/>""" enable=<<tv-enable-drag-and-drop>>>
<$elementTag$ class="tc-droppable-placeholder" />
<$elementTag$>
<$transclude tiddler="""$itemTemplate$""">
<$link to={{!!title}}>
<$set name="tv-wikilinks" value="no">
<$transclude field="caption">
<$view field="title"/>
</$transclude>
</$set>
</$link>
</$transclude>
</$elementTag$>
</$droppable>
</$elementTag$>
</$list>
<$tiddler tiddler="">
<$droppable actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<__tag__>>/>""" enable=<<tv-enable-drag-and-drop>>>
<$elementTag$ class="tc-droppable-placeholder" />
<$elementTag$ style="height:0.5em;">
</$elementTag$>
</$droppable>
</$tiddler>
</$set>
</span>
\end
\define tag-pill-styles()
background-color:$(backgroundColor)$;
fill:$(foregroundColor)$;
color:$(foregroundColor)$;
\end
\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)
<$vars foregroundColor=<<contrastcolour target:"""$colour$""" fallbackTarget:"""$fallbackTarget$""" colourA:"""$colourA$""" colourB:"""$colourB$""">> backgroundColor="""$colour$""">
<$element-tag$ $element-attributes$ class="tc-tag-label tc-btn-invisible" style=<<tag-pill-styles>>>
$actions$<$transclude tiddler="""$icon$"""/><$set name="tv-wikilinks" value="no"><$transclude tiddler=<<__tag__>> field="caption"><$view tiddler=<<__tag__>> field="title" format="text" /></$transclude></$set>
</$element-tag$>
</$vars>
\end
\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)
<$macrocall $name="tag-pill-inner" tag=<<__tag__>> icon="""$icon$""" colour="""$colour$""" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag="""$element-tag$""" element-attributes="""$element-attributes$""" actions="""$actions$"""/>
\end
\define tag-pill(tag,element-tag:"span",element-attributes:"",actions:"")
<span class="tc-tag-list-item" data-tag-title=<<__tag__>>>
<$macrocall $name="tag-pill-body" tag=<<__tag__>> icon={{{ [<__tag__>get[icon]] }}} colour={{{ [<__tag__>get[color]] }}} palette={{$:/palette}} element-tag="""$element-tag$""" element-attributes="""$element-attributes$""" actions="""$actions$"""/>
</span>
\end
\define tag(tag)
{{$tag$||$:/core/ui/TagTemplate}}
\end
\whitespace trim
\define title() <$view field="title"/>
\define timeline-title()
<$set name="tv-wikilinks" value="no">
<$set name="display" tiddler=<<currentTiddler>> field="caption" emptyValue=<<title>>>
<<display>>
</$set>
</$set>
\end
\define timeline(limit:"100",format:"DDth MMM YYYY",subfilter:"",dateField:"modified")
<div class="tc-timeline">
<$list filter="[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]">
<div class="tc-menu-list-item">
<$view field="$dateField$" format="date" template="$format$"/>
<$list filter="[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]">
<div class="tc-menu-list-subitem">
<$link to={{!!title}}><<timeline-title>></$link>
</div>
</$list>
</div>
</$list>
</div>
\end
\define title() <$view field="title"/>
\define timeline-title()
<$set name="tv-wikilinks" value="no">
<$set name="display" tiddler=<<currentTiddler>> field="caption" emptyValue=<<title>>>
<<display>>
</$set>
</$set>
\end
/*\
title: $:/core/modules/savers/upload.js
type: application/javascript
module-type: saver
Handles saving changes via upload to a server.
Designed to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Select the appropriate saver module and set it up
*/
var UploadSaver = function(wiki) {
this.wiki = wiki;
};
UploadSaver.prototype.save = function(text,method,callback) {
// Get the various parameters we need
var backupDir = this.wiki.getTextReference("$:/UploadBackupDir") || ".",
username = this.wiki.getTextReference("$:/UploadName"),
password = $tw.utils.getPassword("upload"),
uploadDir = this.wiki.getTextReference("$:/UploadDir") || ".",
uploadFilename = this.wiki.getTextReference("$:/UploadFilename") || "index.html",
debug = this.wiki.getTextReference("$:/UploadDebug") || "0",
url = this.wiki.getTextReference("$:/UploadURL");
// Bail out if we don't have the bits we need
if(!username || username.toString().trim() === "" || !password || password.toString().trim() === "") {
return false;
}
// Construct the url if not provided
if(!url) {
url = "http://" + username + ".tiddlyspot.com/store.cgi";
}
// Assemble the header
var boundary = "---------------------------" + "AaB03x";
var uploadFormName = "UploadPlugin";
var head = [];
head.push("--" + boundary + "\r\nContent-disposition: form-data; name=\"UploadPlugin\"\r\n");
head.push("backupDir=" + backupDir + ";user=" + username + ";password=" + password + ";uploaddir=" + uploadDir + ";debug=" + debug);
head.push("\r\n" + "--" + boundary);
head.push("Content-disposition: form-data; name=\"userfile\"; filename=\"" + uploadFilename + "\"");
head.push("Content-Type: text/html;charset=UTF-8");
head.push("Content-Length: " + text.length + "\r\n");
head.push("");
// Assemble the tail and the data itself
var tail = "\r\n--" + boundary + "--\r\n",
data = head.join("\r\n") + text + tail;
// Do the HTTP post
var http = new XMLHttpRequest();
http.open("POST",url,true,username,password);
http.setRequestHeader("Content-Type","multipart/form-data; charset=UTF-8; boundary=" + boundary);
http.onreadystatechange = function() {
if(http.readyState == 4 && http.status == 200) {
if(http.responseText.substr(0,4) === "0 - ") {
callback(null);
} else {
callback(http.responseText);
}
}
};
try {
http.send(data);
} catch(ex) {
return callback($tw.language.getString("Error/Caption") + ":" + ex);
}
$tw.notifier.display("$:/language/Notifications/Save/Starting");
return true;
};
/*
Information about this saver
*/
UploadSaver.prototype.info = {
name: "upload",
priority: 2000,
capabilities: ["save", "autosave"]
};
/*
Static method that returns true if this saver is capable of working
*/
exports.canSave = function(wiki) {
return true;
};
/*
Create an instance of this saver
*/
exports.create = function(wiki) {
return new UploadSaver(wiki);
};
})();
<$reveal state="$:/temp/advancedsearch" type="nomatch" text="">
<$button popup=<<qualify "$:/state/filterDeleteDropdown">> class="tc-btn-invisible">
{{$:/core/images/delete-button}}
</$button>
</$reveal>
<$reveal state=<<qualify "$:/state/filterDeleteDropdown">> type="popup" position="belowleft" animate="yes">
<div class="tc-block-dropdown-wrapper">
<div class="tc-block-dropdown tc-edit-type-dropdown">
<div class="tc-dropdown-item-plain">
<$set name="resultCount" value="""<$count filter={{$:/temp/advancedsearch}}/>""">
您确定要删除 <<resultCount>> 个条目?
</$set>
</div>
<div class="tc-dropdown-item-plain">
<$button class="tc-btn">
<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>
删除这些条目
</$button>
</div>
</div>
</div>
</$reveal>
<$link>
<$set name="backgroundColor" value={{!!color}}>
<span style=<<tag-styles>> class="tc-tag-label">
<<toc-caption>>
</span>
</$set>
</$link>
<center>
''编辑器快捷键速记'': <kbd>Ctrl</kbd>+<kbd>H</kbd>
|!格式|!快捷键|
|{{$:/language/Buttons/Bold/Caption}}|<kbd>Ctrl</kbd>+<kbd>B</kbd>|
|{{$:/language/Buttons/Italic/Caption}}|<kbd>Ctrl</kbd>+<kbd>I</kbd>|
|{{$:/language/Buttons/Strikethrough/Caption}}|<kbd>Ctrl</kbd>+<kbd>T</kbd>|
|{{$:/language/Buttons/Underline/Caption}}|<kbd>Ctrl</kbd>+<kbd>U</kbd>|
|{{$:/language/Buttons/Subscript/Caption}}|<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>B</kbd>|
|{{$:/language/Buttons/Superscript/Caption}}|<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd>|
|{{$:/language/Buttons/MonoLine/Caption}}|<kbd>Ctrl</kbd>+<kbd>M</kbd>|
|{{$:/language/Buttons/Linkify/Caption}}|<kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>L</kbd>|
|{{$:/language/Buttons/Transcludify/Caption}}|<kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>T</kbd>|
|{{$:/language/Buttons/MonoBlock/Caption}}|<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>M</kbd>|
|{{$:/language/Buttons/Quote/Caption}}|<kbd>Ctrl</kbd>+<kbd>Q</kbd>|
|{{$:/language/Buttons/Link/Caption}}|<kbd>Ctrl</kbd>+<kbd>L</kbd>|
|{{$:/language/Buttons/ListBullet/Caption}}|<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>L</kbd>|
|{{$:/language/Buttons/ListNumber/Caption}}|<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>N</kbd>|
|{{$:/language/Buttons/Heading1/Caption}}|<kbd>Ctrl</kbd>+<kbd>1</kbd>|
|{{$:/language/Buttons/Heading2/Caption}}|<kbd>Ctrl</kbd>+<kbd>2</kbd>|
|{{$:/language/Buttons/Heading3/Caption}}|<kbd>Ctrl</kbd>+<kbd>3</kbd>|
|{{$:/language/Buttons/Heading4/Caption}}|<kbd>Ctrl</kbd>+<kbd>4</kbd>|
|{{$:/language/Buttons/Heading5/Caption}}|<kbd>Ctrl</kbd>+<kbd>5</kbd>|
|{{$:/language/Buttons/Heading6/Caption}}|<kbd>Ctrl</kbd>+<kbd>6</kbd>|
|{{$:/language/Buttons/Excise/Caption}}|<kbd>Ctrl</kbd>+<kbd>E</kbd>|
|{{$:/language/Buttons/Picture/Caption}}|<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>I</kbd>|
|{{$:/language/Buttons/Stamp/Caption}}|<kbd>Ctrl</kbd>+<kbd>S</kbd>|
|{{$:/language/Buttons/Preview/Caption}}|<kbd>Alt</kbd>+<kbd>P</kbd>|
</center>
\whitespace trim
\define lingo-base() $:/language/EditTemplate/
\define tag-styles()
background-color:$(backgroundColor)$;
fill:$(foregroundColor)$;
color:$(foregroundColor)$;
\end
\define tag-body-inner(colour,fallbackTarget,colourA,colourB,icon,tagField:"tags")
\whitespace trim
<$vars foregroundColor=<<contrastcolour target:"""$colour$""" fallbackTarget:"""$fallbackTarget$""" colourA:"""$colourA$""" colourB:"""$colourB$""">> backgroundColor="""$colour$""">
<span style=<<tag-styles>> class="tc-tag-label tc-tag-list-item tc-small-gap-right">
<$transclude tiddler="""$icon$"""/><<toc-caption>>
<$button class="tc-btn-invisible tc-remove-tag-button" style=<<tag-styles>>><$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter="-[{!!title}]"/>{{$:/core/images/close-button}}</$button>
</span>
</$vars>
\end
\define tag-body(colour,palette,icon,tagField:"tags")
<$macrocall $name="tag-body-inner" colour="""$colour$""" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon="""$icon$""" tagField=<<__tagField__>>/>
\end
\define edit-tags-template(tagField:"tags")
\whitespace trim
<div class="tc-edit-tags">
<$list filter="[list[!!$tagField$]sort[title]]" storyview="pop">
<$macrocall $name="tag-body" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}} tagField=<<__tagField__>>/>
</$list>
<$vars tabIndex={{$:/config/EditTabIndex}} cancelPopups="yes">
<$macrocall $name="tag-picker" tagField=<<__tagField__>>/>
</$vars>
</div>
\end
<$set name="saveTiddler" value=<<currentTiddler>>>
<$macrocall $name="edit-tags-template" tagField=<<tagField>>/>
</$set>
<div class="tc-menu-list-item">
<$link to={{!!title}}><<toc-caption>></$link>
</div>
\whitespace trim
\define lingo-base() $:/language/CloseAll/
\define drop-actions()
<$action-listops $tiddler=<<tv-story-list>> $subfilter="+[insertbefore:currentTiddler<actionTiddler>]"/>
\end
\define placeholder()
<div class="tc-droppable-placeholder"/>
\end
\define droppable-item(button)
\whitespace trim
<$droppable actions=<<drop-actions>> enable=<<tv-allow-drag-and-drop>>>
<<placeholder>>
<div>
$button$
</div>
</$droppable>
\end
<div class="tc-sidebar-tab-open">
<$list filter="[list<tv-story-list>]" history=<<tv-history-list>> storyview="pop">
<div class="tc-sidebar-tab-open-item">
<$macrocall $name="droppable-item" button="""<$button message="tm-close-tiddler" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class="tc-btn-invisible tc-btn-mini tc-small-gap-right">{{$:/core/images/close-button}}</$button><$link to={{!!title}}><<toc-caption>></$link>"""/>
</div>
</$list>
<$tiddler tiddler="">
<div>
<$macrocall $name="droppable-item" button="""<$button message="tm-close-all-tiddlers" class="tc-btn-invisible tc-btn-mini"><<lingo Button>></$button>"""/>
</div>
</$tiddler>
</div>
\define lingo-base() $:/language/ControlPanel/
\define config-title()
$:/config/PageControlButtons/Visibility/$(listItem)$
\end
<<lingo Basics/Version/Prompt>> <<version>>
<$vars tv-config-toolbar-icons="yes" tv-config-toolbar-text="yes" tv-config-toolbar-class="">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">
<div style="position:relative;" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>
<$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show"/> <$transclude tiddler=<<listItem>>/>
</div>
</$list>
</$vars>
\whitespace trim
\define title-styles()
fill:$(foregroundColor)$;
\end
\define config-title()
$:/config/ViewToolbarButtons/Visibility/$(listItem)$
\end
<div class="tc-tiddler-title">
<div class="tc-titlebar">
<span class="tc-tiddler-controls">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]" variable="listItem"><$reveal type="nomatch" state=<<config-title>> text="hide"><$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]"><$transclude tiddler=<<listItem>>/></$set></$reveal></$list>
</span>
<$set name="tv-wikilinks" value={{$:/config/Tiddlers/TitleLinks}}>
<$link>
<$set name="foregroundColor" value={{!!color}}>
<$list filter="[all[current]has[icon]]~[[$:/config/DefaultTiddlerIcon]has[text]]">
<span class="tc-tiddler-title-icon" style=<<title-styles>>>
<$transclude tiddler={{!!icon}}>
<$transclude tiddler={{$:/config/DefaultTiddlerIcon}}/>
</$transclude>
</span>
</$list>
</$set>
<$list filter="[all[current]removeprefix[$:/]]">
<h2 class="tc-title" title={{$:/language/SystemTiddler/Tooltip}}>
<span class="tc-system-title-prefix">$:/</span><$text text=<<currentTiddler>>/>
</h2>
</$list>
<$list filter="[all[current]!prefix[$:/]]">
<h2 class="tc-title">
<<toc-caption>>
</h2>
</$list>
</$link>
</$set>
</div>
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState>> class="tc-tiddler-info tc-popup-handle" animate="yes" retain="yes">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/TiddlerInfoSegment]!has[draft.of]] [[$:/core/ui/TiddlerInfo]]" variable="listItem"><$transclude tiddler=<<listItem>> mode="block"/></$list>
</$reveal>
</div>
HelloThere
GettingStarted
Community
<<<
在一些领域,弃用对某些功能、设计或习惯的使用,是令人沮丧的;通常是因为它已被取代,或不再被认为是安全的 - 但不完全删除或禁止其使用。
<<< [[维基百科|https://en.wikipedia.org/wiki/Deprecation]]
/*\
title: $:/edition/tw5.com/dropbox-url.js
type: application/javascript
module-type: macro
Implements the Dropbox URL converter macro.
```
<$macrocall $name="dropbox-url" url={{$:/temp/dropbox}}/>
```
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports.name = "dropbox-url";
exports.params = [
{name: "url", default: "https://www.dropbox.com/s/<gobbledegook>/mywiki.html"}
];
exports.run = function(url) {
url = url.replace("www.dropbox.com","dl.dropboxusercontent.com");
return "[[" + url + "]]";
};
})();
\define saveTiddlerFilter()
[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]
\end
\define savingEmpty()
yes
\end
{{$:/core/templates/tiddlywiki5.html}}
<$button class="tc-btn-download">
<$action-sendmessage $message="tm-download-file" $param="$:/editions/en-US/download-empty" filename="empty.html"/>
英文版 {{$:/core/images/save-button}}
</$button>
\define .concat(1,2,3,4,5) $1$$2$$3$$4$$5$
\define .def(_) <dfn class="doc-def">$_$</dfn>
\define .em(_) <em class="doc-em">$_$</em>
\define .strong(_) <strong class="doc-strong">$_$</strong>
\define .place(_) <code class="doc-place">$_$</code>
\define .word(_) "$_$"
\define .preamble(_) :.doc-preamble $_$
\define .note(_)
@@.doc-note
;注意
: $_$
@@
\end
\define .tid(_) <code class="doc-tiddler">$_$</code>
\define .tag(_) <code class="doc-tag">$_$</code>
\define .field(_) <code class="doc-field">$_$</code>
\define .value(_) <code class="doc-value">$_$</code>
\define .op(_) <code class="doc-operator">$_$</code>
\define .var(_) <code class="doc-var">$_$</code>
\define .wid(_) <code class="doc-widget">$$_$</code>
\define .attr(_) <code class="doc-attr">$_$</code>
\define .param(_) <code class="doc-param">$_$</code>
\define .mtitle(_) $_$ 宏
\define .otitle(_) $_$ 运算符
\define .vtitle(_) $_$ 变量
\define .link(_,to) <$link to="$to$">$_$</$link>
\define .clink(_,to) <span class="doc-clink"><<.link """$_$""" "$to$">></span>
\define .dlink(_,to) <$macrocall $name=".link" _=<<.def "$_$">> to="$to$">/>
\define .dlink-ex(_,to) <a href="$to$" class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer"><<.def "$_$">></a>
\define .flink(to) <$macrocall $name=".link" _=<<.field {{$to$!!caption}}>> to="$to$"/>
\define .mlink(_,to) <$macrocall $name=".link" _=<<.var "$_$">> to=<<.mtitle "$_$">>/>
\define .mlink2(_,to) <$macrocall $name=".link" _=<<.var "$_$">> to="$to$"/>
\define .olink(_) <$macrocall $name=".link" _=<<.op "$_$">> to=<<.otitle "$_$">>/>
\define .olink2(_,to) <$macrocall $name=".link" _=<<.op "$_$">> to=<<.otitle "$to$">>/>
\define .vlink(_,to) <$macrocall $name=".link" _=<<.var "$_$">> to=<<.vtitle "$_$">>/>
\define .vlink2(_,to) <$macrocall $name=".link" _=<<.var "$_$">> to="$to$"/>
\define .wlink(to) <$macrocall $name=".link" _=<<.wid {{$to$!!caption}}>> to="$to$"/>
\define .wlink2(_,to) <$macrocall $name=".link" _="$_$" to="$to$"/>
\define .key(_) <span class="doc-key">$_$</span>
\define .combokey(_) <$macrocall $name=".if" cond="$_$" then=<<.key '$_$'>>/>
\define .keycombo(1,2,3,4) <<.combokey "$1$">><<.if "$2$" +>><<.combokey "$2$">><<.if "$3$" +>><<.combokey "$3$">><<.if "$4$" +>><<.combokey "$4$">>
\define .tab(_) <span class="doc-tab">{{$_$!!caption}}</span>
\define .sidebar-tab(_) <<.tab "$:/core/ui/SideBar/$_$">>
\define .more-tab(_) <<.tab "$:/core/ui/MoreSideBar/$_$">>
\define .info-tab(_) <<.tab "$:/core/ui/TiddlerInfo/$_$">>
\define .controlpanel-tab(_) <<.tab "$:/core/ui/ControlPanel/$_$">>
\define .advancedsearch-tab(_) <<.tab "$:/core/ui/AdvancedSearch/$_$">>
\define .toc-tab() <<.tab "TableOfContents">>
\define .example-tab(_) <span class="doc-tab">$_$</span>
\define .button(_) <span class="doc-button">{{$:/core/ui/Buttons/$_$!!caption}}</span>
\define .icon(_) <span class="doc-icon">{{$_$}}</span>
\define .tip(_) <div class="doc-icon-block"><div class="doc-block-icon">{{$:/core/images/tip}}</div> $_$</div>
\define .warning(_) <div class="doc-icon-block"><div class="doc-block-icon">{{$:/core/images/warning}}</div> $_$</div>
\define .state-prefix() $:/state/editions/tw5.com/
\define .lorem()
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\end
\define .toc-lorem()
这是一个示例条目。请参阅[[目录宏示例|Table-of-Contents Macros (Examples)]]。
<<.lorem>>
\end
\define .example(n,eg,egvar:NO-SUCH-VAR)
<div class="doc-example">
<$reveal default="$egvar$" type="match" text="NO-SUCH-VAR">
<$macrocall $name="copy-to-clipboard-above-right" src="""$eg$"""/>
<$codeblock code="""$eg$"""/>
</$reveal>
<$reveal default="$egvar$" type="nomatch" text="NO-SUCH-VAR">
<!-- allow an example to contain """ -->
<$macrocall $name="copy-to-clipboard-above-right" src=<<$egvar$>>/>
<$codeblock code=<<$egvar$>>/>
</$reveal>
<$list filter="[title<.state-prefix>addsuffix{!!title}addsuffix[/]addsuffix[$n$]]" variable=".state">
<$reveal state=<<.state>> type="nomatch" text="show">
<dl>
<dd><$button set=<<.state>> setTo="show">运行</$button></dd>
</dl>
</$reveal>
<$reveal state=<<.state>> type="match" text="show">
<dl>
<dd><$button set=<<.state>> setTo="">隐藏</$button></dd>
</dl>
<blockquote class="doc-example-result">
<$reveal default="$egvar$" type="match" text="NO-SUCH-VAR">
$eg$
</$reveal>
<$reveal default="$egvar$" type="nomatch" text="NO-SUCH-VAR">
<<$egvar$>>
</$reveal>
</blockquote>
</$reveal>
</$list>
\end
\define .link-badge(text,link,colour)
<a href=<<__link__>> class="doc-link-badge" style="background-color:$colour$;" target="_blank" rel="noopener noreferrer"><$text text=<<__text__>>/></a>
\end
\define .link-badge-added(link,colour:#ffe246) <<.link-badge "添加" """$link$""" """$colour$""">>
\define .link-badge-addendum(link,colour:#fcc84a) <<.link-badge "附加" """$link$""" """$colour$""">>
\define .link-badge-extended(link,colour:#f9a344) <<.link-badge "扩充" """$link$""" """$colour$""">>
\define .link-badge-fixed(link,colour:#f88b40) <<.link-badge "修正" """$link$""" """$colour$""">>
\define .link-badge-here(link,colour:#d88e63) <<.link-badge "这里" """$link$""" """$colour$""">>
\define .link-badge-hide(link,colour:#9d959f) <<.link-badge "隐藏" """$link$""" """$colour$""">>
\define .link-badge-improved(link,colour:#7593c7) <<.link-badge "改进" """$link$""" """$colour$""">>
\define .link-badge-modified(link,colour:#7f99c9) <<.link-badge "修改" """$link$""" """$colour$""">>
\define .link-badge-removed(link,colour:#a9aabc) <<.link-badge "移除" """$link$""" """$colour$""">>
\define .link-badge-renamed(link,colour:#b4b995) <<.link-badge "改名" """$link$""" """$colour$""">>
\define .link-badge-updated(link,colour:#91ba66) <<.link-badge "更新" """$link$""" """$colour$""">>
<pre><$view field="text"/></pre>
.doc-def {
font-style: normal;
font-weight: bold;
}
.doc-em {
font-style: italic;
font-variant: small-caps;
text-decoration: none;
}
.doc-strong {
color: <<colour alert-highlight>>;
font-style: normal;
font-weight: bold;
}
.doc-foreign {
font-style: italic;
}
.doc-place {
background-color: <<color background>>;
border: none;
color: <<color very-muted-foreground>>;
font-style: normal;
font-weight: bold;
}
.doc-button,
.doc-tab,
.doc-tag,
.doc-tiddler,
.doc-field,
.doc-value,
.doc-operator,
.doc-var,
.doc-widget,
.doc-attr,
.doc-param {
background-color: <<color background>>;
border: none;
color: <<color very-muted-foreground>>;
font-weight: bold;
padding: 0;
}
a .doc-place,
a .doc-button,
a .doc-tab,
a .doc-tag,
a .doc-tiddler,
a .doc-field,
a .doc-value,
a .doc-operator,
a .doc-var,
a .doc-widget,
a .doc-attr {
color: <<color tiddler-link-foreground>>;
}
.doc-button svg {
height: 1em;
}
td svg {
height: 1em;
}
.doc-key {
color: <<color very-muted-foreground>>;
font-weight: bold;
}
.doc-clink code {
color: <<colour tiddler-link-foreground>>;
}
.doc-preamble {
border: 2px solid <<colour code-border>>;
color: <<colour very-muted-foreground>>;
font-size: 90%;
margin-left: 0;
padding: 0.5em 0.7em;
}
.doc-note dt {
color: <<colour very-muted-foreground>>;
}
.doc-note dd {
border-left: 2px solid <<colour code-border>>;
padding-left: 0.6em;
}
.doc-example {
margin: 1em 0;
padding: 0.8em 0;
}
.doc-example:hover {
background-color: <<colour code-background>>;
}
.doc-example ul {
margin-bottom: 0;
padding-bottom: 0;
margin-top: 0.2em;
}
.doc-example pre:first-child {
margin-top: 0;
}
.doc-example-result {
border-left: 5px solid <<colour blockquote-bar>>;
border-right: 5px solid <<colour blockquote-bar>>;
margin-left: 0;
margin-right: 0;
padding: 0 10px;
}
.doc-example-result ul {
margin-left: 0;
padding-left: 10px;
}
.doc-example-result ol {
margin-left: 0;
padding-left: 20px;
}
.doc-table th, .doc-table tr {
vertical-align: top;
}
.doc-table th a {
font-weight: bold;
}
tr.doc-table-subheading {
height: 2em;
vertical-align: middle;
}
.doc-table.before-tiddler-body {
margin-top: 2em;
}
.doc-icon svg {
width: 1em;
height: 1em;
vertical-align: middle;
}
.doc-icon-block {
border-left: 2px solid <<colour code-border>>;
margin-left: 3em;
padding-left: 0.6em;
position: relative;
}
.doc-block-icon {
position: absolute;
left: -3em;
top: 0.2em;
}
.doc-block-icon .tc-image-tip {
fill: <<colour primary>>;
}
.doc-block-icon .tc-image-warning {
fill: <<colour alert-highlight>>;
}
.doc-from-version {
display: inline-block;
border-radius: 1em;
background: <<colour tiddler-controls-foreground>>;
color: <<colour background>>;
fill: <<colour background>>;
padding: 0 0.4em;
font-size: 0.7em;
text-transform: uppercase;
font-weight: bold;
line-height: 1.5;
vertical-align: text-bottom;
}
.doc-deprecated-version {
display: inline-block;
border-radius: 1em;
background: red;
color: <<colour background>>;
fill: <<colour background>>;
padding: 0 0.4em;
font-size: 0.7em;
text-transform: uppercase;
font-weight: bold;
line-height: 1.5;
vertical-align: text-bottom;
}
.doc-deprecated-version svg,
.doc-from-version svg {
width: 1em;
height: 1em;
vertical-align: text-bottom;
}
.doc-link-badge {
text-decoration: none;
background-color: #7eba4c;
color: <<colour foreground>>;
padding: 3px;
border-radius: 4px;
font-weight: bold;
font-size: 0.75em;
}
.doc-link-badge:hover {
text-decoration: underline;
}
/*\
title: $:/editions/tw5.com/if-macro.js
type: application/javascript
module-type: macro
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports.name = ".if";
exports.params = [
{ name: "cond" },
{ name: "then" },
{ name: "else" }
];
exports.run = function(cond, then, elze) {
then = then || "";
elze = elze || "";
return cond ? then : elze;
};
})();
<$macrocall $name=".example" n="1"
eg="""<ul>
<li><code><<qualify "BaseTiddler">></code></li>
<li><code><<transclusion>></code></li>
</ul>"""/>
\define sayhi(name:"兔八哥" address:"兔子坑")
嗨,我是 $name$,住在 $address$.
\end
\define say-hi-using-variables()
嗨,我是 $(name)$,住在 $(address)$.
\end
\define name() 八哥
\define tags-of-current-tiddler() {{!!tags}}
\define tv-get-export-image-link(src) http://www.tiddlywiki.com/$src$
\define tv-wikilink-tooltip()
<$transclude field="tooltip">(<$transclude field="caption"/>)</$transclude>
\end
\define .operator-examples(op,text:"示例") <$link to="$op$ Operator (Examples)">$text$</$link>
\define .operator-example(n,eg,ie)
<div class="doc-example">
`$eg$`
<$macrocall $name=".if" cond="""$ie$""" then="""<dd>→ $ie$</dd>"""/>
<$list filter="[title<.state-prefix>addsuffix{!!title}addsuffix[/]addsuffix[$n$]]" variable=".state">
<$reveal state=<<.state>> type="nomatch" text="show">
<dl>
<dd><$button set=<<.state>> setTo="show">运行</$button></dd>
</dl>
</$reveal>
<$reveal state=<<.state>> type="match" text="show">
<dl>
<dd><$button set=<<.state>> setTo="">隐藏</$button></dd>
</dl>
<blockquote class="doc-example-result">
<ul><$list filter="""$eg$""" emptyMessage="(空的)">
<li><$link to={{!!title}}><<toc-caption>></$link></li>
</$list></ul>
</blockquote>
</$reveal>
</$list>
\end
\define .inline-operator-example(eg)
<code><$text text=<<__eg__>>/></code> 计算结果为 <$list filter=<<__eg__>> emptyMessage="(empty)"> <code><$text text=<<currentTiddler>>/></code> </$list>
\end
\define .this-is-operator-example() 此示例条目用来演示一些[[筛选器运算符|Filter Operators]]。
\define .using-days-of-week() 这些示例使用 [[Days of the Week]] 条目。
\define .s-matching-is-case-sensitive() 寻找匹配的 <<.place S>>,区分大小写字母。
\define .node-only-operator()
<$macrocall $name=".note" _="此运算符<<.em 不>>适用运行于浏览器中的 ~TiddlyWiki。"/>
\end
\define .op-place()
<$macrocall $name=".if"
cond="""$(op-name)$"""
then="<<.place '$(op-name)$'>> = "
else=""/>
\end
\define .op-row()
<$macrocall $name=".if"
cond="""$(op-body)$"""
then="""<tr><th align="right">$(op-head)$</th><td><<.op-place>>$(op-body)$</td></tr>"""
else=""/>
\end
<$set name="op-head" value="">
<$set name="op-body" value="">
<$set name="op-name" value="">
<$list filter="[all[current]tag[Filter Operators]]">
<table class="doc-table before-tiddler-body">
<!-->
<$set name="op-head" value="目的">
<$set name="op-body" value={{!!op-purpose}}>
<<.op-row>>
</$set>
</$set>
<!-->
<$set name="op-head" value="[[输入|Filter Syntax]]">
<$set name="op-body" value={{!!op-input}}>
<<.op-row>>
</$set>
</$set>
<!-->
<$set name="op-head" value="`!` 输入">
<$set name="op-body" value={{!!op-neg-input}}>
<<.op-row>>
</$set>
</$set>
<!-->
<$set name="op-head" value="[[后缀|Filter Step]]">
<$set name="op-body" value={{!!op-suffix}}>
<$set name="op-name" value={{!!op-suffix-name}}>
<<.op-row>>
</$set>
</$set>
</$set>
<!-->
<$set name="op-head" value="[[参数|Filter Parameter]]">
<$set name="op-body" value={{!!op-parameter}}>
<$set name="op-name" value={{!!op-parameter-name}}>
<<.op-row>>
</$set>
</$set>
</$set>
<!-->
<$set name="op-head" value="输出">
<$set name="op-body" value={{!!op-output}}>
<<.op-row>>
</$set>
</$set>
<!-->
<$set name="op-head" value="`!` 输出">
<$set name="op-body" value={{!!op-neg-output}}>
<<.op-row>>
</$set>
</$set>
<!-->
</table>
<$list filter="[all[current]has[from-version]]" variable="listItem">
<$macrocall $name=".from-version" version={{!!from-version}}/>
</$list>
</$list>
</$set>
</$set>
</$set>
( '"""' [:{/' """ 以外的任何字符 '/}] '"""'
| '"' [:{/' " 以外的任何字符 '/}] '"'
| "'" [:{/" ' 以外的任何字符 "/}] "'"
| "[[" [:{/" ] 以外的任何字符 "/}] "]]"
| {/""" ' " 以外的任何字符或空格 """/}
)
\define style-guide(good,bad)
<table>
<tbody>
<tr>
<th>建议</th>
<td>``$good$``</td>
</tr>
<tr>
<th>不好</th>
<td>``$bad$``</td>
</tr>
</tbody>
</table>
\end
\define .variable-examples(v,text:"示例") <$link to="$v$ Variable (Examples)">$text$</$link>
\define .macro-examples(m,text:"示例") <$link to="$m$ Macro (Examples)">$text$</$link>
\define .widget-examples(w,text:"示例") <$link to="$w$ Widget (Examples)">$text$</$link>
\define .js-macro-link(_) [[$_$|https://tiddlywiki.com/dev/index.html#JavaScript%20Macros]]
\define .this-is-static-link-variable() <<.tip "当 ~TiddlyWiki 运行于浏览器时,此变量没有任何有用的效果,此时 `href` 属性将被忽略 -- 条目之间的链接改由 JavaScript 运行。当使用 [[Node.js 配置|TiddlyWiki on Node.js]][[生成静态版|RenderTiddlersCommand]]的维基时,该变量才生成作用。">>
\define .this-is-toolbar-config-variable(configTiddler)
可以事先将其设置为 <<.value yes>> 或 <<.value no>> 嵌入这样的按钮。
标准的页面范本将其设置为在 [[$configTiddler$]] 中找到的值,将使其成为整个页面的缺省。用户可以通过使用[[控制台|$:/ControlPanel]]的<<.controlpanel-tab 设置>>页签中的复选框调整此默认值。
\end
\define .from-version(version)
<span class="doc-from-version">{{$:/core/images/warning}} $version$ 版的新功能 </span>
\end
\define .deprecated-since(version, superseded:"TODO-Link")
<$button to="Deprecated - What does it mean" class="doc-deprecated-version tc-btn-invisible">{{$:/core/images/warning}} 自 $version$ 起弃用</$button>,改用 [[$superseded$]]
\end
<pre><$view field="text"/></pre>
\define wikitext-example(src)
<div class="doc-example">
<$macrocall $name="copy-to-clipboard-above-right" src=<<__src__>>/>
```
$src$
```
显示结果:
$$$text/vnd.tiddlywiki
$src$
$$$
... HTML 标记:
$$$text/vnd.tiddlywiki>text/html
$src$
$$$
</div>
\end
\define wikitext-example-without-html(src)
<div class="doc-example">
<$macrocall $name="copy-to-clipboard-above-right" src=<<__src__>>/>
```
$src$
```
显示结果:
$$$text/vnd.tiddlywiki
$src$
$$$
</div>
\end
\define tw-code(tiddler)
<$codeblock language={{$tiddler$!!type}} code={{$tiddler$}}/>
\end
\define tw-code-link(tiddler)
[[$tiddler$]]:
<<tw-code $tiddler$>>
\end
\define saveTiddlerFilter()
[[$:/core]] [[$:/isEncrypted]] [[$:/language]] [[$:/languages/zh-Hans]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]
\end
\define savingEmpty()
yes
\end
{{$:/core/templates/tiddlywiki5.html}}
<$button class="tc-btn-download">
<$action-sendmessage $message="tm-download-file" $param="$:/editions/zh-Hans/download-empty" filename="empty.zh-Hans.html"/>
简体中文版 {{$:/core/images/save-button}}
</$button>
\define saveTiddlerFilter()
[[$:/core]] [[$:/isEncrypted]] [[$:/language]] [[$:/languages/zh-Hant]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]
\end
\define savingEmpty()
yes
\end
{{$:/core/templates/tiddlywiki5.html}}
<$button class="tc-btn-download">
<$action-sendmessage $message="tm-download-file" $param="$:/editions/zh-Hant/download-empty" filename="empty.zh-Hant.html"/>
正體中文版 {{$:/core/images/save-button}}
</$button>
\define static-link-base()
https://tiddlywiki.com/static/$(title)$.html
\end
\define make-static-link()
<$set name="title" filter="[<currentTiddler>encodeuricomponent[]encodeuricomponent[]]" select="0">
<a href=<<static-link-base>> class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer"><$text text=<<static-link-base>>/></a>
</$set>
\end
\define github-link-base()
https://github.com/Jermolene/TiddlyWiki5/blob/tiddlywiki-com/editions/zh-Hans/tiddlers/$(title)$
\end
\define make-github-link()
<$set name="title" value={{$:/config/OriginalTiddlerPaths##$(currentTiddler)$}}>
<$set name="title" filter="[<title>encodeuricomponent[]]" select="0">
<a href=<<github-link-base>> class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer"><$text text=<<github-link-base>>/></a>
</$set>
</$set>
\end
<$list filter="[all[current]!is[system]!is[shadow]]">
该条目的静态网页呈现于下列网址:
* <<make-static-link>>
经由发送一个此条目的 ~GitHub 提出请求,来协助我们改进文档:
* <<make-github-link>>
</$list>
AAABAAUAEBAAAAEAIAAoBQAAVgAAACAgAAABACAAKBQAAH4FAAAwMAAAAQAgACgtAACmGQAAQEAAAAEAIAAoUAAAzkYAAICAAAABACAAKEABAPaWAAAoAAAAEAAAACAAAAABACAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAAbQAAAN0AAADdAAAAbQAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcAAACqDAwM9hAQEP9dXV3/HBwc/wAAAP8XFxf2n5+ftf7+/mcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADnZWVl/8PDw//MzMz/rKys/yIiIv8AAAD/vLy8//////9AQEDvAAAAQAAAAAAAAAAAAAAAAAAAACYAAADoIyMj/9ra2v/MzMz/uLi4/wAAAP8AAAD/AAAA/8DAwP/AwMD/AAAA/wAAAOgAAAAmAAAAAAAAAAEAAACsAAAA/x8fH//m5ub//////7Ozs/8DAwP/DQ0N/xISEv/U1NT/sLCw/wAAAP8AAAD/AAAArAAAAAEAAAApAAAA+AAAAP8AAAD/bm5u///////29vb/0dHR/+Li4v/k5OT//v7+//r6+v+VlZX/CQkJ/wAAAPgAAAApAAAAbwAAAP8AAAD/AAAA/5+fn////////////////////////////////////////////6Ghof9CQkL/AAAAbwAAAN4qKir/dnZ2/46Ojv/9/f3/////////////////////////////////////////////////8/Pz/ykpKd5GRkbhoaGh/2xsbP9sbGz/nJyc//Hx8f//////9vb2/9jY2P/T09P/3t7e/9vb2/////////////////9ra2vb2NjY3xISEv8AAAD/AAAA/wAAAP8iIiL/PT09/ycnJ/8ICAj/BQUF/wsLC/8tLS3///////r6+v/w8PD/39/fkLW1tWENDQ38AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/CAgI/5SUlP81NTX/HR0d98XFxWoAAAAAAAAArAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAKwAAAAAAAAAAAAAACYAAADoAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOgAAAAmAAAAAAAAAAAAAAAAAAAAQAAAAOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOcAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAqgAAAPYAAAD/AAAA/wAAAP8AAAD/AAAA9gAAAKoAAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAAbQAAAN0AAADdAAAAbQAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAPQAAAHYAAADIAAAA8QAAAPEAAADIAAAAdgAAAD0AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5AAAAmQAAAOAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOAAAACZAAAAOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAqwAAAPsAAAD/AAAA/wAAAP8AAAD/HR0d/y8vL/8NDQ3/AAAA/wAAAP8AAAD/AAAA/wAAAP8KCgr7qKiot////6n///9vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAO4AAAD/EBAQ/0xMTP8/Pz//CgoK/4iIiP/v7+///////5SUlP8AAAD/AAAA/wAAAP8kJCT/jo6O/729vf///////////6WlpbkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIgAAAD/AAAA/xgYGP/Kysr///////f39/+4uLj///////Pz8/+1tbX/QUFB/wAAAP8AAAD/AAAA/3Fxcf////////////////+RkZH/AAAA+gAAAIgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAA/wAAAP8DAwP/ra2t//////+cnJz/rq6u///////f39//MjIy/wAAAP8AAAD/AAAA/wAAAP8AAAD/c3Nz////////////9fX1/ygoKP8AAAD/AAAA/wAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAP8AAAD/AAAA/01NTf//////sbGx/25ubv/y8vL//v7+/1NTU/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VVVX////////////AwMD/AQEB/wAAAP8AAAD/AAAA/wAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkAAADvAAAA/wAAAP8AAAD/sLCw//////+5ubn/19fX///////5+fn/JiYm/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/z8/P////////////4iIiP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAACkAAAAAAAAAAAAAAAAAAAABAAAArAAAAP8AAAD/AAAA/wAAAP+BgYH///////z8/P/6+vr///////7+/v9JSUn/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Z2dn////////////dnZ2/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArAAAAAEAAAAAAAAAAAAAADgAAAD7AAAA/wAAAP8AAAD/AAAA/w0NDf/Q0ND//////////////////////4+Pj/8AAAD/Dw8P/x8fH/8oKCj/Jycn/xwcHP/AwMD////////////Dw8P/FBQU/wAAAP8AAAD/AAAA/wAAAP8AAAD7AAAAOAAAAAAAAAAAAAAAmgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0dHR//6+vr/////////////////7e3t/8nJyf/h4eH/8vLy//n5+f/5+fn/7+/v//39/f/////////////////T09P/R0dH/wAAAP8AAAD/AAAA/wAAAP8AAACaAAAAAAAAAA8AAADiAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8XFxf/////////////////////////////////////////////////////////////////////////////////7+/v/eHh4/wAAAP8AAAD/AAAA/wAAAOIAAAAPAAAAOwAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9aWlr/8PDw///////////////////////////////////////////////////////////////////////////////////////7+/v/MzMz/xMTE/8AAAD/AAAA/gAAADsAAAB2AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FBQU/+bm5v/////////////////////////////////////////////////////////////////////////////////////////////////Z2dn/5eXl/5SUlP8FBQX/AAAAdgAAAMkAAAD/AAAA/wAAAP8GBgb/GRkZ/xgYGP9ERET//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2pqav8AAADIAAAA8QAAAP8tLS3/lpaW/9vb2//19fX/9PT0/+vr6///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1tbW/wkJCfEAAADwY2Nj//n5+f/w8PD/xsbG/7m5uf+/v7//2dnZ//X19f/////////////////////////////////////////////////////////////////////////////////////////////////////////////////8/Pz/NDQ08UFBQcf19fX/fHx8/xYWFv8AAAD/AAAA/wAAAP8ICAj/KSkp/5ubm//4+Pj///////////////////////z8/P/d3d3/u7u7/7m5uf/Jycn/29vb/9/f3//Hx8f/vLy8//////////////////////////////////////9cXFzJ+Pj4zpqamv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/y8vL/9mZmb/iIiI/4aGhv9kZGT/MzMz/w0NDf8AAAD/AAAA/wICAv8JCQn/CwsL/wEBAf8hISH/9vb2/////////////////////////////////5WVlXT////6T09P/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wsLC//e3t7//////////////////Pz8//z8/P//////9fX1Z////5JgYGD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/66urv//////wMDA/19fX/8yMjL/NTU1/46OjvP////D////JF5eXtMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/PDw8/62trf8aGhr/AAAA/wAAAP8AAAD/AAAAm/Ly8hQAAAAAAAAAOAAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAAA4AAAAAAAAAAAAAAAAAAAArQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArQAAAAEAAAAAAAAAAAAAAAAAAAApAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO8AAAApAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACIAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAAA7gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADuAAAAZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAqwAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD7AAAAqwAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAAAJkAAADgAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADgAAAAmQAAADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA9AAAAdgAAAMgAAADxAAAA8QAAAMgAAAB2AAAAPQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAMAAAAGAAAAABACAAAAAAAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAEMAAAB3AAAAvAAAAN0AAAD0AAAA9AAAAN0AAAC8AAAAdwAAAEMAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAHMAAAC8AAAA6wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADrAAAAvAAAAHMAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0AAACpAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADxAAAAqQAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAAqgAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wwMDP8MDAz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0dHfuwsLC6////rf///7T///9e////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAHIAAADtAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9HR0f/srKy/+Dg4P/f39//mJiY/wgICP8AAAD/AAAA/wAAAP8AAAD/AAAA/wwMDP8jIyP/MjIy/8/Pz/////////////////////++////AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAqwAAAP8AAAD/AAAA/wAAAP9RUVH/nZ2d/6mpqf95eXn/BgYG/3Fxcf/6+vr/////////////////6urq/xAQEP8AAAD/AAAA/wAAAP8AAAD/BwcH/7u7u//w8PD/9vb2/////////////////7W1tf8kJCS3AAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADJAAAA/wAAAP8AAAD/AAAA/3Jycv/9/f3/////////////////mJiY//39/f////////////Pz8//Nzc3/YGBg/wAAAP8AAAD/AAAA/wAAAP8AAAD/IyMj//b29v//////////////////////5ubm/xkZGf8AAAD/AAAAyQAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAANMAAAD/AAAA/wAAAP8AAAD/TExM//r6+v///////////87Ozv/Z2dn/////////////////nZ2d/ycnJ/8GBgb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Ly8v//f39///////////////////////iYmJ/wAAAP8AAAD/AAAA/wAAANMAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAyQAAAP8AAAD/AAAA/wAAAP8WFhb/3d3d///////7+/v/Z2dn/zY2Nv/Y2Nj///////////+cnJz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ICAg//Hx8f/////////////////39/f/Ly8v/wAAAP8AAAD/AAAA/wAAAP8AAADJAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACsAAAA/wAAAP8AAAD/AAAA/wAAAP+EhIT///////////+BgYH/OTk5/+Li4v///////////97e3v8SEhL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/DAwM/9/f3//////////////////IyMj/AwMD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHIAAAD/AAAA/wAAAP8AAAD/AAAA/xUVFf/j4+P///////////9OTk7/y8vL/////////////////6Ojo/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwMD/8XFxf////////////////+IiIj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/0dHR/////////////////+ysrL/29vb/////////////////6Ojo/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/729vf////////////////9eXl7/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO8AAAApAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAArAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGv/f39/////////////7+/v/+fn5/////////////////8zMzP8EBAT/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FRUV/+Xl5f////////////////9QUFD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACsAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA7AAAA+wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9cXFz///////////////////////////////////////X19f8pKSn/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/V1dX//////////////////////92dnb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD7AAAAOwAAAAAAAAAAAAAAAAAAAAEAAACqAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/rq6u//////////////////////////////////////9paWn/AAAA/wwMDP8iIiL/NDQ0/0BAQP9JSUn/SkpK/z4+Pv8tLS3/t7e3///////////////////////n5+f/S0tL/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAqgAAAAEAAAAAAAAAAAAAACUAAADzAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/KCgo/+/v7//////////////////////////////////g4OD/xMTE/9/f3//v7+///Pz8///////////////////////29vb//v7+////////////////////////////+vr6/4iIiP8PDw//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8wAAACUAAAAAAAAAAAAAAHUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4mJif/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Ozs7/Ozs7/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHUAAAAAAAAAAQAAAL0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zg4OP/7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8fHx/0NDQ/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAL0AAAABAAAAGQAAAOwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ICAg/8vLy////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8vLy/8FBQX/AAAA/wAAAP8AAAD/AAAA/wAAAOwAAAAZAAAAQwAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FBQX/s7Oz//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v9fX1//gICA/319ff8bGxv/AAAA/wAAAP4AAABDAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP89PT3//v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6+vr////////////U1NT/ISEh/wAAAP8AAAB3AAAAvAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9tbW3/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////tLS0/wQEBP8AAAC8AAAA3AAAAP8AAAD/AAAA/wAAAP8cHBz/UVFR/35+fv+RkZH/jo6O/3BwcP+oqKj//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/0hISP8AAADcAAAA9AAAAP8AAAD/NjY2/6Wlpf/t7e3//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6ampv8AAAD0AAAA9AICAv96enr/9/f3/////////////f39//n5+f/29vb/+/v7/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3/8ODg70AAAA3HZ2dv//////+/v7/6mpqf9dXV3/MjIy/yMjI/8hISH/Kioq/0JCQv9nZ2f/nJyc/+jo6P////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////b29v8zMzPcNjY2uvPz8//m5ub/RERE/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI/+rq6v//Pz8////////////////////////////////////////////5ubm/7u7u/+enp7/n5+f/6ysrP+/v7//0tLS/+Dg4P/c3Nz/xsbG/6CgoP+YmJj///////////////////////////////////////////////////////n5+f9FRUW83d3dtv7+/v9PT0//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Ojo6/39/f/+wsLD/ysrK/9LS0v/Gxsb/qamp/3Z2dv9BQUH/FBQU/wAAAP8AAAD/AAAA/wAAAP8BAQH/BwcH/wsLC/8KCgr/AwMD/wAAAP8cHBz/8/Pz//////////////////////////////////////////////////b29v9gYGB3////9tLS0v8EBAT/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BQUF/wkJCf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8KCgr/2NjY//////////////////////////////////////////////////j4+P+mpqZI////9a+vr/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/tLS0///////////////////////////////////////////////////////4+PhT////prq6uv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/fX19/////////////////8PDw/+goKD/b29v/z09Pf9XV1f/pqam//Hx8f/////W////PNPT0/0ICAj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/MjIy//r6+v//////vLy8/wgICP8AAAD/AAAA/wAAAP8AAAD/AAAA/0lJSZH///+N////BdbW1pIRERH4AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3h4eP+wsLD/Ghoa/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8wAAACIAAAAAAAAAAAAAAAAAAACrAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAqgAAAAEAAAAAAAAAAAAAAAAAAAA7AAAA+wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD7AAAAOwAAAAAAAAAAAAAAAAAAAAAAAAABAAAArAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACsAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO8AAAApAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACsAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAyQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADJAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAANMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANMAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAyQAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAqwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACrAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAHIAAADtAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7QAAAHIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAAqgAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAACqAAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0AAACqAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADxAAAAqgAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAHMAAAC8AAAA6wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADrAAAAvAAAAHMAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAEMAAAB2AAAAuwAAANwAAAD0AAAA9AAAANwAAAC7AAAAdgAAAEMAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAEAAAACAAAAAAQAgAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAmAAAAQwAAAHUAAACwAAAA0AAAAOIAAAD2AAAA9gAAAOIAAADQAAAAsAAAAHUAAABDAAAAJgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAATQAAAJAAAADJAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO0AAADJAAAAkAAAAE0AAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcAAACPAAAA2gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA2gAAAI8AAAA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAKwAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAKwAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAAqAAAAPoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/LS0t+q+vr73///+x////w////7X///9LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAB6AAAA7QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FBQU/2FhYf+jo6P/v7+//7Kysv9tbW3/DAwM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/QUFB/+vr6///////////////////////////3////wsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAC1AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/EhIS/yEhIf8WFhb/AAAA/wAAAP8AAAD/QUFB/9HR0f///////////////////////////1FRUf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/GBgY/3p6ev+QkJD/lJSU/9/f3///////////////////////8PDw/8HBwYD///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAADgAAAA/wAAAP8AAAD/AAAA/wAAAP8dHR3/o6Oj/9zc3P/o6Oj/4ODg/6urq/8HBwf/UFBQ//Dw8P////////////////////////////////86Ojr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4eHh///////////////////////////////////////6+vr/0NDQ/8AAADZAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFsAAADyAAAA/wAAAP8AAAD/AAAA/wAAAP8gICD/0NDQ///////////////////////6+vr/dXV1/+/v7////////////////////////v7+/9/f3/+BgYH/AwMD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf+0tLT//////////////////////////////////////3Jycv8AAAD/AAAA/wAAAPIAAABbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGcAAAD5AAAA/wAAAP8AAAD/AAAA/wAAAP8MDAz/v7+/////////////////////////////9vb2//b29v/////////////////v7+//iIiI/zIyMv8YGBj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FBQX/wcHB/////////////////////////////////+Hh4f8VFRX/AAAA/wAAAP8AAAD/AAAA+QAAAGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFoAAAD6AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ioqK//////////////////Hx8f93d3f/Y2Nj/8zMzP/////////////////o6Oj/QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwMD/76+vv////////////////////////////////+Li4v/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAADyAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/PDw8//b29v///////////+/v7/9HR0f/BwcH/6Kiov/+/v7////////////39/f/Tk5O/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+pqan////////////////////////////4+Pj/ODg4/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPIAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAADhAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BAQE/7i4uP////////////r6+v9ZWVn/FRUV/76+vv//////////////////////mZmZ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/jIyM////////////////////////////0NDQ/wYGBv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA4QAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAC3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP/6+vr////////////b29v/DAwM/7m5uf///////////////////////Pz8/0JCQv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/2tra////////////////////////////46Ojv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC3AAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+Xl5f/////////////////9fX1/0FBQf/f39////////////////////////j4+P8pKSn/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VVVX///////////////////////////9aWlr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAA7AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/y8vL//////////////////////+qqqr/3t7e///////////////////////8/Pz/Ozs7/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/V1dX///////////////////////6+vr/Pj4+/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADsAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAqgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/29vb///////////////////////+Pj4//n5+f///////////////////////////2pqav8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/5OTk///////////////////////9vb2/zQ0NP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAKoAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAPoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8KCgr/xcXF//////////////////////////////////////////////////////+pqan/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/w0NDf/Z2dn///////////////////////39/f9GRkb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAK4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zs7O//19fX/////////////////////////////////////////////////4+Pj/xAQEP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9MTEz/////////////////////////////////mJiY/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAK4AAAACAAAAAAAAAAAAAAAAAAAAAAAAADcAAAD2AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/iYmJ//////////////////////////////////////////////////7+/v9JSUn/AAAA/wcHB/8dHR3/Nzc3/0tLS/9bW1v/ZmZm/25ubv9xcXH/ZWVl/1ZWVv8+Pj7/srKy//////////////////////////////////39/f+RkZH/EBAQ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD2AAAANwAAAAAAAAAAAAAAAAAAAAAAAACQAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xQUFP/Y2Nj/////////////////////////////////////////////////0dHR/7u7u//c3Nz/6+vr//f39///////////////////////////////////////+vr6//7+/v///////////////////////////////////////////8XFxf85OTn/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJAAAAAAAAAAAAAAAAAAAAASAAAA2wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/X19f//7+/v//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9fX1/4WFhf8NDQ3/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADbAAAAEgAAAAAAAAAAAAAATAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wsLC//Q0ND/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+//yQkJP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEwAAAAAAAAAAAAAAJAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/nZ2d///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Q0ND/FRUV/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACQAAAAAAAAAAUAAADIAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8EBAT/iIiI//n5+f///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAUAAAAlAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ampq///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////d3d3/Dg4O/xYWFv8xMTH/Dg4O/wAAAP8AAAD/AAAA/wAAAO0AAAAlAAAAQwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/IiIi/+rq6v//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7/5eXl//d3d3/9vb2/9XV1f9RUVH/AAAA/wAAAP8AAAD/AAAAQwAAAHYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/25ubv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3/1VVVf8AAAD/AAAA/wAAAHUAAACwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+kpKT////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////n5+f/JCQk/wAAAP8AAACwAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/Dg4O/yAgIP8sLCz/Jycn/xYWFv8ICAj/tra2/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////5eXl/8AAAD/AAAAzwAAAOIAAAD/AAAA/wAAAP8AAAD/AAAA/zc3N/91dXX/tLS0/+bm5v/y8vL/9vb2//T09P/v7+//0NDQ/+fn5//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////u7u7/JSUl/wAAAOIAAAD2AAAA/wAAAP8AAAD/Pz8//66urv/5+fn//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2pqav8AAAD2AAAA9gAAAP8KCgr/kJCQ//r6+v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+xsbH/AAAA9gAAAOIHBwf/o6Oj/////////////////+vr6/+3t7f/i4uL/3Z2dv9ycnL/b29v/3x8fP+Wlpb/tLS0/+Dg4P/39/f/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2dnZ/xISEuIAAADQenp6////////////29vb/2hoaP8aGhr/AgIC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf8NDQ3/MTEx/3h4eP/s7Oz//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+fn5/8nJyfQMDAwr+rq6v//////vLy8/x4eHv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Li4u/7i4uP/9/f3////////////////////////////////////////////////////////////u7u7/w8PD/5KSkv96enr/fX19/4iIiP+cnJz/sbGx/8bGxv/Z2dn/4uLi/9nZ2f/AwMD/oKCg/2xsbP90dHT////////////////////////////////////////////////////////////////////////////o6Oj/Ly8vsMbGxqb/////39/f/xwcHP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8EBAT/RUVF/46Ojv/Hx8f/6enp//X19f/5+fn/+Pj4//Ly8v/i4uL/t7e3/4KCgv9PT0//Ghoa/wQEBP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FBQX/CAgI/woKCv8ICAj/AwMD/wAAAP8AAAD/Ghoa//Hx8f//////////////////////////////////////////////////////////////////////5OTk/z8/P3X+/v7Z/////3t7e/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BAQE/xEREf8tLS3/Ozs7/zg4OP8lJSX/DAwM/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wwMDP/Q0ND//////////////////////////////////////////////////////////////////////+Li4v9mZmZD////+fz8/P85OTn/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/r6+v///////////////////////////////////////////////////////////////////////t7e3+srKyNf7+/ury8vL/KCgo/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4SEhP///////////////////////////////////////////////////////////////////////v7+//f390f///+s9/f3/ysrK/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9NTU3////////////////////////////m5ub/2dnZ/6urq/9tbW3/UVFR/3p6ev/Dw8P/+vr6//////////+1////Tf////9AQED/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/GRkZ/+jo6P////////////////+SkpL/DQ0N/wYGBv8AAAD/AAAA/wAAAP8AAAD/AwMD/z4+Pv3U1NTH////9evr6w3+/v7dbGxs/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+Pj4////////////+8vLz/Dg4O/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADaAAAAFP///y8AAAAA////YWlpac0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ERER/6Ojo/+np6f/FxcX/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAkAAAAAAAAAAAAAAAAAAAAAAAAAA3AAAA9gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9gAAADcAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAK4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAK4AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA+gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPoAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAKsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACrAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAA7AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADsAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAtwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAtwAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAADhAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA4QAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAPIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8gAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaAAAA+gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+gAAAFoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGcAAAD5AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+QAAAGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAPIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8gAAAFsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAA4AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA4AAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAC1AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAtQAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAHoAAADsAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADsAAAAegAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAKgAAAD6AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPoAAACoAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAKwAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAKwAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANwAAAI8AAADaAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADaAAAAjwAAADcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAE0AAACQAAAAyQAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADtAAAAyQAAAJAAAABNAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAmAAAAQwAAAHUAAACvAAAAzwAAAOIAAAD2AAAA9gAAAOIAAADPAAAArwAAAHUAAABDAAAAJgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAgAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADcAAABfAAAAhgAAAKkAAAC5AAAAxgAAANIAAADfAAAA7AAAAPkAAAD5AAAA7AAAAN8AAADSAAAAxgAAALkAAACpAAAAhgAAAF8AAAA3AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAEkAAACLAAAAwgAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA6QAAAMIAAACLAAAASQAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABCAAAAhAAAAMYAAAD7AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAAAMYAAACEAAAAQgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAACVAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7QAAAJUAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHwAAADaAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADaAAAAfAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAK8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAK8AAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQAAALkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC5AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQwAAAMIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAwgAAAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAKwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/S0tL/6CgoNf19fXA////3v///+7////4////+////9z///+B////CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAHUAAADzAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/KSkp/9HR0f/////////////////////////////////////////////////////D////AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAADUAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8NDQ3/YmJi/6Ojo//Kysr/7u7u/+3t7f/h4eH/vr6+/4CAgP8iIiL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/ysrK//u7u7///////////////////////////////////////////////////////////////8+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACIAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8SEhL/m5ub//X19f////////////////////////////////////////////j4+P9HR0f/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8LCwv/3Nzc////////////////////////////////////////////////////////////////7f///xUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAxAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/SEhI/+bm5v///////////////////////////////////////////////////////////7Kysv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP9ycnL/gYGB/4yMjP+UlJT/jo6O/7m5uf////////////////////////////////////////////////////////////z8/Or///80AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAAAOwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/DAwM/0FBQf9iYmL/b29v/3t7e/9jY2P/Ojo6/wwMDP8AAAD/AAAA/wAAAP8AAAD/AAAA/2xsbP/9/f3/////////////////////////////////////////////////////////////////sLCw/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9paWn////////////////////////////////////////////////////////////////////////////////////////////FxcX/Gxsb7QAAAEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIkAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Dw8P/5iYmP/29vb/////////////////////////////////9PT0/3d3d/8AAAD/AAAA/wAAAP+Hh4f///////////////////////////////////////////////////////////////////////////94eHj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/+Pj4///////////////////////////////////////////////////////////////////////////////////////q6ur/wYGBv8AAAD/AAAA/gAAAIkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAACoAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yAgIP/c3Nz//////////////////////////////////////////////////////xkZGf8AAAD/iYmJ////////////////////////////////////////////////////////////////////////////+Pj4/yEhIf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8bGxv//////////////////////////////////////////////////////////////////////////////////////8vLy/8GBgb/AAAA/wAAAP8AAAD/AAAA/wAAAKgAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAuwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8iIiL/5OTk////////////////////////////////////////////////////////////JCQk/4ODg/////////////////////////////////////////////////////////////////////////////f39/9WVlb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0xMTP//////////////////////////////////////////////////////////////////////////////////////NTU1/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALsAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAMwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/EhIS/9jY2P////////////////////////////////////////////////////////////T09P92dnb////////////////////////////////////////////////////////////+/v7/3t7e/7CwsP96enr/ICAg/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Xl5e/////////////////////////////////////////////////////////////////////////////////7e3t/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMwAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAADaAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMDA/+/v7//////////////////////////////////////////////////////////////////7+/v//7+/v/////////////////////////////////////////////////k5OT/cHBw/w8PD/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9qamr/////////////////////////////////////////////////////////////////////////////////RUVF/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANoAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAA2gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/g4OD///////////////////////////////////////////////////////////////////////5+fn////////////////////////////////////////////+/v7/hISE/wYGBv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3d3d////////////////////////////////////////////////////////////////////////////9PT0/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANoAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAMwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0JCQv/9/f3///////////////////////////////////////////+jo6P/ZWVl/3BwcP9PT0//aGho//j4+P///////////////////////////////////////Pz8/1tbW/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/bW1t////////////////////////////////////////////////////////////////////////////bW1t/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMwAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAC7AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8KCgr/3d3d////////////////////////////////////////////enp6/wAAAP8AAAD/AAAA/19fX//8/Pz///////////////////////////////////////////9jY2P/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9RUVH///////////////////////////////////////////////////////////////////////n5+f8SEhL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALsAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAqAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4qKiv///////////////////////////////////////////3BwcP8AAAD/AAAA/wAAAP9zc3P//v7+////////////////////////////////////////////jY2N/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zU1Nf//////////////////////////////////////////////////////////////////////qqqq/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAKgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8nJyf/+/v7//////////////////////////////////////9wcHD/AAAA/wAAAP8BAQH/jIyM/////////////////////////////////////////////////8nJyf8FBQX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FxcX//////////////////////////////////////////////////////////////////////9UVFT/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/6qqqv//////////////////////////////////////kJCQ/wAAAP8AAAD/BwcH/6ioqP/////////////////////////////////////////////////+/v7/KCgo/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/8vLy////////////////////////////////////////////////////////////+Pj4/wwMDP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAOwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8xMTH//v7+/////////////////////////////////+bm5v8KCgr/AAAA/xYWFv/Gxsb//////////////////////////////////////////////////////7i4uP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/Nzc3///////////////////////////////////////////////////////////+2trb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7AAAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADEAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/6Kiov//////////////////////////////////////m5ub/wAAAP8AAAD/u7u7////////////////////////////////////////////////////////////Y2Nj/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/6ioqP///////////////////////////////////////////////////////////21tbf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAxAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8SEhL/9/f3//////////////////////////////////////+np6f/AAAA/wMDA//19fX///////////////////////////////////////////////////////////88PDz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/kJCQ////////////////////////////////////////////////////////////NTU1/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/2xsbP////////////////////////////////////////////b29v8TExP/ExMT/////////////////////////////////////////////////////////////////yUlJf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////j4+P8GBgb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA1AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/srKy/////////////////////////////////////////////////3p6ev8bGxv/////////////////////////////////////////////////////////////////Ly8v/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/25ubv//////////////////////////////////////////////////////ycnJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv/w8PD/////////////////////////////////////////////////5+fn/xcXF/////////////////////////////////////////////////////////////////9BQUH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/bm5u//////////////////////////////////////////////////////+rq6v/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAA8wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwMD/9XV1f//////////////////////////////////////////////////////enp6//z8/P///////////////////////////////////////////////////////////2xsbP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+fn5///////////////////////////////////////////////////////5mZmf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPMAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Q0ND///////////////////////////////////////////////////////v7+//9/f3////////////////////////////////////////////////////////////nZ2d/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC/+fn5///////////////////////////////////////////////////////h4eH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAKsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/q6ur///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////j4+P/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8+Pj7///////////////////////////////////////////////////////////+Ojo7/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8eHh7/9fX1//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8sLCz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/5OTk////////////////////////////////////////////////////////////7m5uf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP91dXX//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3V1df8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FBQX/6urq////////////////////////////////////////////////////////////5OTk/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMDA//Ly8v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1BQUP//////////////////////////////////////////////////////////////////////QUFB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/y4uLv/6+vr////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v/Dw8P/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/sLCw///////////////////////////////////////////////////////////////////////a2tr/FBQU/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4ODg/////////////////////////////////////////////////////////////////////////////////////////////////////////////////9XV1f/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf8JCQn/ERER/xkZGf8gICD/GBgY/woKCv8AAAD/AAAA/wAAAP8AAAD/AAAA/xkZGf/7+/v////////////////////////////////////////////////////////////////////////////d3d3/NTU1/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/CAgI/93d3f///////////////////////////////////////////////////////////////////////////////////////////////////////////6SkpP8AAAD/AAAA/wAAAP8AAAD/EBAQ/zIyMv9UVFT/dnZ2/5iYmP+ysrL/xsbG/9vb2//v7+////////////////////////////////////////v7+//r6+v/z8/P/6+vr/+Pj4//q6ur///////////////////////////////////////////////////////////////////////////////////////6+vr/dHR0/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/TExM////////////////////////////////////////////////////////////////////////////////////////////////////////////7u7u/4iIiP+qqqr/zMzM/+7u7v//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////t7e3/xcXF/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/s7Oz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7u7u/2NjY/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8iIiL/+Pj4/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v/8lJSX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+cnJz///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////b29v9lZWX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAADtAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/ykpKf/+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+oqKj/Dg4O/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7QAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAQgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/7S0tP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////b29v/HR0d/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQgAAAAAAAAAAAAAAAAAAAAAAAACEAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/QUFB///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////b29v/EBAQ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACEAAAAAAAAAAAAAAAAAAAAAAAAAMYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/woKCv+rq6v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+hoaH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMYAAAAAAAAAAAAAAAAAAAAMAAAA+wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8cHBz/zc3N//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8vLy//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAAAAwAAAAAAAAAAAAAAEkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/IyMj/+bm5v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6enp/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAASQAAAAAAAAAAAAAAiwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMDA//Hx8f//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Pz8/yEhIf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACLAAAAAAAAAAAAAADCAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/fn5+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fX19/wAAAP8AAAD/Kysr/2dnZ/9mZmb/QkJC/wICAv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMIAAAAAAAAAAAAAAOkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/y4uLv/7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////FxcX/CwsL/6Kiov//////////////////////4+Pj/1tbW/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA6QAAAAAAAAAQAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/oaGh//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////b29v/V1dX//////////////////////////////////////6Kiov8EBAT/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAEAAAADcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wsLC//4+Pj//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////66urv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAA3AAAAXgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/TExM/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////4iIiP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAF4AAACGAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+Dg4P//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0ZGRv8AAAD/AAAA/wAAAP8AAAD/AAAAhQAAAKkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/6ampv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f/wsLC/8AAAD/AAAA/wAAAP8AAACpAAAAuAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/tra2////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////dHR0/wAAAP8AAAD/AAAA/wAAALgAAADFAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Dw8P/y8vL/8+Pj7/SkpK/1BQUP9AQED/Ly8v/xwcHP8DAwP/AAAA/wAAAP+4uLj////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////n5+f/CAgI/wAAAP8AAAD/AAAAxQAAANIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwMD/zg4OP99fX3/wcHB/+7u7v////////////////////////////////////////////n5+f/Nzc3/nJyc/9PT0/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9ra2v/AAAA/wAAAP8AAADSAAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FBQX/X19f/66urv/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3/8AAAD/AAAA/wAAAN8AAADsAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8GBgb/aGho/+Hh4f///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////y4uLv8AAAD/AAAA7AAAAPkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FBQX/a2tr/+Pj4///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////dXV1/wAAAP8AAAD5AAAA+QAAAP8AAAD/AAAA/wAAAP8AAAD/JSUl/8zMzP////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+9vb3/AAAA/wAAAPkAAADsAAAA/wAAAP8AAAD/AAAA/0xMTP/z8/P///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////n5+f8LCwv/AAAA7AAAAN8AAAD/AAAA/wAAAP9aWlr/+/v7///////////////////////////////////////////////////////////////////////8/Pz/9/f3//Ly8v/t7e3/7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0BAQP8AAADfAAAA0gAAAP8AAAD/RkZG//z8/P///////////////////////////////////////f39/87Ozv+Ojo7/WFhY/zMzM/8QEBD/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/CQkJ/yUlJf9AQED/XFxc/3h4eP+kpKT/29vb////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ZmZm/wAAANIAAADGAAAA/yMjI//u7u7/////////////////////////////////29vb/3d3d/8YGBj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FBQU/0tLS/+Dg4P/09PT//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+IiIj/AAAAxgAAALkAAAD/urq6////////////////////////////7Ozs/2pqav8DAwP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/X19f//Dw8P///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////4+Pj/8AAAC5AAAAqVBQUP///////////////////////////8fHx/8WFhb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Hh4e/7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6enp/7Gxsf+pqan/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////k5OT/wAAAKkAAACGxcXF//////////////////////+0tLT/CAgI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC/29vb//v7+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////r6+v/Hx8f/kJCQ/1tbW/8yMjL/FhYW/wwMDP8TExP/Gxsb/yMjI/80NDT/SkpK/2FhYf93d3f/jY2N/6Ojo/+4uLj/zs7O/+Dg4P/q6ur/7u7u/+jo6P/S0tL/tra2/5qamv9+fn7/WVlZ/yIiIv8AAAD/AAAA/yoqKv////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+Ojo7/AAAAhlhYWHn/////////////////////3Nzc/w4ODv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xMTE/90dHT/1NTU///////////////////////////////////////////////////////////////////////////////////////////////////////5+fn/w8PD/4SEhP9ERET/CwsL/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwMD//X19f///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////4aGhv8AAABezc3NlP////////////////////83Nzf/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Jycn/2pqav+oqKj/09PT//j4+P/////////////////////////////////////////////////9/f3/3d3d/66urv91dXX/PT09/wkJCf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/yMjI////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fn5+/wAAADf39/e0////////////////vr6+/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwMD/yUlJf9OTk7/aWlp/3Nzc/99fX3/eHh4/2NjY/9PT0//MTEx/wkJCf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+ZmZn///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////92dnb/AAAAEP7+/t3///////////////9RUVH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/2xsbP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////4CAgPMAAAAA////7P///////////////xISEv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Pj4+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////n5+f5AAAAAD////5///////////d3d3/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8QEBD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////JycnYAAAAAP///+z//////////7m5uf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/f39////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Pz8+QAAAAA/v7+0v//////////tra2/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/66urv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////f///xL///+z//////////+0tLT/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dXV1////////////////////////////////////////////////////////////////////////////////////////////9/f3/729vf+srKz/6enp////////////////////////////////////////////////Xv///3f//////////8DAwP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP85OTn//////////////////////////////////////////////////////////////////v7+/+Pj4/+9vb3/g4OD/0FBQf8ICAj/AAAA/wAAAP8AAAD/KCgo/2dnZ/+/v7////////////////////////////////+3////Nv//////////5+fn/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUFBf/u7u7////////////////////////////////////////////m5ub/IyMj/w4ODv8FBQX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8qKir/k5OT//Hx8f////////////////////8D/v7+6f//////////Dw8P/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/56env///////////////////////////////////////f39/0JCQv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/EBAQ7vv7+4T+/v7y/////wAAAAD///+J//////////81NTX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/OTk5//////////////////////////////////////98fHz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACVAAAAAP///xP///+IAAAAAP///yT////+/////1dXV/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/tLS0////////////////////////////r6+v/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAP///7P/////e3t76gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8XFxf/3d3d/////////////////6urq/8FBQX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////H////7dOTk6TAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8cHBz/pqam/+Hh4f91dXX/AwMD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAPMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADzAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA1AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADEAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAxAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAADsAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOwAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAALsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAuwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAMwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMwAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAANoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADaAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAANoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA2gAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAMwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMwAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAALsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC7AAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAKgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAqAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIkAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAIkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEsAAADsAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOwAAABLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAADEAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADEAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACIAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAAiAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA1AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA1AAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAdAAAAPMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8wAAAHQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAKsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAKsAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMAAADCAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMIAAABDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9AAAAuQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALkAAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAK8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAK8AAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAB8AAAA2QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA2QAAAHwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAJUAAADtAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADtAAAAlQAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABCAAAAhAAAAMYAAAD7AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAAAMYAAACEAAAAQgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABJAAAAiwAAAMIAAADpAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOkAAADCAAAAiwAAAEkAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAANwAAAF4AAACFAAAAqQAAALgAAADFAAAA0gAAAN8AAADsAAAA+QAAAPkAAADsAAAA3wAAANIAAADFAAAAuAAAAKkAAACFAAAAXgAAADcAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
<$vars tv-wikilinks="no">
* event-key:
* event-code:
* modifier:
</$vars>
{
"tiddlers": {
"$:/language/Buttons/AdvancedSearch/Caption": {
"title": "$:/language/Buttons/AdvancedSearch/Caption",
"text": "高级查找"
},
"$:/language/Buttons/AdvancedSearch/Hint": {
"title": "$:/language/Buttons/AdvancedSearch/Hint",
"text": "高级查找"
},
"$:/language/Buttons/Cancel/Caption": {
"title": "$:/language/Buttons/Cancel/Caption",
"text": "取消"
},
"$:/language/Buttons/Cancel/Hint": {
"title": "$:/language/Buttons/Cancel/Hint",
"text": "放弃对此条目的更改"
},
"$:/language/Buttons/Clone/Caption": {
"title": "$:/language/Buttons/Clone/Caption",
"text": "克隆"
},
"$:/language/Buttons/Clone/Hint": {
"title": "$:/language/Buttons/Clone/Hint",
"text": "克隆此条目"
},
"$:/language/Buttons/Close/Caption": {
"title": "$:/language/Buttons/Close/Caption",
"text": "关闭"
},
"$:/language/Buttons/Close/Hint": {
"title": "$:/language/Buttons/Close/Hint",
"text": "关闭此条目"
},
"$:/language/Buttons/CloseAll/Caption": {
"title": "$:/language/Buttons/CloseAll/Caption",
"text": "全部关闭"
},
"$:/language/Buttons/CloseAll/Hint": {
"title": "$:/language/Buttons/CloseAll/Hint",
"text": "关闭所有条目"
},
"$:/language/Buttons/CloseOthers/Caption": {
"title": "$:/language/Buttons/CloseOthers/Caption",
"text": "关闭其他"
},
"$:/language/Buttons/CloseOthers/Hint": {
"title": "$:/language/Buttons/CloseOthers/Hint",
"text": "关闭其他条目"
},
"$:/language/Buttons/ControlPanel/Caption": {
"title": "$:/language/Buttons/ControlPanel/Caption",
"text": "控制台"
},
"$:/language/Buttons/ControlPanel/Hint": {
"title": "$:/language/Buttons/ControlPanel/Hint",
"text": "开启控制台"
},
"$:/language/Buttons/CopyToClipboard/Caption": {
"title": "$:/language/Buttons/CopyToClipboard/Caption",
"text": "复制到剪贴板"
},
"$:/language/Buttons/CopyToClipboard/Hint": {
"title": "$:/language/Buttons/CopyToClipboard/Hint",
"text": "将此文本复制到剪贴板"
},
"$:/language/Buttons/Delete/Caption": {
"title": "$:/language/Buttons/Delete/Caption",
"text": "删除"
},
"$:/language/Buttons/Delete/Hint": {
"title": "$:/language/Buttons/Delete/Hint",
"text": "删除此条目"
},
"$:/language/Buttons/Edit/Caption": {
"title": "$:/language/Buttons/Edit/Caption",
"text": "编辑"
},
"$:/language/Buttons/Edit/Hint": {
"title": "$:/language/Buttons/Edit/Hint",
"text": "编辑此条目"
},
"$:/language/Buttons/Encryption/Caption": {
"title": "$:/language/Buttons/Encryption/Caption",
"text": "加密"
},
"$:/language/Buttons/Encryption/Hint": {
"title": "$:/language/Buttons/Encryption/Hint",
"text": "设置或清除保存此维基的密码"
},
"$:/language/Buttons/Encryption/ClearPassword/Caption": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
"text": "清除密码"
},
"$:/language/Buttons/Encryption/ClearPassword/Hint": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
"text": "清除密码且不加密保存此维基"
},
"$:/language/Buttons/Encryption/SetPassword/Caption": {
"title": "$:/language/Buttons/Encryption/SetPassword/Caption",
"text": "设置密码"
},
"$:/language/Buttons/Encryption/SetPassword/Hint": {
"title": "$:/language/Buttons/Encryption/SetPassword/Hint",
"text": "设置加密保存此维基的密码"
},
"$:/language/Buttons/ExportPage/Caption": {
"title": "$:/language/Buttons/ExportPage/Caption",
"text": "导出所有条目"
},
"$:/language/Buttons/ExportPage/Hint": {
"title": "$:/language/Buttons/ExportPage/Hint",
"text": "导出所有条目"
},
"$:/language/Buttons/ExportTiddler/Caption": {
"title": "$:/language/Buttons/ExportTiddler/Caption",
"text": "导出此条目"
},
"$:/language/Buttons/ExportTiddler/Hint": {
"title": "$:/language/Buttons/ExportTiddler/Hint",
"text": "导出此条目"
},
"$:/language/Buttons/ExportTiddlers/Caption": {
"title": "$:/language/Buttons/ExportTiddlers/Caption",
"text": "导出条目"
},
"$:/language/Buttons/ExportTiddlers/Hint": {
"title": "$:/language/Buttons/ExportTiddlers/Hint",
"text": "导出条目"
},
"$:/language/Buttons/SidebarSearch/Hint": {
"title": "$:/language/Buttons/SidebarSearch/Hint",
"text": "选择侧边栏的查找字段"
},
"$:/language/Buttons/Fold/Caption": {
"title": "$:/language/Buttons/Fold/Caption",
"text": "收合条目"
},
"$:/language/Buttons/Fold/Hint": {
"title": "$:/language/Buttons/Fold/Hint",
"text": "收合此条目的内容"
},
"$:/language/Buttons/Unfold/Caption": {
"title": "$:/language/Buttons/Unfold/Caption",
"text": "展开条目"
},
"$:/language/Buttons/Unfold/Hint": {
"title": "$:/language/Buttons/Unfold/Hint",
"text": "展开此条目的内容"
},
"$:/language/Buttons/FoldOthers/Caption": {
"title": "$:/language/Buttons/FoldOthers/Caption",
"text": "收合其他条目"
},
"$:/language/Buttons/FoldOthers/Hint": {
"title": "$:/language/Buttons/FoldOthers/Hint",
"text": "收合其他已开启条目的内容"
},
"$:/language/Buttons/FoldAll/Caption": {
"title": "$:/language/Buttons/FoldAll/Caption",
"text": "收合所有条目"
},
"$:/language/Buttons/FoldAll/Hint": {
"title": "$:/language/Buttons/FoldAll/Hint",
"text": "收合所有已开启条目的内容"
},
"$:/language/Buttons/Fold/FoldBar/Caption": {
"title": "$:/language/Buttons/Fold/FoldBar/Caption",
"text": "收合栏"
},
"$:/language/Buttons/Fold/FoldBar/Hint": {
"title": "$:/language/Buttons/Fold/FoldBar/Hint",
"text": "可选的收合与展开条目的长条按钮"
},
"$:/language/Buttons/UnfoldAll/Caption": {
"title": "$:/language/Buttons/UnfoldAll/Caption",
"text": "展开所有条目"
},
"$:/language/Buttons/UnfoldAll/Hint": {
"title": "$:/language/Buttons/UnfoldAll/Hint",
"text": "展开所有已开启条目的内容"
},
"$:/language/Buttons/FullScreen/Caption": {
"title": "$:/language/Buttons/FullScreen/Caption",
"text": "全屏幕"
},
"$:/language/Buttons/FullScreen/Hint": {
"title": "$:/language/Buttons/FullScreen/Hint",
"text": "进入或离开全屏模式"
},
"$:/language/Buttons/Help/Caption": {
"title": "$:/language/Buttons/Help/Caption",
"text": "帮助"
},
"$:/language/Buttons/Help/Hint": {
"title": "$:/language/Buttons/Help/Hint",
"text": "显示帮助面板"
},
"$:/language/Buttons/Home/Caption": {
"title": "$:/language/Buttons/Home/Caption",
"text": "首页"
},
"$:/language/Buttons/Home/Hint": {
"title": "$:/language/Buttons/Home/Hint",
"text": "开启首页条目"
},
"$:/language/Buttons/Import/Caption": {
"title": "$:/language/Buttons/Import/Caption",
"text": "导入"
},
"$:/language/Buttons/Import/Hint": {
"title": "$:/language/Buttons/Import/Hint",
"text": "导入许多类型的文件包括文本、图像、TiddlyWiki 或 JSON"
},
"$:/language/Buttons/Info/Caption": {
"title": "$:/language/Buttons/Info/Caption",
"text": "信息"
},
"$:/language/Buttons/Info/Hint": {
"title": "$:/language/Buttons/Info/Hint",
"text": "显示此条目的信息"
},
"$:/language/Buttons/Language/Caption": {
"title": "$:/language/Buttons/Language/Caption",
"text": "语言"
},
"$:/language/Buttons/Language/Hint": {
"title": "$:/language/Buttons/Language/Hint",
"text": "选择用户介面语言"
},
"$:/language/Buttons/Manager/Caption": {
"title": "$:/language/Buttons/Manager/Caption",
"text": "条目管理器"
},
"$:/language/Buttons/Manager/Hint": {
"title": "$:/language/Buttons/Manager/Hint",
"text": "开启条目管理器"
},
"$:/language/Buttons/More/Caption": {
"title": "$:/language/Buttons/More/Caption",
"text": "更多"
},
"$:/language/Buttons/More/Hint": {
"title": "$:/language/Buttons/More/Hint",
"text": "更多动作"
},
"$:/language/Buttons/NewHere/Caption": {
"title": "$:/language/Buttons/NewHere/Caption",
"text": "添加子条目"
},
"$:/language/Buttons/NewHere/Hint": {
"title": "$:/language/Buttons/NewHere/Hint",
"text": "创建一个标签为此条目名称的新条目"
},
"$:/language/Buttons/NewJournal/Caption": {
"title": "$:/language/Buttons/NewJournal/Caption",
"text": "添加日志"
},
"$:/language/Buttons/NewJournal/Hint": {
"title": "$:/language/Buttons/NewJournal/Hint",
"text": "创建一个新的日志条目"
},
"$:/language/Buttons/NewJournalHere/Caption": {
"title": "$:/language/Buttons/NewJournalHere/Caption",
"text": "添加子日志"
},
"$:/language/Buttons/NewJournalHere/Hint": {
"title": "$:/language/Buttons/NewJournalHere/Hint",
"text": "创建一个标签含此条目名称的新日志条目"
},
"$:/language/Buttons/NewImage/Caption": {
"title": "$:/language/Buttons/NewImage/Caption",
"text": "添加图像"
},
"$:/language/Buttons/NewImage/Hint": {
"title": "$:/language/Buttons/NewImage/Hint",
"text": "创建一个新的图像条目"
},
"$:/language/Buttons/NewMarkdown/Caption": {
"title": "$:/language/Buttons/NewMarkdown/Caption",
"text": "添加 Markdown 条目"
},
"$:/language/Buttons/NewMarkdown/Hint": {
"title": "$:/language/Buttons/NewMarkdown/Hint",
"text": "创建一个新的 Markdown 条目"
},
"$:/language/Buttons/NewTiddler/Caption": {
"title": "$:/language/Buttons/NewTiddler/Caption",
"text": "添加条目"
},
"$:/language/Buttons/NewTiddler/Hint": {
"title": "$:/language/Buttons/NewTiddler/Hint",
"text": "创建一个新的条目"
},
"$:/language/Buttons/OpenWindow/Caption": {
"title": "$:/language/Buttons/OpenWindow/Caption",
"text": "开启于新窗口"
},
"$:/language/Buttons/OpenWindow/Hint": {
"title": "$:/language/Buttons/OpenWindow/Hint",
"text": "在新窗口中开启条目"
},
"$:/language/Buttons/Palette/Caption": {
"title": "$:/language/Buttons/Palette/Caption",
"text": "调色板"
},
"$:/language/Buttons/Palette/Hint": {
"title": "$:/language/Buttons/Palette/Hint",
"text": "选择调色板"
},
"$:/language/Buttons/Permalink/Caption": {
"title": "$:/language/Buttons/Permalink/Caption",
"text": "引用链接"
},
"$:/language/Buttons/Permalink/Hint": {
"title": "$:/language/Buttons/Permalink/Hint",
"text": "设置浏览器网址栏为直接链接到此条目"
},
"$:/language/Buttons/Permaview/Caption": {
"title": "$:/language/Buttons/Permaview/Caption",
"text": "永久链接"
},
"$:/language/Buttons/Permaview/Hint": {
"title": "$:/language/Buttons/Permaview/Hint",
"text": "设置浏览器网址栏为直接链接到当前所有已开启条目"
},
"$:/language/Buttons/Print/Caption": {
"title": "$:/language/Buttons/Print/Caption",
"text": "打印页面"
},
"$:/language/Buttons/Print/Hint": {
"title": "$:/language/Buttons/Print/Hint",
"text": "打印当前页面"
},
"$:/language/Buttons/Refresh/Caption": {
"title": "$:/language/Buttons/Refresh/Caption",
"text": "刷新"
},
"$:/language/Buttons/Refresh/Hint": {
"title": "$:/language/Buttons/Refresh/Hint",
"text": "执行维基的完全刷新"
},
"$:/language/Buttons/Save/Caption": {
"title": "$:/language/Buttons/Save/Caption",
"text": "确定"
},
"$:/language/Buttons/Save/Hint": {
"title": "$:/language/Buttons/Save/Hint",
"text": "确定对此条目的更改"
},
"$:/language/Buttons/SaveWiki/Caption": {
"title": "$:/language/Buttons/SaveWiki/Caption",
"text": "保存变更"
},
"$:/language/Buttons/SaveWiki/Hint": {
"title": "$:/language/Buttons/SaveWiki/Hint",
"text": "保存变更"
},
"$:/language/Buttons/StoryView/Caption": {
"title": "$:/language/Buttons/StoryView/Caption",
"text": "查看模式"
},
"$:/language/Buttons/StoryView/Hint": {
"title": "$:/language/Buttons/StoryView/Hint",
"text": "选择查看条目的视觉效果"
},
"$:/language/Buttons/HideSideBar/Caption": {
"title": "$:/language/Buttons/HideSideBar/Caption",
"text": "隐藏侧边栏"
},
"$:/language/Buttons/HideSideBar/Hint": {
"title": "$:/language/Buttons/HideSideBar/Hint",
"text": "隐藏侧边栏"
},
"$:/language/Buttons/ShowSideBar/Caption": {
"title": "$:/language/Buttons/ShowSideBar/Caption",
"text": "显示侧边栏"
},
"$:/language/Buttons/ShowSideBar/Hint": {
"title": "$:/language/Buttons/ShowSideBar/Hint",
"text": "显示侧边栏"
},
"$:/language/Buttons/TagManager/Caption": {
"title": "$:/language/Buttons/TagManager/Caption",
"text": "标签管理"
},
"$:/language/Buttons/TagManager/Hint": {
"title": "$:/language/Buttons/TagManager/Hint",
"text": "标签管理"
},
"$:/language/Buttons/Timestamp/Caption": {
"title": "$:/language/Buttons/Timestamp/Caption",
"text": "时间戳记"
},
"$:/language/Buttons/Timestamp/Hint": {
"title": "$:/language/Buttons/Timestamp/Hint",
"text": "选择修改是否更新时间戳记"
},
"$:/language/Buttons/Timestamp/On/Caption": {
"title": "$:/language/Buttons/Timestamp/On/Caption",
"text": "时间戳记开启"
},
"$:/language/Buttons/Timestamp/On/Hint": {
"title": "$:/language/Buttons/Timestamp/On/Hint",
"text": "条目被修改时,更新时间戳记"
},
"$:/language/Buttons/Timestamp/Off/Caption": {
"title": "$:/language/Buttons/Timestamp/Off/Caption",
"text": "时间戳记关闭"
},
"$:/language/Buttons/Timestamp/Off/Hint": {
"title": "$:/language/Buttons/Timestamp/Off/Hint",
"text": "条目被修改时,不更新时间戳记"
},
"$:/language/Buttons/Theme/Caption": {
"title": "$:/language/Buttons/Theme/Caption",
"text": "布景主题"
},
"$:/language/Buttons/Theme/Hint": {
"title": "$:/language/Buttons/Theme/Hint",
"text": "选择布景主题"
},
"$:/language/Buttons/Bold/Caption": {
"title": "$:/language/Buttons/Bold/Caption",
"text": "粗体"
},
"$:/language/Buttons/Bold/Hint": {
"title": "$:/language/Buttons/Bold/Hint",
"text": "套用粗体格式于所选文本"
},
"$:/language/Buttons/Clear/Caption": {
"title": "$:/language/Buttons/Clear/Caption",
"text": "清除"
},
"$:/language/Buttons/Clear/Hint": {
"title": "$:/language/Buttons/Clear/Hint",
"text": "清除图像为纯色"
},
"$:/language/Buttons/EditorHeight/Caption": {
"title": "$:/language/Buttons/EditorHeight/Caption",
"text": "编辑器高度"
},
"$:/language/Buttons/EditorHeight/Caption/Auto": {
"title": "$:/language/Buttons/EditorHeight/Caption/Auto",
"text": "自动调整高度以适合内容"
},
"$:/language/Buttons/EditorHeight/Caption/Fixed": {
"title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
"text": "固定高度︰"
},
"$:/language/Buttons/EditorHeight/Hint": {
"title": "$:/language/Buttons/EditorHeight/Hint",
"text": "选择文本编辑器的高度"
},
"$:/language/Buttons/Excise/Caption": {
"title": "$:/language/Buttons/Excise/Caption",
"text": "剪切"
},
"$:/language/Buttons/Excise/Caption/Excise": {
"title": "$:/language/Buttons/Excise/Caption/Excise",
"text": "执行剪切"
},
"$:/language/Buttons/Excise/Caption/MacroName": {
"title": "$:/language/Buttons/Excise/Caption/MacroName",
"text": "宏的名称︰"
},
"$:/language/Buttons/Excise/Caption/NewTitle": {
"title": "$:/language/Buttons/Excise/Caption/NewTitle",
"text": "新条目的名称︰"
},
"$:/language/Buttons/Excise/Caption/Replace": {
"title": "$:/language/Buttons/Excise/Caption/Replace",
"text": "替换剪切的文本为:"
},
"$:/language/Buttons/Excise/Caption/Replace/Macro": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
"text": "宏"
},
"$:/language/Buttons/Excise/Caption/Replace/Link": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Link",
"text": "链接"
},
"$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
"text": "嵌入"
},
"$:/language/Buttons/Excise/Caption/Tag": {
"title": "$:/language/Buttons/Excise/Caption/Tag",
"text": "将新条目的标签设为此条目的名称"
},
"$:/language/Buttons/Excise/Caption/TiddlerExists": {
"title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
"text": "警示:条目已经存在"
},
"$:/language/Buttons/Excise/Hint": {
"title": "$:/language/Buttons/Excise/Hint",
"text": "剪切所选文本到一个新条目"
},
"$:/language/Buttons/Heading1/Caption": {
"title": "$:/language/Buttons/Heading1/Caption",
"text": "标题 1"
},
"$:/language/Buttons/Heading1/Hint": {
"title": "$:/language/Buttons/Heading1/Hint",
"text": "套用标题级别 1 的格式于包含所选文本的列"
},
"$:/language/Buttons/Heading2/Caption": {
"title": "$:/language/Buttons/Heading2/Caption",
"text": "标题 2"
},
"$:/language/Buttons/Heading2/Hint": {
"title": "$:/language/Buttons/Heading2/Hint",
"text": "套用标题级别 2 的格式于包含所选文本的列"
},
"$:/language/Buttons/Heading3/Caption": {
"title": "$:/language/Buttons/Heading3/Caption",
"text": "标题 3"
},
"$:/language/Buttons/Heading3/Hint": {
"title": "$:/language/Buttons/Heading3/Hint",
"text": "套用标题级别 3 的格式于包含所选文本的列"
},
"$:/language/Buttons/Heading4/Caption": {
"title": "$:/language/Buttons/Heading4/Caption",
"text": "标题 4"
},
"$:/language/Buttons/Heading4/Hint": {
"title": "$:/language/Buttons/Heading4/Hint",
"text": "套用标题级别 4 的格式于包含所选文本的列"
},
"$:/language/Buttons/Heading5/Caption": {
"title": "$:/language/Buttons/Heading5/Caption",
"text": "标题 5"
},
"$:/language/Buttons/Heading5/Hint": {
"title": "$:/language/Buttons/Heading5/Hint",
"text": "套用标题级别 5 的格式于包含所选文本的列"
},
"$:/language/Buttons/Heading6/Caption": {
"title": "$:/language/Buttons/Heading6/Caption",
"text": "标题 6"
},
"$:/language/Buttons/Heading6/Hint": {
"title": "$:/language/Buttons/Heading6/Hint",
"text": "套用标题级别 6 的格式于包含所选文本的列"
},
"$:/language/Buttons/Italic/Caption": {
"title": "$:/language/Buttons/Italic/Caption",
"text": "斜体"
},
"$:/language/Buttons/Italic/Hint": {
"title": "$:/language/Buttons/Italic/Hint",
"text": "套用斜体格式于所选文本"
},
"$:/language/Buttons/LineWidth/Caption": {
"title": "$:/language/Buttons/LineWidth/Caption",
"text": "线宽"
},
"$:/language/Buttons/LineWidth/Hint": {
"title": "$:/language/Buttons/LineWidth/Hint",
"text": "设置绘画的线条宽度"
},
"$:/language/Buttons/Link/Caption": {
"title": "$:/language/Buttons/Link/Caption",
"text": "链接"
},
"$:/language/Buttons/Link/Hint": {
"title": "$:/language/Buttons/Link/Hint",
"text": "创建维基文字链接"
},
"$:/language/Buttons/Linkify/Caption": {
"title": "$:/language/Buttons/Linkify/Caption",
"text": "维基链接"
},
"$:/language/Buttons/Linkify/Hint": {
"title": "$:/language/Buttons/Linkify/Hint",
"text": "套用维基链接于所选文字"
},
"$:/language/Buttons/ListBullet/Caption": {
"title": "$:/language/Buttons/ListBullet/Caption",
"text": "符号清单"
},
"$:/language/Buttons/ListBullet/Hint": {
"title": "$:/language/Buttons/ListBullet/Hint",
"text": "套用符号清单格式于包含所选文本的列"
},
"$:/language/Buttons/ListNumber/Caption": {
"title": "$:/language/Buttons/ListNumber/Caption",
"text": "数字清单"
},
"$:/language/Buttons/ListNumber/Hint": {
"title": "$:/language/Buttons/ListNumber/Hint",
"text": "套用数字清单格式于包含所选文本的列"
},
"$:/language/Buttons/MonoBlock/Caption": {
"title": "$:/language/Buttons/MonoBlock/Caption",
"text": "等宽区块"
},
"$:/language/Buttons/MonoBlock/Hint": {
"title": "$:/language/Buttons/MonoBlock/Hint",
"text": "套用等宽区块格式于包含所选文本的列"
},
"$:/language/Buttons/MonoLine/Caption": {
"title": "$:/language/Buttons/MonoLine/Caption",
"text": "等宽"
},
"$:/language/Buttons/MonoLine/Hint": {
"title": "$:/language/Buttons/MonoLine/Hint",
"text": "套用等宽字符格式于所选文本"
},
"$:/language/Buttons/Opacity/Caption": {
"title": "$:/language/Buttons/Opacity/Caption",
"text": "不透明度"
},
"$:/language/Buttons/Opacity/Hint": {
"title": "$:/language/Buttons/Opacity/Hint",
"text": "设置绘画的不透明度"
},
"$:/language/Buttons/Paint/Caption": {
"title": "$:/language/Buttons/Paint/Caption",
"text": "绘画颜色"
},
"$:/language/Buttons/Paint/Hint": {
"title": "$:/language/Buttons/Paint/Hint",
"text": "设置绘画的颜色"
},
"$:/language/Buttons/Picture/Caption": {
"title": "$:/language/Buttons/Picture/Caption",
"text": "图片"
},
"$:/language/Buttons/Picture/Hint": {
"title": "$:/language/Buttons/Picture/Hint",
"text": "插入图片"
},
"$:/language/Buttons/Preview/Caption": {
"title": "$:/language/Buttons/Preview/Caption",
"text": "预览"
},
"$:/language/Buttons/Preview/Hint": {
"title": "$:/language/Buttons/Preview/Hint",
"text": "显示预览窗格"
},
"$:/language/Buttons/PreviewType/Caption": {
"title": "$:/language/Buttons/PreviewType/Caption",
"text": "预览类型"
},
"$:/language/Buttons/PreviewType/Hint": {
"title": "$:/language/Buttons/PreviewType/Hint",
"text": "选择预览类型"
},
"$:/language/Buttons/Quote/Caption": {
"title": "$:/language/Buttons/Quote/Caption",
"text": "引言"
},
"$:/language/Buttons/Quote/Hint": {
"title": "$:/language/Buttons/Quote/Hint",
"text": "套用引言文本格式于包含所选文本的列"
},
"$:/language/Buttons/RotateLeft/Caption": {
"title": "$:/language/Buttons/RotateLeft/Caption",
"text": "向左旋转"
},
"$:/language/Buttons/RotateLeft/Hint": {
"title": "$:/language/Buttons/RotateLeft/Hint",
"text": "图像向左旋转 90 度"
},
"$:/language/Buttons/Size/Caption": {
"title": "$:/language/Buttons/Size/Caption",
"text": "图像大小"
},
"$:/language/Buttons/Size/Caption/Height": {
"title": "$:/language/Buttons/Size/Caption/Height",
"text": "高度︰"
},
"$:/language/Buttons/Size/Caption/Resize": {
"title": "$:/language/Buttons/Size/Caption/Resize",
"text": "调整图像的大小"
},
"$:/language/Buttons/Size/Caption/Width": {
"title": "$:/language/Buttons/Size/Caption/Width",
"text": "宽度:"
},
"$:/language/Buttons/Size/Hint": {
"title": "$:/language/Buttons/Size/Hint",
"text": "设置图像的大小"
},
"$:/language/Buttons/Stamp/Caption": {
"title": "$:/language/Buttons/Stamp/Caption",
"text": "印记"
},
"$:/language/Buttons/Stamp/Caption/New": {
"title": "$:/language/Buttons/Stamp/Caption/New",
"text": "添加您自己的"
},
"$:/language/Buttons/Stamp/Hint": {
"title": "$:/language/Buttons/Stamp/Hint",
"text": "插入一个预配置的文本片段"
},
"$:/language/Buttons/Stamp/New/Title": {
"title": "$:/language/Buttons/Stamp/New/Title",
"text": "在选单中显示的标题"
},
"$:/language/Buttons/Stamp/New/Text": {
"title": "$:/language/Buttons/Stamp/New/Text",
"text": "片段的文本。(记得在 `caption` 栏位中添加一个说明性的标题)。"
},
"$:/language/Buttons/Strikethrough/Caption": {
"title": "$:/language/Buttons/Strikethrough/Caption",
"text": "删除线"
},
"$:/language/Buttons/Strikethrough/Hint": {
"title": "$:/language/Buttons/Strikethrough/Hint",
"text": "套用删除线格式于所选文本"
},
"$:/language/Buttons/Subscript/Caption": {
"title": "$:/language/Buttons/Subscript/Caption",
"text": "下标"
},
"$:/language/Buttons/Subscript/Hint": {
"title": "$:/language/Buttons/Subscript/Hint",
"text": "套用下标格式于所选文本"
},
"$:/language/Buttons/Superscript/Caption": {
"title": "$:/language/Buttons/Superscript/Caption",
"text": "上标"
},
"$:/language/Buttons/Superscript/Hint": {
"title": "$:/language/Buttons/Superscript/Hint",
"text": "套用上标格式于所选文本"
},
"$:/language/Buttons/ToggleSidebar/Hint": {
"title": "$:/language/Buttons/ToggleSidebar/Hint",
"text": "切换显示或隐藏侧边栏"
},
"$:/language/Buttons/Transcludify/Caption": {
"title": "$:/language/Buttons/Transcludify/Caption",
"text": "嵌入"
},
"$:/language/Buttons/Transcludify/Hint": {
"title": "$:/language/Buttons/Transcludify/Hint",
"text": "套用嵌入于所选文字"
},
"$:/language/Buttons/Underline/Caption": {
"title": "$:/language/Buttons/Underline/Caption",
"text": "下划线"
},
"$:/language/Buttons/Underline/Hint": {
"title": "$:/language/Buttons/Underline/Hint",
"text": "套用下划线格式于所选文本"
},
"$:/config/Search/MinLength": {
"title": "$:/config/Search/MinLength",
"text": "1"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "高级"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "关于此 TiddlyWiki 的内部信息"
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "视觉外观"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "定制您的 TiddlyWiki 外观。"
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "动画持续时间"
},
"$:/language/ControlPanel/Basics/AutoFocus/Prompt": {
"title": "$:/language/ControlPanel/Basics/AutoFocus/Prompt",
"text": "编辑条目时的默认自动停留栏位"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "基本"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "标题含空白时请使用 [[双中括弧]],或者您可用 <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">保留开启中的条目顺序</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "首页"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "默认开启的条目"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "您好!当前的语言:"
},
"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
"text": "新日志条目的标签"
},
"$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
"text": "新日志条目的内容"
},
"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
"text": "新日志条目的名称"
},
"$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt",
"text": "新条目的标签"
},
"$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt",
"text": "新条目的名称"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "被覆盖的默认条目数量"
},
"$:/language/ControlPanel/Basics/RemoveTags": {
"title": "$:/language/ControlPanel/Basics/RemoveTags",
"text": "更新到当前格式"
},
"$:/language/ControlPanel/Basics/RemoveTags/Hint": {
"title": "$:/language/ControlPanel/Basics/RemoveTags/Hint",
"text": "将标签配置更新为最新格式"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "默认条目数量"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "副标题"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "系统条目数量"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "标签数量"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "一般条目数量"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "标题"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "编辑者署名"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "~TiddlyWiki 版本"
},
"$:/language/ControlPanel/EditorTypes/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Caption",
"text": "编辑器类型"
},
"$:/language/ControlPanel/EditorTypes/Editor/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
"text": "编辑器"
},
"$:/language/ControlPanel/EditorTypes/Hint": {
"title": "$:/language/ControlPanel/EditorTypes/Hint",
"text": "这些条目决定使用哪个编辑器来编辑特定条目类型。"
},
"$:/language/ControlPanel/EditorTypes/Type/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
"text": "类型"
},
"$:/language/ControlPanel/Info/Caption": {
"title": "$:/language/ControlPanel/Info/Caption",
"text": "信息"
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"text": "有关此 TiddlyWiki 的信息"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
"text": "在此输入快捷键"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
"text": "添加快捷键"
},
"$:/language/ControlPanel/KeyboardShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
"text": "快捷键"
},
"$:/language/ControlPanel/KeyboardShortcuts/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
"text": "管理键盘快捷键分配"
},
"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
"text": "尚无指定快捷键"
},
"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
"text": "删除快捷键"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
"text": "所有平台"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
"text": "仅 Macintosh 平台"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
"text": "仅非 Macintosh 平台"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
"text": "仅 Linux 平台"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
"text": "仅非 Linux 平台"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
"text": "仅 Windows 平台"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
"text": "仅非 Windows 平台"
},
"$:/language/ControlPanel/LayoutSwitcher/Caption": {
"title": "$:/language/ControlPanel/LayoutSwitcher/Caption",
"text": "布局"
},
"$:/language/ControlPanel/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/LoadedModules/Caption",
"text": "已加载的模块"
},
"$:/language/ControlPanel/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/LoadedModules/Hint",
"text": "这些是当前已加载的模块之源码条目。斜体的模块则无源码条目,通常是因为它们是在引导过程中设置。"
},
"$:/language/ControlPanel/Palette/Caption": {
"title": "$:/language/ControlPanel/Palette/Caption",
"text": "调色板"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
"text": "复制"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
"text": "建议您修改前先复制此默认调色板"
},
"$:/language/ControlPanel/Palette/Editor/Delete/Hint": {
"title": "$:/language/ControlPanel/Palette/Editor/Delete/Hint",
"text": "从当前调色板中删除此项"
},
"$:/language/ControlPanel/Palette/Editor/Names/External/Show": {
"title": "$:/language/ControlPanel/Palette/Editor/Names/External/Show",
"text": "显示不属于当前调色板的颜色名称"
},
"$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
"text": "此默认调色板已被修改过"
},
"$:/language/ControlPanel/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt",
"text": "编辑"
},
"$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
"text": "重置"
},
"$:/language/ControlPanel/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
"text": "隐藏编辑器"
},
"$:/language/ControlPanel/Palette/Prompt": {
"title": "$:/language/ControlPanel/Palette/Prompt",
"text": "当前的调色板:"
},
"$:/language/ControlPanel/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
"text": "显示编辑器"
},
"$:/language/ControlPanel/Plugins/Add/Hint": {
"title": "$:/language/ControlPanel/Plugins/Add/Hint",
"text": "从官方插件库安装插件"
},
"$:/language/ControlPanel/Plugins/Add/Caption": {
"title": "$:/language/ControlPanel/Plugins/Add/Caption",
"text": "获取更多插件"
},
"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
"text": "此插件已经安装版本 <$text text=<<installedVersion>>/>"
},
"$:/language/ControlPanel/Plugins/AlsoRequires": {
"title": "$:/language/ControlPanel/Plugins/AlsoRequires",
"text": "还需要:"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "插件"
},
"$:/language/ControlPanel/Plugins/Disable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Disable/Caption",
"text": "禁用"
},
"$:/language/ControlPanel/Plugins/Disable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Disable/Hint",
"text": "重新加载页面时禁用此插件"
},
"$:/language/ControlPanel/Plugins/Disabled/Status": {
"title": "$:/language/ControlPanel/Plugins/Disabled/Status",
"text": "(已禁用)"
},
"$:/language/ControlPanel/Plugins/Downgrade/Caption": {
"title": "$:/language/ControlPanel/Plugins/Downgrade/Caption",
"text": "降级"
},
"$:/language/ControlPanel/Plugins/Empty/Hint": {
"title": "$:/language/ControlPanel/Plugins/Empty/Hint",
"text": "无"
},
"$:/language/ControlPanel/Plugins/Enable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Enable/Caption",
"text": "启用"
},
"$:/language/ControlPanel/Plugins/Enable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Enable/Hint",
"text": "重新加载页面时启用此插件"
},
"$:/language/ControlPanel/Plugins/Install/Caption": {
"title": "$:/language/ControlPanel/Plugins/Install/Caption",
"text": "安装"
},
"$:/language/ControlPanel/Plugins/Installed/Hint": {
"title": "$:/language/ControlPanel/Plugins/Installed/Hint",
"text": "当前已安装的插件:"
},
"$:/language/ControlPanel/Plugins/Languages/Caption": {
"title": "$:/language/ControlPanel/Plugins/Languages/Caption",
"text": "语言"
},
"$:/language/ControlPanel/Plugins/Languages/Hint": {
"title": "$:/language/ControlPanel/Plugins/Languages/Hint",
"text": "语言包插件"
},
"$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
"text": "无 ''\"<$text text=<<currentTab>>/>\"''"
},
"$:/language/ControlPanel/Plugins/NoInformation/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInformation/Hint",
"text": "未提供信息"
},
"$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
"text": "尚未安装此插件"
},
"$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
"text": "开启插件程式库"
},
"$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
"text": "关闭插件程式库"
},
"$:/language/ControlPanel/Plugins/PluginWillRequireReload": {
"title": "$:/language/ControlPanel/Plugins/PluginWillRequireReload",
"text": "(需要重新加载)"
},
"$:/language/ControlPanel/Plugins/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
"text": "插件"
},
"$:/language/ControlPanel/Plugins/Plugins/Hint": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
"text": "插件"
},
"$:/language/ControlPanel/Plugins/Reinstall/Caption": {
"title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
"text": "重新安装"
},
"$:/language/ControlPanel/Plugins/Themes/Caption": {
"title": "$:/language/ControlPanel/Plugins/Themes/Caption",
"text": "布景主题"
},
"$:/language/ControlPanel/Plugins/Themes/Hint": {
"title": "$:/language/ControlPanel/Plugins/Themes/Hint",
"text": "布景主题插件"
},
"$:/language/ControlPanel/Plugins/Update/Caption": {
"title": "$:/language/ControlPanel/Plugins/Update/Caption",
"text": "更新"
},
"$:/language/ControlPanel/Plugins/Updates/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/Caption",
"text": "更新"
},
"$:/language/ControlPanel/Plugins/Updates/Hint": {
"title": "$:/language/ControlPanel/Plugins/Updates/Hint",
"text": "已安装插件的可用更新"
},
"$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption",
"text": "更新 <<update-count>> 个插件"
},
"$:/language/ControlPanel/Plugins/SubPluginPrompt": {
"title": "$:/language/ControlPanel/Plugins/SubPluginPrompt",
"text": "提供 <<count>> 个可用的附加插件"
},
"$:/language/ControlPanel/Parsing/Caption": {
"title": "$:/language/ControlPanel/Parsing/Caption",
"text": "解析"
},
"$:/language/ControlPanel/Parsing/Hint": {
"title": "$:/language/ControlPanel/Parsing/Hint",
"text": "在此您可以全域禁用或启用维基解析规则。要使更改生效,请保存并重新加载您的维基。禁用某些解析规则,会妨碍 <$text text=\"TiddlyWiki\"/> 正常运作。可使用[[安全模式|https://tiddlywiki.com/#SafeMode]]恢复正常操作。"
},
"$:/language/ControlPanel/Parsing/Block/Caption": {
"title": "$:/language/ControlPanel/Parsing/Block/Caption",
"text": "区块解析规则"
},
"$:/language/ControlPanel/Parsing/Inline/Caption": {
"title": "$:/language/ControlPanel/Parsing/Inline/Caption",
"text": "内联解析规则"
},
"$:/language/ControlPanel/Parsing/Pragma/Caption": {
"title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
"text": "编译指示解析规则"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "保存"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
"text": "允许下载保存模块的自动保存"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
"text": "启用下载保存模块的自动保存"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
"text": "下载保存模块"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
"text": "这些设置适用于兼容 HTML5 的下载保存模块"
},
"$:/language/ControlPanel/Saving/General/Caption": {
"title": "$:/language/ControlPanel/Saving/General/Caption",
"text": "通用"
},
"$:/language/ControlPanel/Saving/General/Hint": {
"title": "$:/language/ControlPanel/Saving/General/Hint",
"text": "这些设置适用于所有已载入的保存模块"
},
"$:/language/ControlPanel/Saving/Hint": {
"title": "$:/language/ControlPanel/Saving/Hint",
"text": "用于通过保存模块将整个 TiddlyWiki 保存为单个文件的设置"
},
"$:/language/ControlPanel/Saving/GitService/Branch": {
"title": "$:/language/ControlPanel/Saving/GitService/Branch",
"text": "用于保存的目标分支"
},
"$:/language/ControlPanel/Saving/GitService/CommitMessage": {
"title": "$:/language/ControlPanel/Saving/GitService/CommitMessage",
"text": "由 TiddlyWiki 保存"
},
"$:/language/ControlPanel/Saving/GitService/Description": {
"title": "$:/language/ControlPanel/Saving/GitService/Description",
"text": "这些设置仅用于保存至 <<service-name>>"
},
"$:/language/ControlPanel/Saving/GitService/Filename": {
"title": "$:/language/ControlPanel/Saving/GitService/Filename",
"text": "目标文件的文件名称 (例如,`index.html`)"
},
"$:/language/ControlPanel/Saving/GitService/Path": {
"title": "$:/language/ControlPanel/Saving/GitService/Path",
"text": "目标文件的路径 (例如,`/wiki/`)"
},
"$:/language/ControlPanel/Saving/GitService/Repo": {
"title": "$:/language/ControlPanel/Saving/GitService/Repo",
"text": "目标存储库 (例如,`Jermolene/TiddlyWiki5`)"
},
"$:/language/ControlPanel/Saving/GitService/ServerURL": {
"title": "$:/language/ControlPanel/Saving/GitService/ServerURL",
"text": "服务器 API 网址"
},
"$:/language/ControlPanel/Saving/GitService/UserName": {
"title": "$:/language/ControlPanel/Saving/GitService/UserName",
"text": "用户名称"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Caption",
"text": "~GitHub 保存模块"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Password",
"text": "密码、OAUTH 令牌,或个人存取令牌 (详见 [[GitHub 帮助页面|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]])"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Caption",
"text": "~GitLab 保存模块"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Password",
"text": "个人存取令牌的 API (详见 [[GitLab 帮助页面|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]])"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Caption",
"text": "Gitea 保存模块"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Password",
"text": "个人存取令牌的 API (通过 Gitea 的 Web 界面:`设定 | 应用程序 | 产生新的令牌`)"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "高级设置"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "备份文件夹"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "备份"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
"text": "~TiddlySpot 保存模块"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel",
"text": "~TiddlySpot 控制台"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Description": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
"text": "这些设置只适用于保存到 [[TiddlySpot|http://tiddlyspot.com]]、[[TiddlyHost|https://tiddlyhost.com]],或兼容的远程服务器。有关 ~TiddlySpot 和 ~TiddlyHost 的保存设置信息,请参阅[[此处|https://github.com/simonbaird/tiddlyhost/wiki/TiddlySpot-Saver-configuration-for-Tiddlyhost-and-Tiddlyspot]]。"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "上传文件名"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
"text": "~TiddlySpot"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//默认之服务器网址 `http://<wikiname>.tiddlyspot.com/store.cgi`,可改为定制之服务器网址,例如 `http://example.com/store.php`。//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "密码"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly",
"text": "请注意,[[TiddlySpot|http://tiddlyspot.com]] 不再允许创建新网站。对于新网站,您可以使用 [[TiddlyHost|https://tiddlyhost.com]],一个新的取代 ~TiddlySpot 的讬管服务 。"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "服务器网址"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "上传文件夹"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "用户"
},
"$:/language/ControlPanel/Settings/AutoSave/Caption": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
"text": "自动保存"
},
"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
"text": "不要自动保存变更"
},
"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
"text": "自动保存变更"
},
"$:/language/ControlPanel/Settings/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
"text": "当使用支持的保存模块时,在编辑期间尝试自动保存变更"
},
"$:/language/ControlPanel/Settings/CamelCase/Caption": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
"text": "驼峰式维基链接"
},
"$:/language/ControlPanel/Settings/CamelCase/Hint": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
"text": "您可以全域禁用驼峰式短语自动链接。须保存后重新加载,方才生效。"
},
"$:/language/ControlPanel/Settings/CamelCase/Description": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Description",
"text": "启用自动驼峰式链接"
},
"$:/language/ControlPanel/Settings/Caption": {
"title": "$:/language/ControlPanel/Settings/Caption",
"text": "设置"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
"text": "默认侧边栏页签"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
"text": "指定默认显示的侧边栏页签"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption",
"text": "更多侧边栏的默认页签"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint",
"text": "指定默认显示的更多侧栏页签"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
"text": "编辑器工具栏"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
"text": "启用或禁用编辑器工具栏︰"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Description": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
"text": "显示编辑器工具栏"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
"text": "条目信息面板模式"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
"text": "控制条目信息面板何时关闭︰"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
"text": "条目信息面板自动关闭"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
"text": "条目信息面板保持打开状态,直到明确关闭"
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"text": "这些高级设置让您定制 TiddlyWiki 的行为。"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
"text": "条目开启行为"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
"text": "从故事河//中//导航"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
"text": "从故事河//外//导航"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
"text": "开启于当前条目之上"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
"text": "开启于当前条目之下"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
"text": "开启于故事河的顶端"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
"text": "开启于故事河的底部"
},
"$:/language/ControlPanel/Settings/MissingLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
"text": "维基链接"
},
"$:/language/ControlPanel/Settings/MissingLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
"text": "选择是否要链接到尚未存在的条目"
},
"$:/language/ControlPanel/Settings/MissingLinks/Description": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
"text": "启用链接到佚失条目"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
"text": "网址栏导览"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
"text": "在浏览器网址栏导览到条目时的行为:"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
"text": "不更新网址栏"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
"text": "包含目标条目"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
"text": "包括目标条目和当前已开启的条目序列"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
"text": "历史记录导览"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
"text": "当导览到条目时,更新浏览器历史记录:"
},
"$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
"text": "不更新历史记录"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
"text": "更新历史记录"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption",
"text": "引用链接/固定链接 模式"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint",
"text": "选择 引用链接/固定链接 的处理方式:"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description",
"text": "将 引用链接/固定链接 网址复制到剪贴板"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description",
"text": "以 引用链接/固定链接 更新网址栏"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
"text": "性能检测"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
"text": "在浏览器的开发人员控制台,显示性能统计数据。需要重新加载才能生效。"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
"text": "启用性能检测"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
"text": "工具栏按钮样式"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
"text": "选择工具栏按钮的样式:"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
"text": "无边框"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
"text": "方框"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
"text": "圆形"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
"text": "工具栏按钮"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
"text": "默认的工具栏按钮外观:"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
"text": "包含图标"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
"text": "包含文本"
},
"$:/language/ControlPanel/Settings/TitleLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
"text": "条目标题"
},
"$:/language/ControlPanel/Settings/TitleLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
"text": "可选地显示条目标题为链接"
},
"$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
"text": "不显示条目标题为链接"
},
"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
"text": "显示条目标题为链接"
},
"$:/language/ControlPanel/StoryView/Caption": {
"title": "$:/language/ControlPanel/StoryView/Caption",
"text": "查看模式"
},
"$:/language/ControlPanel/StoryView/Prompt": {
"title": "$:/language/ControlPanel/StoryView/Prompt",
"text": "当前的查看模式:"
},
"$:/language/ControlPanel/Stylesheets/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Caption",
"text": "样式表"
},
"$:/language/ControlPanel/Stylesheets/Expand/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Expand/Caption",
"text": "全部展开"
},
"$:/language/ControlPanel/Stylesheets/Hint": {
"title": "$:/language/ControlPanel/Stylesheets/Hint",
"text": "这是当前标签为 <<tag \"$:/tags/Stylesheet\">> 的样式表条目呈现的 CSS"
},
"$:/language/ControlPanel/Stylesheets/Restore/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Restore/Caption",
"text": "复原"
},
"$:/language/ControlPanel/Theme/Caption": {
"title": "$:/language/ControlPanel/Theme/Caption",
"text": "布景主题"
},
"$:/language/ControlPanel/Theme/Prompt": {
"title": "$:/language/ControlPanel/Theme/Prompt",
"text": "当前的布景主题:"
},
"$:/language/ControlPanel/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/TiddlerFields/Caption",
"text": "条目栏位"
},
"$:/language/ControlPanel/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/TiddlerFields/Hint",
"text": "这是本维基使用中的所有条目栏位(含系统条目的栏位,但默认条目的栏位除外)。"
},
"$:/language/ControlPanel/Toolbars/Caption": {
"title": "$:/language/ControlPanel/Toolbars/Caption",
"text": "工具栏"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
"text": "编辑工具栏"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
"text": "选择将显示哪些按钮于条目的编辑模式工具栏。拖放可改变顺序。"
},
"$:/language/ControlPanel/Toolbars/Hint": {
"title": "$:/language/ControlPanel/Toolbars/Hint",
"text": "选择将显示哪些工具栏按钮"
},
"$:/language/ControlPanel/Toolbars/PageControls/Caption": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
"text": "页面工具栏"
},
"$:/language/ControlPanel/Toolbars/PageControls/Hint": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
"text": "选择将显示哪些按钮于主页面的工具栏。拖放可改变顺序。"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
"text": "编辑器工具栏"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
"text": "选择将显示哪些按钮于编辑器工具栏。请注意,某些按钮只会出现在编辑某一类型的条目时。拖放可改变顺序。"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
"text": "查看工具栏"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
"text": "选择将显示哪些按钮于条目的查看模式工具栏。拖放可改变顺序。"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "下载完整副本"
},
"$:/core/zh-Hans/readme": {
"title": "$:/core/zh-Hans/readme",
"text": "此插件包含 TiddlyWiki 的核心组件,包括:\n\n* JavaScript 代码模块\n* 图标\n* 创建 TiddlyWiki 的用户介面所需的模板\n* 核心所使用的可当地语系化字串的英国英语 (''en-GB'') 翻译\n"
},
"$:/language/Date/Long/Day/0": {
"title": "$:/language/Date/Long/Day/0",
"text": "周日"
},
"$:/language/Date/Long/Day/1": {
"title": "$:/language/Date/Long/Day/1",
"text": "周一"
},
"$:/language/Date/Long/Day/2": {
"title": "$:/language/Date/Long/Day/2",
"text": "周二"
},
"$:/language/Date/Long/Day/3": {
"title": "$:/language/Date/Long/Day/3",
"text": "周三"
},
"$:/language/Date/Long/Day/4": {
"title": "$:/language/Date/Long/Day/4",
"text": "周四"
},
"$:/language/Date/Long/Day/5": {
"title": "$:/language/Date/Long/Day/5",
"text": "周五"
},
"$:/language/Date/Long/Day/6": {
"title": "$:/language/Date/Long/Day/6",
"text": "周六"
},
"$:/language/Date/Long/Month/1": {
"title": "$:/language/Date/Long/Month/1",
"text": "一月"
},
"$:/language/Date/Long/Month/2": {
"title": "$:/language/Date/Long/Month/2",
"text": "二月"
},
"$:/language/Date/Long/Month/3": {
"title": "$:/language/Date/Long/Month/3",
"text": "三月"
},
"$:/language/Date/Long/Month/4": {
"title": "$:/language/Date/Long/Month/4",
"text": "四月"
},
"$:/language/Date/Long/Month/5": {
"title": "$:/language/Date/Long/Month/5",
"text": "五月"
},
"$:/language/Date/Long/Month/6": {
"title": "$:/language/Date/Long/Month/6",
"text": "六月"
},
"$:/language/Date/Long/Month/7": {
"title": "$:/language/Date/Long/Month/7",
"text": "七月"
},
"$:/language/Date/Long/Month/8": {
"title": "$:/language/Date/Long/Month/8",
"text": "八月"
},
"$:/language/Date/Long/Month/9": {
"title": "$:/language/Date/Long/Month/9",
"text": "九月"
},
"$:/language/Date/Long/Month/10": {
"title": "$:/language/Date/Long/Month/10",
"text": "十月"
},
"$:/language/Date/Long/Month/11": {
"title": "$:/language/Date/Long/Month/11",
"text": "十一月"
},
"$:/language/Date/Long/Month/12": {
"title": "$:/language/Date/Long/Month/12",
"text": "十二月"
},
"$:/language/Date/Period/am": {
"title": "$:/language/Date/Period/am",
"text": "上午"
},
"$:/language/Date/Period/pm": {
"title": "$:/language/Date/Period/pm",
"text": "下午"
},
"$:/language/Date/Short/Day/0": {
"title": "$:/language/Date/Short/Day/0",
"text": "日"
},
"$:/language/Date/Short/Day/1": {
"title": "$:/language/Date/Short/Day/1",
"text": "一"
},
"$:/language/Date/Short/Day/2": {
"title": "$:/language/Date/Short/Day/2",
"text": "二"
},
"$:/language/Date/Short/Day/3": {
"title": "$:/language/Date/Short/Day/3",
"text": "三"
},
"$:/language/Date/Short/Day/4": {
"title": "$:/language/Date/Short/Day/4",
"text": "四"
},
"$:/language/Date/Short/Day/5": {
"title": "$:/language/Date/Short/Day/5",
"text": "五"
},
"$:/language/Date/Short/Day/6": {
"title": "$:/language/Date/Short/Day/6",
"text": "六"
},
"$:/language/Date/Short/Month/1": {
"title": "$:/language/Date/Short/Month/1",
"text": "01月"
},
"$:/language/Date/Short/Month/2": {
"title": "$:/language/Date/Short/Month/2",
"text": "02月"
},
"$:/language/Date/Short/Month/3": {
"title": "$:/language/Date/Short/Month/3",
"text": "03月"
},
"$:/language/Date/Short/Month/4": {
"title": "$:/language/Date/Short/Month/4",
"text": "04月"
},
"$:/language/Date/Short/Month/5": {
"title": "$:/language/Date/Short/Month/5",
"text": "05月"
},
"$:/language/Date/Short/Month/6": {
"title": "$:/language/Date/Short/Month/6",
"text": "06月"
},
"$:/language/Date/Short/Month/7": {
"title": "$:/language/Date/Short/Month/7",
"text": "07月"
},
"$:/language/Date/Short/Month/8": {
"title": "$:/language/Date/Short/Month/8",
"text": "08月"
},
"$:/language/Date/Short/Month/9": {
"title": "$:/language/Date/Short/Month/9",
"text": "09月"
},
"$:/language/Date/Short/Month/10": {
"title": "$:/language/Date/Short/Month/10",
"text": "10月"
},
"$:/language/Date/Short/Month/11": {
"title": "$:/language/Date/Short/Month/11",
"text": "11月"
},
"$:/language/Date/Short/Month/12": {
"title": "$:/language/Date/Short/Month/12",
"text": "12月"
},
"$:/language/RelativeDate/Future/Days": {
"title": "$:/language/RelativeDate/Future/Days",
"text": "<<period>> 天后"
},
"$:/language/RelativeDate/Future/Hours": {
"title": "$:/language/RelativeDate/Future/Hours",
"text": "<<period>> 小时后"
},
"$:/language/RelativeDate/Future/Minutes": {
"title": "$:/language/RelativeDate/Future/Minutes",
"text": "<<period>> 分钟后"
},
"$:/language/RelativeDate/Future/Months": {
"title": "$:/language/RelativeDate/Future/Months",
"text": "<<period>> 个月后"
},
"$:/language/RelativeDate/Future/Second": {
"title": "$:/language/RelativeDate/Future/Second",
"text": "1 秒后"
},
"$:/language/RelativeDate/Future/Seconds": {
"title": "$:/language/RelativeDate/Future/Seconds",
"text": "<<period>> 秒后"
},
"$:/language/RelativeDate/Future/Years": {
"title": "$:/language/RelativeDate/Future/Years",
"text": "<<period>> 年后"
},
"$:/language/RelativeDate/Past/Days": {
"title": "$:/language/RelativeDate/Past/Days",
"text": "<<period>> 天前"
},
"$:/language/RelativeDate/Past/Hours": {
"title": "$:/language/RelativeDate/Past/Hours",
"text": "<<period>> 小时前"
},
"$:/language/RelativeDate/Past/Minutes": {
"title": "$:/language/RelativeDate/Past/Minutes",
"text": "<<period>> 分钟前"
},
"$:/language/RelativeDate/Past/Months": {
"title": "$:/language/RelativeDate/Past/Months",
"text": "<<period>> 个月前"
},
"$:/language/RelativeDate/Past/Second": {
"title": "$:/language/RelativeDate/Past/Second",
"text": "1 秒前"
},
"$:/language/RelativeDate/Past/Seconds": {
"title": "$:/language/RelativeDate/Past/Seconds",
"text": "<<period>> 秒前"
},
"$:/language/RelativeDate/Past/Years": {
"title": "$:/language/RelativeDate/Past/Years",
"text": "<<period>> 年前"
},
"$:/language/Docs/ModuleTypes/allfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/allfilteroperator",
"text": "''all'' 筛选器算子的子算子。"
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "动画模块包含可用于 RevealWidget 的动画。"
},
"$:/language/Docs/ModuleTypes/authenticator": {
"title": "$:/language/Docs/ModuleTypes/authenticator",
"text": "定义内置 HTTP 服务器对请求的身份验证方式。"
},
"$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
"title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
"text": "一个位图编辑器工具栏操作。"
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "可于 Node.js 执行的指令。"
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "加入 `$tw.config` 的数据。"
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "个别筛选器算子方法。"
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "加入 `$tw` 的全域数据。"
},
"$:/language/Docs/ModuleTypes/info": {
"title": "$:/language/Docs/ModuleTypes/info",
"text": "透过 [[$:/temp/info-plugin]] 伪插件,发布系统信息。"
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "''is'' 筛选器算子的运算符。"
},
"$:/language/Docs/ModuleTypes/library": {
"title": "$:/language/Docs/ModuleTypes/library",
"text": "一般用途的 JavaScript 模块的通用模块类型。"
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "JavaScript ''宏''定义。"
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "不同内容类型的解析器。"
},
"$:/language/Docs/ModuleTypes/route": {
"title": "$:/language/Docs/ModuleTypes/route",
"text": "定义内置 HTTP 服务器如何处理各个网址格式。"
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "于浏览器保存文件的不同的保存处理方法。"
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "启动时期的功能函数。"
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "查看模式用以自订 list 小部件的动画与行为。"
},
"$:/language/Docs/ModuleTypes/texteditoroperation": {
"title": "$:/language/Docs/ModuleTypes/texteditoroperation",
"text": "一个文本编辑器工具栏操作。"
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "转换不同内容类型至条目。"
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "定义个别条目栏位的行为。"
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "添加方法至 `$tw.Tiddler` 原型。"
},
"$:/language/Docs/ModuleTypes/upgrader": {
"title": "$:/language/Docs/ModuleTypes/upgrader",
"text": "于升级/导入过程中,套用升级处理至条目。"
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "添加方法至 `$tw.utils`。"
},
"$:/language/Docs/ModuleTypes/utils-browser": {
"title": "$:/language/Docs/ModuleTypes/utils-browser",
"text": "将特定于浏览器的方法添加到 `$tw.utils`。"
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "将特定于 Node.js 的方法添加到 `$tw.utils`。"
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "封装 DOM 渲染和刷新的小部件。"
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "添加方法至 `$tw.Wiki`。"
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "WikiText 解析器的个别的语法规则。"
},
"$:/language/Docs/PaletteColours/alert-background": {
"title": "$:/language/Docs/PaletteColours/alert-background",
"text": "警示背景"
},
"$:/language/Docs/PaletteColours/alert-border": {
"title": "$:/language/Docs/PaletteColours/alert-border",
"text": "警示边框"
},
"$:/language/Docs/PaletteColours/alert-highlight": {
"title": "$:/language/Docs/PaletteColours/alert-highlight",
"text": "警示高亮度"
},
"$:/language/Docs/PaletteColours/alert-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
"text": "警示的低调前景"
},
"$:/language/Docs/PaletteColours/background": {
"title": "$:/language/Docs/PaletteColours/background",
"text": "一般背景"
},
"$:/language/Docs/PaletteColours/blockquote-bar": {
"title": "$:/language/Docs/PaletteColours/blockquote-bar",
"text": "引言条"
},
"$:/language/Docs/PaletteColours/button-background": {
"title": "$:/language/Docs/PaletteColours/button-background",
"text": "默认按钮背景"
},
"$:/language/Docs/PaletteColours/button-border": {
"title": "$:/language/Docs/PaletteColours/button-border",
"text": "默认按钮边框"
},
"$:/language/Docs/PaletteColours/button-foreground": {
"title": "$:/language/Docs/PaletteColours/button-foreground",
"text": "默认按钮前景"
},
"$:/language/Docs/PaletteColours/code-background": {
"title": "$:/language/Docs/PaletteColours/code-background",
"text": "代码背景"
},
"$:/language/Docs/PaletteColours/code-border": {
"title": "$:/language/Docs/PaletteColours/code-border",
"text": "代码边框"
},
"$:/language/Docs/PaletteColours/code-foreground": {
"title": "$:/language/Docs/PaletteColours/code-foreground",
"text": "代码前景"
},
"$:/language/Docs/PaletteColours/dirty-indicator": {
"title": "$:/language/Docs/PaletteColours/dirty-indicator",
"text": "未保存变更指示器"
},
"$:/language/Docs/PaletteColours/download-background": {
"title": "$:/language/Docs/PaletteColours/download-background",
"text": "下载按钮背景"
},
"$:/language/Docs/PaletteColours/download-foreground": {
"title": "$:/language/Docs/PaletteColours/download-foreground",
"text": "下载按钮前景"
},
"$:/language/Docs/PaletteColours/dragger-background": {
"title": "$:/language/Docs/PaletteColours/dragger-background",
"text": "拖动区背景"
},
"$:/language/Docs/PaletteColours/dragger-foreground": {
"title": "$:/language/Docs/PaletteColours/dragger-foreground",
"text": "拖动区前景"
},
"$:/language/Docs/PaletteColours/dropdown-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-background",
"text": "下拉背景"
},
"$:/language/Docs/PaletteColours/dropdown-border": {
"title": "$:/language/Docs/PaletteColours/dropdown-border",
"text": "下拉边框"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
"text": "选定的下拉页签背景"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
"text": "下拉页签背景"
},
"$:/language/Docs/PaletteColours/dropzone-background": {
"title": "$:/language/Docs/PaletteColours/dropzone-background",
"text": "拖放背景"
},
"$:/language/Docs/PaletteColours/external-link-background-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-background-hover",
"text": "悬停外部链结背景"
},
"$:/language/Docs/PaletteColours/external-link-background-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-background-visited",
"text": "已造访过的外部链结背景"
},
"$:/language/Docs/PaletteColours/external-link-background": {
"title": "$:/language/Docs/PaletteColours/external-link-background",
"text": "外部链结背景"
},
"$:/language/Docs/PaletteColours/external-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
"text": "悬停外部链结前景"
},
"$:/language/Docs/PaletteColours/external-link-foreground-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
"text": "已造访过的外部链结前景"
},
"$:/language/Docs/PaletteColours/external-link-foreground": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground",
"text": "外部链结前景"
},
"$:/language/Docs/PaletteColours/foreground": {
"title": "$:/language/Docs/PaletteColours/foreground",
"text": "一般前景"
},
"$:/language/Docs/PaletteColours/menubar-background": {
"title": "$:/language/Docs/PaletteColours/menubar-background",
"text": "菜单列背景"
},
"$:/language/Docs/PaletteColours/menubar-foreground": {
"title": "$:/language/Docs/PaletteColours/menubar-foreground",
"text": "菜单列前景"
},
"$:/language/Docs/PaletteColours/message-background": {
"title": "$:/language/Docs/PaletteColours/message-background",
"text": "信息框背景"
},
"$:/language/Docs/PaletteColours/message-border": {
"title": "$:/language/Docs/PaletteColours/message-border",
"text": "信息边框"
},
"$:/language/Docs/PaletteColours/message-foreground": {
"title": "$:/language/Docs/PaletteColours/message-foreground",
"text": "信息框前景"
},
"$:/language/Docs/PaletteColours/modal-backdrop": {
"title": "$:/language/Docs/PaletteColours/modal-backdrop",
"text": "模块背景幕"
},
"$:/language/Docs/PaletteColours/modal-background": {
"title": "$:/language/Docs/PaletteColours/modal-background",
"text": "模块背景"
},
"$:/language/Docs/PaletteColours/modal-border": {
"title": "$:/language/Docs/PaletteColours/modal-border",
"text": "模块边框"
},
"$:/language/Docs/PaletteColours/modal-footer-background": {
"title": "$:/language/Docs/PaletteColours/modal-footer-background",
"text": "模块页脚背景"
},
"$:/language/Docs/PaletteColours/modal-footer-border": {
"title": "$:/language/Docs/PaletteColours/modal-footer-border",
"text": "模块页脚边框"
},
"$:/language/Docs/PaletteColours/modal-header-border": {
"title": "$:/language/Docs/PaletteColours/modal-header-border",
"text": "模块标题边框"
},
"$:/language/Docs/PaletteColours/muted-foreground": {
"title": "$:/language/Docs/PaletteColours/muted-foreground",
"text": "一般低调前景"
},
"$:/language/Docs/PaletteColours/notification-background": {
"title": "$:/language/Docs/PaletteColours/notification-background",
"text": "通知背景"
},
"$:/language/Docs/PaletteColours/notification-border": {
"title": "$:/language/Docs/PaletteColours/notification-border",
"text": "通知边框"
},
"$:/language/Docs/PaletteColours/page-background": {
"title": "$:/language/Docs/PaletteColours/page-background",
"text": "页面背景"
},
"$:/language/Docs/PaletteColours/pre-background": {
"title": "$:/language/Docs/PaletteColours/pre-background",
"text": "pre 背景"
},
"$:/language/Docs/PaletteColours/pre-border": {
"title": "$:/language/Docs/PaletteColours/pre-border",
"text": "pre 边框"
},
"$:/language/Docs/PaletteColours/primary": {
"title": "$:/language/Docs/PaletteColours/primary",
"text": "主颜色"
},
"$:/language/Docs/PaletteColours/select-tag-background": {
"title": "$:/language/Docs/PaletteColours/select-tag-background",
"text": "`<select>` 元素背景"
},
"$:/language/Docs/PaletteColours/select-tag-foreground": {
"title": "$:/language/Docs/PaletteColours/select-tag-foreground",
"text": "`<select>` 元素文本"
},
"$:/language/Docs/PaletteColours/sidebar-button-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
"text": "侧边栏按钮前景"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
"text": "悬停侧边栏控制项前景"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
"text": "侧边栏控制项前景"
},
"$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
"text": "侧边栏前景阴影"
},
"$:/language/Docs/PaletteColours/sidebar-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground",
"text": "侧边栏前景"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
"text": "悬停侧边栏低调前景"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
"text": "侧边栏低调前景"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
"text": "侧边栏选定页签背景"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
"text": "侧边栏页签背景"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
"text": "侧边栏选定页签边框"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
"text": "侧边栏页签边框"
},
"$:/language/Docs/PaletteColours/sidebar-tab-divider": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
"text": "侧边栏页签分隔线"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
"text": "侧边栏选定页签前景"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
"text": "侧边栏页签前景"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
"text": "侧边栏悬停条目链结前景"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
"text": "侧边栏条目链结前景"
},
"$:/language/Docs/PaletteColours/site-title-foreground": {
"title": "$:/language/Docs/PaletteColours/site-title-foreground",
"text": "网站标题前景"
},
"$:/language/Docs/PaletteColours/static-alert-foreground": {
"title": "$:/language/Docs/PaletteColours/static-alert-foreground",
"text": "静态警示前景"
},
"$:/language/Docs/PaletteColours/tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/tab-background-selected",
"text": "选定的页签背景"
},
"$:/language/Docs/PaletteColours/tab-background": {
"title": "$:/language/Docs/PaletteColours/tab-background",
"text": "页签背景"
},
"$:/language/Docs/PaletteColours/tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/tab-border-selected",
"text": "选定的页签边框"
},
"$:/language/Docs/PaletteColours/tab-border": {
"title": "$:/language/Docs/PaletteColours/tab-border",
"text": "页签边框"
},
"$:/language/Docs/PaletteColours/tab-divider": {
"title": "$:/language/Docs/PaletteColours/tab-divider",
"text": "页签分隔线"
},
"$:/language/Docs/PaletteColours/tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
"text": "选定的页签前景"
},
"$:/language/Docs/PaletteColours/tab-foreground": {
"title": "$:/language/Docs/PaletteColours/tab-foreground",
"text": "页签前景"
},
"$:/language/Docs/PaletteColours/table-border": {
"title": "$:/language/Docs/PaletteColours/table-border",
"text": "表格边框"
},
"$:/language/Docs/PaletteColours/table-footer-background": {
"title": "$:/language/Docs/PaletteColours/table-footer-background",
"text": "表格页脚背景"
},
"$:/language/Docs/PaletteColours/table-header-background": {
"title": "$:/language/Docs/PaletteColours/table-header-background",
"text": "表格标题背景"
},
"$:/language/Docs/PaletteColours/tag-background": {
"title": "$:/language/Docs/PaletteColours/tag-background",
"text": "标签背景"
},
"$:/language/Docs/PaletteColours/tag-foreground": {
"title": "$:/language/Docs/PaletteColours/tag-foreground",
"text": "标签前景"
},
"$:/language/Docs/PaletteColours/tiddler-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-background",
"text": "条目背景"
},
"$:/language/Docs/PaletteColours/tiddler-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-border",
"text": "条目边框"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
"text": "悬停的条目控制项前景"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
"text": "选定的条目控制项前景"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
"text": "条目控制项前景"
},
"$:/language/Docs/PaletteColours/tiddler-editor-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
"text": "条目编辑器背景"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
"text": "条目编辑器边框图片"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
"text": "条目编辑器边框"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
"text": "条目编辑器中偶数栏位背景"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
"text": "条目编辑器中奇数栏位背景"
},
"$:/language/Docs/PaletteColours/tiddler-info-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-background",
"text": "条目信息面板背景"
},
"$:/language/Docs/PaletteColours/tiddler-info-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-border",
"text": "条目信息面板边框"
},
"$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
"text": "条目信息面板页签背景"
},
"$:/language/Docs/PaletteColours/tiddler-link-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-background",
"text": "条目链结背景"
},
"$:/language/Docs/PaletteColours/tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
"text": "条目链结前景"
},
"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
"text": "条目副标题前景"
},
"$:/language/Docs/PaletteColours/tiddler-title-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
"text": "条目标题前景"
},
"$:/language/Docs/PaletteColours/toolbar-new-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-new-button",
"text": "工具栏 '添加条目' 按钮前景"
},
"$:/language/Docs/PaletteColours/toolbar-options-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-options-button",
"text": "工具栏 '选项' 按钮前景"
},
"$:/language/Docs/PaletteColours/toolbar-save-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-save-button",
"text": "工具栏 '保存' 按钮前景"
},
"$:/language/Docs/PaletteColours/toolbar-info-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-info-button",
"text": "工具栏 '资讯' 按钮前景"
},
"$:/language/Docs/PaletteColours/toolbar-edit-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
"text": "工具栏 '编辑' 按钮前景"
},
"$:/language/Docs/PaletteColours/toolbar-close-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-close-button",
"text": "工具栏 '关闭' 按钮前景"
},
"$:/language/Docs/PaletteColours/toolbar-delete-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
"text": "工具栏 '删除' 按钮前景"
},
"$:/language/Docs/PaletteColours/toolbar-cancel-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
"text": "工具栏 '取消' 按钮前景"
},
"$:/language/Docs/PaletteColours/toolbar-done-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-done-button",
"text": "工具栏 '完成 按钮前景"
},
"$:/language/Docs/PaletteColours/untagged-background": {
"title": "$:/language/Docs/PaletteColours/untagged-background",
"text": "未设标签的背景"
},
"$:/language/Docs/PaletteColours/very-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/very-muted-foreground",
"text": "非常低调前景"
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"text": "此条目显示保存于主要的 TiddlyWiki 文件之外的内容。你可以编辑其标签和字段,但不能直接编辑内容本身"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "输入此条目的内容"
},
"$:/language/EditTemplate/Body/Preview/Type/Output": {
"title": "$:/language/EditTemplate/Body/Preview/Type/Output",
"text": "输出"
},
"$:/language/EditTemplate/Body/Preview/Type/DiffShadow": {
"title": "$:/language/EditTemplate/Body/Preview/Type/DiffShadow",
"text": "与影子条目的差异(如果有)"
},
"$:/language/EditTemplate/Body/Preview/Type/DiffCurrent": {
"title": "$:/language/EditTemplate/Body/Preview/Type/DiffCurrent",
"text": "与当前条目的差异"
},
"$:/language/EditTemplate/Field/Remove/Caption": {
"title": "$:/language/EditTemplate/Field/Remove/Caption",
"text": "删除字段"
},
"$:/language/EditTemplate/Field/Remove/Hint": {
"title": "$:/language/EditTemplate/Field/Remove/Hint",
"text": "删除字段"
},
"$:/language/EditTemplate/Field/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Field/Dropdown/Caption",
"text": "字段列表"
},
"$:/language/EditTemplate/Field/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Field/Dropdown/Hint",
"text": "显示字段列表"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "添加"
},
"$:/language/EditTemplate/Fields/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Fields/Add/Button/Hint",
"text": "添加字段至条目"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/System": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
"text": "系统字段"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/User": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
"text": "使用者字段"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "字段名称"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "添加字段:"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "字段内容"
},
"$:/language/EditTemplate/Shadow/Warning": {
"title": "$:/language/EditTemplate/Shadow/Warning",
"text": "这是一个默认条目。您做的任何更改将会覆盖来自 <<pluginLink>> 插件的默认版本。"
},
"$:/language/EditTemplate/Shadow/OverriddenWarning": {
"title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
"text": "这是一个修改过的默认条目。删除此条目可以还原为 <<pluginLink>> 插件中的默认版本。"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "添加"
},
"$:/language/EditTemplate/Tags/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Tags/Add/Button/Hint",
"text": "添加标签"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "标签名称"
},
"$:/language/EditTemplate/Tags/ClearInput/Caption": {
"title": "$:/language/EditTemplate/Tags/ClearInput/Caption",
"text": "清除输入"
},
"$:/language/EditTemplate/Tags/ClearInput/Hint": {
"title": "$:/language/EditTemplate/Tags/ClearInput/Hint",
"text": "清除标签输入"
},
"$:/language/EditTemplate/Tags/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
"text": "标签清单"
},
"$:/language/EditTemplate/Tags/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
"text": "显示标签清单"
},
"$:/language/EditTemplate/Title/BadCharacterWarning": {
"title": "$:/language/EditTemplate/Title/BadCharacterWarning",
"text": "请注意,避免在条目名称中使用这些字符:<<bad-chars>>"
},
"$:/language/EditTemplate/Title/Exists/Prompt": {
"title": "$:/language/EditTemplate/Title/Exists/Prompt",
"text": "目标条目已经存在"
},
"$:/language/EditTemplate/Title/Relink/Prompt": {
"title": "$:/language/EditTemplate/Title/Relink/Prompt",
"text": "将在其他条目的 //tags// 和 //list// 字段中的 ''<$text text=<<fromTitle>>/>'' 改为 ''<$text text=<<toTitle>>/>''"
},
"$:/language/EditTemplate/Title/References/Prompt": {
"title": "$:/language/EditTemplate/Title/References/Prompt",
"text": "下列对此条目的引用,不会自动更新:"
},
"$:/language/EditTemplate/Type/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Type/Dropdown/Caption",
"text": "内容类型清单"
},
"$:/language/EditTemplate/Type/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Type/Dropdown/Hint",
"text": "显示内容类型清单"
},
"$:/language/EditTemplate/Type/Delete/Caption": {
"title": "$:/language/EditTemplate/Type/Delete/Caption",
"text": "删除内容类型"
},
"$:/language/EditTemplate/Type/Delete/Hint": {
"title": "$:/language/EditTemplate/Type/Delete/Hint",
"text": "删除内容类型"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "内容类型"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "类型:"
},
"$:/language/Exporters/StaticRiver": {
"title": "$:/language/Exporters/StaticRiver",
"text": "静态 HTML"
},
"$:/language/Exporters/JsonFile": {
"title": "$:/language/Exporters/JsonFile",
"text": "JSON 文件"
},
"$:/language/Exporters/CsvFile": {
"title": "$:/language/Exporters/CsvFile",
"text": "CSV 文件"
},
"$:/language/Exporters/TidFile": {
"title": "$:/language/Exporters/TidFile",
"text": "\".tid\" 文件"
},
"$:/language/Docs/Fields/_canonical_uri": {
"title": "$:/language/Docs/Fields/_canonical_uri",
"text": "外部图像条目的完整的 URI"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "条目的来源集的名称"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "显示于页签或按钮上的标题文字"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "条目的 CSS 颜色值"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "负责[[警示条目|AlertMechanism]]的组件名称"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "条目的创建日期"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "条目的创建者"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "用于缓存[[浏览历史列表|HistoryMechanism]]的最上层条目"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "插件的相依插件列表"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "插件的说明、描述"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "草稿条目,包含条目的标题、标签、栏位 ..."
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "草稿条目的标题"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "wizard 的注脚"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "条目的标题含有与条目关联的图标"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "若设为 \"yes\",表示条目应该被保存为一个 JavaScript 程序库"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "条目的列表,指定一些条目的标题清单"
},
"$:/language/Docs/Fields/list-before": {
"title": "$:/language/Docs/Fields/list-before",
"text": "前条目名称将被添加到条目排序清单中的设置条目名称之前,或若此栏位存在但是空的,则被添加于清单的前端"
},
"$:/language/Docs/Fields/list-after": {
"title": "$:/language/Docs/Fields/list-after",
"text": "当前条目名称将被添加到条目排序清单的设置条目名称之后,或若此栏位存在但是空的,则被添加于清单的尾端"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "条目的最近修改日期与时间"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "条目的最近修改者"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "具可读性的插件条目的名称"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "插件条目的优先级数值"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "插件条目的类型"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "TiddlyWiki 的发布日期"
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "条目存放于服务器中的修订版本"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "条目的网址"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "一个 wizard 的副标题"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "条目的标签清单"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "条目的内文"
},
"$:/language/Docs/Fields/throttle.refresh": {
"title": "$:/language/Docs/Fields/throttle.refresh",
"text": "如果存在,则限制此条目的刷新"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "条目的唯一名称"
},
"$:/language/Docs/Fields/toc-link": {
"title": "$:/language/Docs/Fields/toc-link",
"text": "若设为: \"no\",则抑制目录树中的条目链接。"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "条目的内容类型"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "插件的版本信息"
},
"$:/language/Docs/Fields/_is_skinny": {
"title": "$:/language/Docs/Fields/_is_skinny",
"text": "如果存在,则表示必须从服务器加载条目的文本字段"
},
"$:/language/Filters/AllTiddlers": {
"title": "$:/language/Filters/AllTiddlers",
"text": "所有条目,不含系统条目"
},
"$:/language/Filters/RecentSystemTiddlers": {
"title": "$:/language/Filters/RecentSystemTiddlers",
"text": "最近修改的条目,包含系统条目"
},
"$:/language/Filters/RecentTiddlers": {
"title": "$:/language/Filters/RecentTiddlers",
"text": "最近修改的条目"
},
"$:/language/Filters/AllTags": {
"title": "$:/language/Filters/AllTags",
"text": "所有标签,不含系统标签"
},
"$:/language/Filters/Missing": {
"title": "$:/language/Filters/Missing",
"text": "缺失条目"
},
"$:/language/Filters/Drafts": {
"title": "$:/language/Filters/Drafts",
"text": "草稿条目"
},
"$:/language/Filters/Orphans": {
"title": "$:/language/Filters/Orphans",
"text": "孤立条目"
},
"$:/language/Filters/SystemTiddlers": {
"title": "$:/language/Filters/SystemTiddlers",
"text": "系统条目"
},
"$:/language/Filters/ShadowTiddlers": {
"title": "$:/language/Filters/ShadowTiddlers",
"text": "默认条目"
},
"$:/language/Filters/OverriddenShadowTiddlers": {
"title": "$:/language/Filters/OverriddenShadowTiddlers",
"text": "被覆写的默认条目"
},
"$:/language/Filters/SessionTiddlers": {
"title": "$:/language/Filters/SessionTiddlers",
"text": "自维基加载后修改的条目"
},
"$:/language/Filters/SystemTags": {
"title": "$:/language/Filters/SystemTags",
"text": "系统标签"
},
"$:/language/Filters/StoryList": {
"title": "$:/language/Filters/StoryList",
"text": "故事河中的条目,不含 ~$:/AdvancedSearch"
},
"$:/language/Filters/TypedTiddlers": {
"title": "$:/language/Filters/TypedTiddlers",
"text": "非维基文字条目"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n欢迎使用 ~TiddlyWiki 及参与 ~TiddlyWiki 社群\n\n开始将重要资讯存放于 ~TiddlyWiki 之前,确认您可以可靠地保存变更是很重要的。详细资讯请参阅 https://tiddlywiki.com/#GettingStarted\n\n!! 设置此 ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\n请参阅[[控制台|$:/ControlPanel]]查看更多选项。"
},
"$:/language/Help/build": {
"title": "$:/language/Help/build",
"description": "自动执行已配置的命令",
"text": "生成指定的生成目标为当前 wiki。若未指定任何生成目标,则生成所有可用的目标。\n\n```\n--build <target> [<target> ...]\n```\n\n生成目标在 wiki 文件夹的 `tiddlywiki.info` 文件中定义。\n"
},
"$:/language/Help/clearpassword": {
"title": "$:/language/Help/clearpassword",
"description": "清除用于后续加密的密码",
"text": "清除用于后续加密的密码\n\n```\n--clearpassword\n```\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\n用法: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\n可用的命令:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\n取得关于某个命令的详细帮助:\n\n```\ntiddlywiki --help <command>\n```\n"
},
"$:/language/Help/deletetiddlers": {
"title": "$:/language/Help/deletetiddlers",
"description": "删除一组条目",
"text": "<<.from-version \"5.1.20\">> 删除由筛选器标识的一组条目。\n\n```\n--deletetiddlers <filter>\n```\n"
},
"$:/language/Help/editions": {
"title": "$:/language/Help/editions",
"description": "列出可用的 TiddlyWiki 版本",
"text": "列出可用版本的名称和描述。您可以用 `--init` 命令创建一个指定版本的新维基。\n\n```\n--editions\n```\n"
},
"$:/language/Help/fetch": {
"title": "$:/language/Help/fetch",
"description": "通过网址从维基撷取条目",
"text": "通过 HTTP/HTTPS 撷取一个或多个文件,并导入匹配筛选器的条目,可选的转换传入的名称。\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\n \"file\" 和 \"files\" 选项撷取指定的文件,并尝试导入其中的条目(与将文件拖动到浏览器视窗中的处理相同)。 \"raw-file\" 和 \"raw-files\" 变选项撷取指定的文件,并将原始文件资料存储于条目,而不套用导入逻辑。\n\n使用 \"file\" and \"raw-file\" 选项为仅撷取单个文件,且第一个参数为要读取文件的网址。\n\n使用 \"files\" 和 \"raw-files\" 选项为撷取多个文件,且第一个参数是一个产生要读取文件的网址清单的筛选器。例如,给定标签为 \"remote-server\" 的一组具有字段 \"url\" 的条目,筛选器 `[tag[remote-server]get[url]]` 将取回所有可用的网址。\n\n对于 \"file\" 和 \"files\" 选项,the `<import-filter>` 参数指定一个筛选器,用于确定要导入哪些条目。如果未提供,则默认为 `[all[tiddlers]]`。\n\n对于所有选项,`<transform-filter>` 参数指定一个可选的筛选器,用于转换导入条目的名称。例如,`[addprefix[$:/myimports/]]` 会将前缀 `$:/myimports/` 加至每个名称。\n\n于 `--fetch` 之前使用 `--verbose` 命令,将在导入期间输出进度信息。\n\n请注意,TiddlyWiki 不会撷取一个已经加载插件的旧版本。\n\n以下示例从 https://tiddlywiki.com 取回所有非系统条目,并将其保存到一个 JSON 文件:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\n以下范例从 https://tiddlywiki.com 取回 \"favicon\" 文件,并将其保存在名为 \"output.ico\" 的文件中。请注意,在 \"--fetch\" 命令中引用的中间条目 \"Icon Tiddler\",因为它被用作转换筛选器来替换预设的名称,而 \"--savetiddler\" 命令没有引号,因为它是直接用作标题。\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "显示 TiddlyWiki 命令的说明",
"text": "显示命令的帮助文本:\n\n```\n--help [<command>]\n```\n\n若省略命令名称,则显示可用命令的清单。\n"
},
"$:/language/Help/import": {
"title": "$:/language/Help/import",
"description": "从文件导入条目",
"text": "从 TiddlyWiki 文件 (`.html`)、`.tiddler`、`.tid`、`.json` 或其他本机文件导入条目。必须明确指定解串器,而不像 load 命令,从文件扩展名推断解串器。\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\n核心的解串器包括:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\n导入的条目名称,默认为文件名。\n\n编码默认为 \"utf8\",但用于导入二进制文件可以是 \"base64\"。\n\n请注意,TiddlyWiki 不会导入旧版本的已加载插件。\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "初始化一个新的 wiki 文件夹",
"text": "初始化一个空的 [[WikiFolder|WikiFolders]] 的指定版本的副本。\n\n```\n--init <edition> [<edition> ...]\n```\n\n例如:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\n注意:\n\n* 若有需要,将创建 wiki 文件夹目录\n* 其中 \"edition\" 默认为 ''empty''\n* 若 wiki 文件夹不是空的,则初始化命令将失败\n* 初始化命令会删除 'tiddlywiki.info' 文件内所有 'includeWikis' 的定义。\n* 当指定多个版本时,这些版本于初始化后,将覆写早期版本共用的所有文件 (故此最终的 `tiddlywiki.info` 文件将是从最近的版本复制而得)\n* `--editions` 传回所有可用版本的清单。\n"
},
"$:/language/Help/listen": {
"title": "$:/language/Help/listen",
"description": "为 TiddlyWiki 提供一个 HTTP 服务器接口",
"text": "通过 HTTP 提供一个维基服务。\n\nlisten 命令使用[[命名的命令参数|NamedCommandParameters]]:\n\n```\n--listen [<name>=<value>]...\n```\n\n所有参数都是可选的, 具有安全的默认值, 可以按任意顺序指定。认可的参数有:\n\n* ''host'' - 可选的主机名称, (默认为 \"127.0.0.1\" 或名为 \"localhost\")\n* ''path-prefix'' - 可选的路径前缀\n* ''port'' - 侦听的埠号;非数值会被解译为一个系统环境变数,从其中提取埠号 (默认为 \"8080\")\n* ''credentials'' - 凭证 CSV 文件的路径名(相对于维基文件夹)\n* ''anon-username'' - 匿名用户的编辑署名\n* ''username'' - 可选的基本验证用户名称\n* ''password'' - 可选的基本验证密码\n* ''authenticated-user-header'' - 可选的标头名称,用于受信任身份验证\n* ''readers'' - 允许读取此维基,以逗号分隔的用户名称的清单\n* ''writers'' - 允许写入此维基,以逗号分隔的用户名称的清单\n* ''csrf-disable'' - 设置为 \"yes\" 以禁用 CSRF 检查 (默认为 \"no\")\n* ''sse-enabled'' - 设置为 \"yes\" 以启用服务器传送的事件 (默认为 \"no\")\n* ''root-tiddler'' - 服务的基本条目 (默认为 \"$:/core/save/all\")\n* ''root-render-type'' - 呈现的基本条目的内容类型 (默认为 \"text/plain\")\n* ''root-serve-type'' - 服务的基本条目的内容类型 (默认为 \"text/html\")\n* ''tls-cert'' - TLS 证书文件的路径名(相对于维基文件夹)\n* ''tls-key'' - TLS 密钥文件的路径名(相对于维基文件夹)\n* ''debug-level'' - 可选的调试级别;设置为 \"debug\" 来查看请求的详细信息;(默认为 \"none\")\n* ''gzip'' - 设为 \"yes\" 以启用某些 http 端点的 gzip 压缩 (默认为 \"no\")\n* ''use-browser-cache'' - 设置为 \"yes\" 允许浏览器缓存响应,以节省带宽(默认为 \"no\")\n\n有关向整个本地网络开启实例的信息,以及可能的安全问题,请参阅 TiddlyWiki.com 的 WebServer 条目。\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "从文件中加载条目",
"text": "从 TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` 或其他本机文件加载条目。应用的处理程序取决于导入文件的扩展名。如果您需要明确指定解串器和编码,请改用 `import` 命令。\n\n```\n--load <filepath> [noerror]\n--load <dirpath> [noerror]\n```\n\n默认情况下, 如果未找到条目,load 命令会引发错误。通过提供可选的 \"noerror\" 参数可以抑制该错误。\n\n从已加密的 TiddlyWiki 文件中加载条目,须使用 PasswordCommand 指定密码,例如:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\n请注意 TiddlyWiki 将不加载旧版本的已挂载的插件。\n"
},
"$:/language/Help/makelibrary": {
"title": "$:/language/Help/makelibrary",
"description": "构建升级处理所需的程式库插件",
"text": "为升级处理构建 `$:/UpgradeLibrary` 条目。\n\n升级程式库被格式化为一个插件类型为 `library` 的一般插件条目。它包含 TiddlyWiki5 存储库中所有可用的插件、布景主题和语言包的副本。\n\n此命令仅供内部使用;它只是与使用者构建一个自订的升级程序相关。\n\n```\n--makelibrary <title>\n```\n\n标题参数默认为 `$:/UpgradeLibrary`。\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "无此帮助项目"
},
"$:/language/Help/output": {
"title": "$:/language/Help/output",
"description": "设置后续命令的基准输出文件夹",
"text": "设置后续命令的基准输出文件夹,默认为该版本文件夹的 `output` 子文件夹。\n\n```\n--output <pathname>\n```\n\n若指定的路径是相对路径,则它是被解析相对于当前的工作文件夹。例如:`--output .` 將輸出文件夹設置為當前工作文件夹。"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "设置用以加密的密码",
"text": "设置用以加密的密码\n\n```\n--password <password>\n```\n\n''请注意'':这不是用于提供 TiddlyWiki 具有密码保护功能。相反地,请看 [[ServerCommand]] 的密码选项说明。\n"
},
"$:/language/Help/render": {
"title": "$:/language/Help/render",
"description": "呈现个别条目到文件",
"text": "呈现由筛选器标识的个别条目,并将结果保存到指定的文件。\n\n可选择性地指定范本条目名称。在此情况下,不是直接呈现每个条目,而是使用设为正在呈现的条目名称的 \"currentTiddler\" 变量,来呈现范本条目。\n\n也可以选择性地指定附加变量的名称和值。\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [ [<name>] [<value>] ]*\n```\n\n* ''tiddler-filter'': 标识要呈现的条目的筛选器\n* ''filename-filter'': 可选的筛选器,转换条目名称至路径名。如果省略,默认为 `[is[tiddler]addsuffix[.html]]`,其使用未改变的条目名称为文件名\n* ''template'': 可选的范本,用于呈现每个条目\n* ''render-type'': 可选的呈现类型:`text/html` (默认值) 会传回完整的 HTML 文本,而 `text/plain` 只会传回文本内容 (即其忽略 HTML 标记与其他不可印出的数据)\n* ''name'': 可选的变量名称\n* ''value'': 可选的变量值\n\n默认情况下,文件名被解析为相对于发行版文件夹的 `output` 子文件夹。`--output` 命令可用于将输出指到一个不同的文件夹。\n\n附注:\n\n* 输出目录不清除任何现有的文件\n* 文件名的路径中,任何不存在的文件夹,将自动创建。\n* 当正呈现的条目名称中带有空格,请注意同时使用命令行接口所要求的引号,与 TiddlyWiki 的双重方括号:`--render \"[[Motovun Jack.jpg]]\"`\n* 所选的项目被设置为当前正在呈现的条目名称,以此评估文件名筛选器,允条目名称用作基础计算的文件名。例如,`[encodeuricomponent[]addprefix[static/]]` 为每个条目名称套用 URI 编码,然后增加首码 `static/`\n* `--render` 命令是已弃用的 `--rendertiddler` 和 `--rendertiddlers` 的一个更灵活的替代命令。\n\n例子:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- 呈现所有非系统条目为 \"tiddlers\" 子文件夹中的文件,文件名为 URL 编码的条目名称和扩展名 HTML\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "呈现个别条目为指定的内容类型",
"text": "(请注意:`--rendertiddler` 命令已被弃用,而支持新的、更灵活的 `--render` 命令)\n\n呈现个别条目为指定的[[内容类型|ContentType]],默认为 `text/html` 且保存为指定的文件名。\n\n还可以指定一个模板,在这种情况下,\"currentTiddler\" 变量设为正在呈现的条目 (第一个参数值) 与模板条目合并呈现。\n\n也能可选地指定附加变量的名称与其值。\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>]\n```\n\n默认情况下,文件名被解析为相对于版本文件夹的 `output` 子文件夹。 `--output` 命令可以用于将输出指定到一个不同的文件夹。\n\n自动创建在文件名称的路径中任何缺少的文件夹。\n\n例如,以下命令通过使用核心模板 `$:/core/templates/exporters/JsonFile`,将所有匹配筛选器 `[tag[done]]` 的条目保存到名为 `output.json` 的 JSON 文件。\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "呈现符合筛选条件的条目为指定的内容类型",
"text": "(请注意:`--rendertiddlers` 命令已被弃用,而支持新的、更灵活的 `--render` 命令)\n\n呈现符合筛选条的条目为指定的[[内容类型|ContentType]] (默认为 `text/html`) 与扩展名 (默认为 `.html`).\n\n```\n--rendertiddlers '<filter>' <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\n例如:\n\n```\n--rendertiddlers '[!is[system]]' $:/core/templates/static.tiddler.html ./static text/plain\n```\n\n默认情况下,路径名被解析为相对于版本文件夹的 `output` 子文件夹。 `--output` 命令可以用于将输出指定到一个不同的文件。\n\n在目标文件夹中的任何文件都会被删除,除非指定 ''noclean'' 旗标。若缺少目标文件夹,则以递归方式创建。"
},
"$:/language/Help/save": {
"title": "$:/language/Help/save",
"description": "将个别原始条目保存到文件",
"text": "将筛选器标识的个别条目,以原始文本或二进位格式,保存到指定的文件。\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': 标识要保存的条目的筛选器\n* ''filename-filter'': 可选的筛选器,转换条目名称至路径名。如果省略,默认为 `[is[tiddler]]`,其使用未改变的条目名称为文件名\n\n附注:\n\n* 输出文件夹不清除任何现有的文件\n* 文件名的路径中,任何不存在的文件夹,将自动创建。\n* 当正保存的条目的名称中带有空格,请注意同时使用命令行接口所要求的引号,与 TiddlyWiki 的双重方括号:`--save \"[[Motovun Jack.jpg]]\"`\n* 所选的项目被设置为当前正在保存的条目名称,以此评估文件名筛选器,允条目名称用作基础计算的文件名。例如,`[encodeuricomponent[]addprefix[static/]]` 为每个条目名称套用 URI 编码,然后增加首码 `static/`\n* `--save` 命令是已被弃用的 `--savetiddler` 和 `--savetiddlers` 的一个更灵活的替代命令。\n\n例子:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- 保存所有非系统的图像条目为 \"tiddlers\" 子文件夹中的文件,文件名为 URL 编码的条目名称"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "将条目的原始内容保存到一个文件",
"text": "(请注意:`--savetiddler` 命令已被弃用,而支持新的、更灵活的 `--save` 命令)\n\n保存个别条目的原始文本或二进制格式到指定的文件名。\n\n```\n--savetiddler <title> <filename>\n```\n\n默认情况下,文件名被解析为相对于版本文件夹的 `output` 子文件夹。 `--output` 命令可以用于将输出指定到一个不同的文件。\n\n自动创建在文件名称的路径中任何缺少的文件夹。\n"
},
"$:/language/Help/savetiddlers": {
"title": "$:/language/Help/savetiddlers",
"description": "将一群条目的原始内容保存到一个文件夹",
"text": "(请注意:`--savetiddlers` 命令已被弃用,而支持新的、更灵活的 `--save` 命令)\n\n保存一群条目的原始文字或二进制格式到指定的文件夹。\n\n```\n--savetiddlers <filter> <pathname> [noclean]\n```\n\n默认情况下,路径名被解析为相对于版本文件夹的 `output` 子文件夹。 `--output` 命令可以用于将输出指定到一个不同的文件夹。\n\n保存指定的文件之前,会先清除输出目录的现有文件。可藉由指定 ''noclean'' 旗标,禁用该删除动作。\n\n自动创建在路径中任何缺少的文件夹。\n"
},
"$:/language/Help/savewikifolder": {
"title": "$:/language/Help/savewikifolder",
"description": "将维基保存到一个新的维基文件夹",
"text": "<<.from-version \"5.1.20\">> 将当前维基保存为一个维基文件夹,包含条目、插件和配置:\n\n```\n--savewikifolder <wikifolderpath> [<filter>]\n```\n\n* 目标维基文件夹必须为空或不存在\n* 筛选器指定应包括哪些条目。其为可选,默认为 `[all[tiddlers]]`\n* 官方插件库中的插件,将替换为 `tiddlywiki.info` 文件中引用到的插件\n* 自订插件将解压缩到自己的文件夹中\n\n常见的用法是将一个 TiddlyWiki HTML 文件转换成维基文件夹:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\n```\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "提供一个 HTTP 服务器介面到 TiddlyWiki (已弃用,支持新的 listen 命令)",
"text": "在服务器中内置 TiddlyWiki5 是非常简单。虽与 TiddlyWeb 兼容,但不支持许多健全互联网面向的使用方式所需的功能。\n\n提供呈现一个指定条目,也可将个别条目编码成 JSON,且支持基本的 HTTP 操作 `GET`、`PUT` 及 `DELETE`.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\n参数说明:\n\n* ''port'' - 要侦听的埠号;非数值会被解译为一个系统环境变数,从其中提取埠号 (默认为 \"8080\")\n* ''root-tiddler'' - 服务的基本条目 (默认为 \"$:/core/save/all\")\n* ''root-render-type'' - 呈现的基本条目的内容类型 (默认为 \"text/plain\")\n* ''root-serve-type'' - 服务的基本条目的内容类型 (默认为 \"text/html\")\n* ''username'' - 默认的编辑者署名\n* ''password'' - 可选的基本验证密码\n* ''host'' - 可选的主机名称, (默认为 \"127.0.0.1\" 或名为 \"localhost\")\n* ''path-prefix'' - 可选的路径前缀\n* ''debug-level'' - 可选的调试级别;设置为 \"debug\" 来查看请求的详细信息;(默认为 \"none\")\n\n若指定密码参数,浏览器将提示使用者输入用户名与密码。注意,密码系以明码方式传递,应只在受信任的网络或 HTTPS 上使用。\n\n例如:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\n若您需要设置主机名称或路径前缀,而不要求输入密码,则可以指定空字符串的使用者名和密码。\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\n使用这样的位址,会将您的系统暴露给本地网络。有关向整个本地网络开启实例的信息,以及可能的安全问题,请参阅 TiddlyWiki.com 的 WebServer 条目。\n\n同时执行多个 TiddlyWiki 服务,须分别指定不同的埠号。使用环境变数,有助于将埠号传递给 Node.js 进程。本示例引用一个名为 \"MY_PORT_NUMBER\" 的环境变数:\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```"
},
"$:/language/Help/setfield": {
"title": "$:/language/Help/setfield",
"description": "准备用于外部条目",
"text": "//请注意此命令是试验性的,且可能会更改或在最终定稿前被替换//\n\n设置一群条目的指定栏位到 wikifying 范本条目的结果,其中的 `currentTiddler` 变数设置为各该条目。\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\n参数说明:\n\n* ''filter'' - 受影响的辨识条目的筛选条件\n* ''fieldname'' - 要修改的栏位(默认为 \"text\")\n* ''templatetitle'' - 该条目 wikify 到指定栏位。若为空白或丢失,则删除指定的栏位\n* ''rendertype'' - 要呈现的文本类型(默认为 \"text/plain\"; \"text/html\" 可以用于包含 HTML 标记))\n"
},
"$:/language/Help/unpackplugin": {
"title": "$:/language/Help/unpackplugin",
"description": "从插件解开附属的条目",
"text": "提取插件的附属条目,将其建立为一般条目:\n\n```\n--unpackplugin <title>\n```\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "触发详细的输出模式",
"text": "触发显示详细的命令执行过程,可用于调试\n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "显示 TiddlyWiki 的版本编号",
"text": "显示 TiddlyWiki 的版本编号。\n\n```\n--version\n```\n"
},
"$:/languages/zh-Hans/icon": {
"title": "$:/languages/zh-Hans/icon",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"1500\" height=\"1000\" viewBox=\"-5 -5 30 20\">\n<title>Flag of the People's Republic of China</title>\n<rect fill=\"#de2910\" x=\"-5\" y=\"-5\" width=\"30\" height=\"20\"/>\n<defs>\n<polygon id=\"s\" points=\"0,-513674 301930,415571 -488533,-158734 488533,-158734 -301930,415571\"\nfill=\"#ffde00\" transform=\"scale(0.0000019467600073)\"/>\n</defs>\n<use xlink:href=\"#s\" transform=\"scale(3)\"/>\n<use xlink:href=\"#s\" transform=\"translate(5,-3) rotate(-120.963756)\"/>\n<use xlink:href=\"#s\" transform=\"translate(7,-1) rotate(-98.130102)\"/>\n<use xlink:href=\"#s\" transform=\"translate(7,2) rotate(-74.054604)\"/>\n<use xlink:href=\"#s\" transform=\"translate(5,4) rotate(-51.3401917)\"/>\n</svg>\n"
},
"$:/language/Import/Editor/Import/Heading": {
"title": "$:/language/Import/Editor/Import/Heading",
"text": "导入图像并将其插入至编辑器。"
},
"$:/language/Import/Imported/Hint": {
"title": "$:/language/Import/Imported/Hint",
"text": "下列条目已被导入:"
},
"$:/language/Import/Listing/Cancel/Caption": {
"title": "$:/language/Import/Listing/Cancel/Caption",
"text": "取消"
},
"$:/language/Import/Listing/Hint": {
"title": "$:/language/Import/Listing/Hint",
"text": "这些条目已备妥导入:"
},
"$:/language/Import/Listing/Import/Caption": {
"title": "$:/language/Import/Listing/Import/Caption",
"text": "导入"
},
"$:/language/Import/Listing/Select/Caption": {
"title": "$:/language/Import/Listing/Select/Caption",
"text": "选择"
},
"$:/language/Import/Listing/Status/Caption": {
"title": "$:/language/Import/Listing/Status/Caption",
"text": "状态"
},
"$:/language/Import/Listing/Title/Caption": {
"title": "$:/language/Import/Listing/Title/Caption",
"text": "条目"
},
"$:/language/Import/Listing/Preview": {
"title": "$:/language/Import/Listing/Preview",
"text": "预览:"
},
"$:/language/Import/Listing/Preview/Text": {
"title": "$:/language/Import/Listing/Preview/Text",
"text": "文本"
},
"$:/language/Import/Listing/Preview/TextRaw": {
"title": "$:/language/Import/Listing/Preview/TextRaw",
"text": "文本 (原始)"
},
"$:/language/Import/Listing/Preview/Fields": {
"title": "$:/language/Import/Listing/Preview/Fields",
"text": "字段"
},
"$:/language/Import/Listing/Preview/Diff": {
"title": "$:/language/Import/Listing/Preview/Diff",
"text": "差异"
},
"$:/language/Import/Listing/Preview/DiffFields": {
"title": "$:/language/Import/Listing/Preview/DiffFields",
"text": "差异 (字段)"
},
"$:/language/Import/Listing/Rename/Prompt": {
"title": "$:/language/Import/Listing/Rename/Prompt",
"text": "重新命名为:"
},
"$:/language/Import/Listing/Rename/Tooltip": {
"title": "$:/language/Import/Listing/Rename/Tooltip",
"text": "导入前重新命名条目"
},
"$:/language/Import/Listing/Rename/ConfirmRename": {
"title": "$:/language/Import/Listing/Rename/ConfirmRename",
"text": "重新命名条目"
},
"$:/language/Import/Listing/Rename/CancelRename": {
"title": "$:/language/Import/Listing/Rename/CancelRename",
"text": "取消"
},
"$:/language/Import/Listing/Rename/OverwriteWarning": {
"title": "$:/language/Import/Listing/Rename/OverwriteWarning",
"text": "具有此标题的条目已存在。"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
"text": "封锁的不兼容或过时插件。"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
"text": "封锁的插件 (由于传入的 <<incoming>> 不比现有版本 <<existing>> 新)。"
},
"$:/language/Import/Upgrader/Plugins/Upgraded": {
"title": "$:/language/Import/Upgrader/Plugins/Upgraded",
"text": "升级插件,从 <<incoming>> 到 <<upgraded>>。"
},
"$:/language/Import/Upgrader/State/Suppressed": {
"title": "$:/language/Import/Upgrader/State/Suppressed",
"text": "封锁的暂存状态条目。"
},
"$:/language/Import/Upgrader/System/Disabled": {
"title": "$:/language/Import/Upgrader/System/Disabled",
"text": "已禁用系統条目。"
},
"$:/language/Import/Upgrader/System/Suppressed": {
"title": "$:/language/Import/Upgrader/System/Suppressed",
"text": "封锁的系统条目。"
},
"$:/language/Import/Upgrader/System/Warning": {
"title": "$:/language/Import/Upgrader/System/Warning",
"text": "核心模块条目。"
},
"$:/language/Import/Upgrader/System/Alert": {
"title": "$:/language/Import/Upgrader/System/Alert",
"text": "您即将导入一个条目会覆盖一个核心模块条目。不建议这样做,因为可能会使系统不稳定。"
},
"$:/language/Import/Upgrader/ThemeTweaks/Created": {
"title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
"text": "从 <$text text=<<from>>/> 迁移布景主题。"
},
"$:/language/Import/Upgrader/Tiddler/Disabled": {
"title": "$:/language/Import/Upgrader/Tiddler/Disabled",
"text": "已禁用系統条目。"
},
"$:/language/Import/Upgrader/Tiddler/Selected": {
"title": "$:/language/Import/Upgrader/Tiddler/Selected",
"text": "用户选定。"
},
"$:/language/Import/Upgrader/Tiddler/Unselected": {
"title": "$:/language/Import/Upgrader/Tiddler/Unselected",
"text": "未选定的条目"
},
"$:/language/AboveStory/ClassicPlugin/Warning": {
"title": "$:/language/AboveStory/ClassicPlugin/Warning",
"text": "您貌似要加载为 ~TiddlyWiki 经典版设计的插件。请注意,[[这些插件无法运行于 TiddlyWiki 5.x.x 版|https://tiddlywiki.com/#TiddlyWikiClassic]]。检测到 ~TiddlyWiki 经典版插件:"
},
"$:/language/BinaryWarning/Prompt": {
"title": "$:/language/BinaryWarning/Prompt",
"text": "此条目包含二进制数据"
},
"$:/language/ClassicWarning/Hint": {
"title": "$:/language/ClassicWarning/Hint",
"text": "此条目以经典版 TiddlyWiki 标记格式撰写,不完全兼容新版 TiddlyWiki 的格式,详细信息请参阅:https://tiddlywiki.com/static/Upgrading。"
},
"$:/language/ClassicWarning/Upgrade/Caption": {
"title": "$:/language/ClassicWarning/Upgrade/Caption",
"text": "升级"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "全部关闭"
},
"$:/language/ColourPicker/Recent": {
"title": "$:/language/ColourPicker/Recent",
"text": "最近︰"
},
"$:/language/ConfirmCancelTiddler": {
"title": "$:/language/ConfirmCancelTiddler",
"text": "您确定要放弃对条目 \"<$text text=<<title>>/>\" 的更改?"
},
"$:/language/ConfirmDeleteTiddler": {
"title": "$:/language/ConfirmDeleteTiddler",
"text": "您确定要删除条目 \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmOverwriteTiddler": {
"title": "$:/language/ConfirmOverwriteTiddler",
"text": "您确定要复写条目 \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmEditShadowTiddler": {
"title": "$:/language/ConfirmEditShadowTiddler",
"text": "您即将要编辑默认条目,任何更改将会复盖默认的系统,使未来的升级不寻常。您确定要编辑 \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmAction": {
"title": "$:/language/ConfirmAction",
"text": "是否要继续?"
},
"$:/language/Count": {
"title": "$:/language/Count",
"text": "计数"
},
"$:/language/DefaultNewTiddlerTitle": {
"title": "$:/language/DefaultNewTiddlerTitle",
"text": "新条目"
},
"$:/language/Diffs/CountMessage": {
"title": "$:/language/Diffs/CountMessage",
"text": "<<diff-count>> 个差异"
},
"$:/language/DropMessage": {
"title": "$:/language/DropMessage",
"text": "拖放到此处 (或按 ESC 键取消)"
},
"$:/language/Encryption/Cancel": {
"title": "$:/language/Encryption/Cancel",
"text": "取消"
},
"$:/language/Encryption/ConfirmClearPassword": {
"title": "$:/language/Encryption/ConfirmClearPassword",
"text": "您要清除密码吗?当保存此维基时,这将删除已套用的加密"
},
"$:/language/Encryption/Username": {
"title": "$:/language/Encryption/Username",
"text": "用户名称"
},
"$:/language/Encryption/Password": {
"title": "$:/language/Encryption/Password",
"text": "密码"
},
"$:/language/Encryption/PromptSetPassword": {
"title": "$:/language/Encryption/PromptSetPassword",
"text": "为此 TiddlyWiki 设置一个新密码"
},
"$:/language/Encryption/RepeatPassword": {
"title": "$:/language/Encryption/RepeatPassword",
"text": "重复输入密码"
},
"$:/language/Encryption/PasswordNoMatch": {
"title": "$:/language/Encryption/PasswordNoMatch",
"text": "密码不匹配"
},
"$:/language/Encryption/SetPassword": {
"title": "$:/language/Encryption/SetPassword",
"text": "设定密码"
},
"$:/language/Error/Caption": {
"title": "$:/language/Error/Caption",
"text": "错误"
},
"$:/language/Error/Filter": {
"title": "$:/language/Error/Filter",
"text": "筛选器错误"
},
"$:/language/Error/FilterRunPrefix": {
"title": "$:/language/Error/FilterRunPrefix",
"text": "筛选器错误:筛选器 run 的未知首码"
},
"$:/language/Error/FilterSyntax": {
"title": "$:/language/Error/FilterSyntax",
"text": "筛选器运算式中的语法错误"
},
"$:/language/Error/FormatFilterOperator": {
"title": "$:/language/Error/FormatFilterOperator",
"text": "筛选器错误:`format` 筛选器运算符的未知尾码"
},
"$:/language/Error/IsFilterOperator": {
"title": "$:/language/Error/IsFilterOperator",
"text": "筛选器错误︰'is' 筛选器运算符的未知操作数"
},
"$:/language/Error/LoadingPluginLibrary": {
"title": "$:/language/Error/LoadingPluginLibrary",
"text": "加载插件程式库时,发生错误"
},
"$:/language/Error/NetworkErrorAlert": {
"title": "$:/language/Error/NetworkErrorAlert",
"text": "`<h2>''网络错误''</h2>与服务器的连缐似乎已中断。这可能表示您的网络连缐有问题。请尝试恢复网路连缐才能继续。<br><br>''恢复连缐时,所有未保存的更改,将自动同步''。`"
},
"$:/language/Error/PutEditConflict": {
"title": "$:/language/Error/PutEditConflict",
"text": "服务器上的文件已更改"
},
"$:/language/Error/PutForbidden": {
"title": "$:/language/Error/PutForbidden",
"text": "没有权限"
},
"$:/language/Error/PutUnauthorized": {
"title": "$:/language/Error/PutUnauthorized",
"text": "需要身分验证"
},
"$:/language/Error/RecursiveTransclusion": {
"title": "$:/language/Error/RecursiveTransclusion",
"text": "于 transclude 小部件中的递回嵌入错误"
},
"$:/language/Error/RetrievingSkinny": {
"title": "$:/language/Error/RetrievingSkinny",
"text": "简要条目清单撷取错误"
},
"$:/language/Error/SavingToTWEdit": {
"title": "$:/language/Error/SavingToTWEdit",
"text": "保存到 TWEdit 时,发生错误"
},
"$:/language/Error/WhileSaving": {
"title": "$:/language/Error/WhileSaving",
"text": "保存时,发生错误"
},
"$:/language/Error/XMLHttpRequest": {
"title": "$:/language/Error/XMLHttpRequest",
"text": "XMLHttpRequest 错误代码"
},
"$:/language/InternalJavaScriptError/Title": {
"title": "$:/language/InternalJavaScriptError/Title",
"text": "内部的 JavaScript 错误"
},
"$:/language/InternalJavaScriptError/Hint": {
"title": "$:/language/InternalJavaScriptError/Hint",
"text": "喔,真是令人尴尬。建议刷新您的浏览器,重新启动 TiddlyWiki"
},
"$:/language/InvalidFieldName": {
"title": "$:/language/InvalidFieldName",
"text": "字段名称 \"<$text text=<<fieldName>>/>\" 包含无效字符,字段名称只能包含小写字母、数字、底线 (`_`)、 连字号 (`-`) 和小数点 (`.`)"
},
"$:/language/LayoutSwitcher/Description": {
"title": "$:/language/LayoutSwitcher/Description",
"text": "打开布局切换器"
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"text": "<p>正在从 ''<$text text={{!!_canonical_uri}}/>'' 加载外部内容 ...</p><p>如果此信息未消失,可能是条目内容类型与外部内容的类型不匹配,或是您可能正在使用的浏览器,不支援单文件式维基的外部内容。请参阅 https://tiddlywiki.com/#ExternalText</p>"
},
"$:/language/LoginToTiddlySpace": {
"title": "$:/language/LoginToTiddlySpace",
"text": "登录 TiddlySpace"
},
"$:/language/Manager/Controls/FilterByTag/None": {
"title": "$:/language/Manager/Controls/FilterByTag/None",
"text": "(无)"
},
"$:/language/Manager/Controls/FilterByTag/Prompt": {
"title": "$:/language/Manager/Controls/FilterByTag/Prompt",
"text": "依标签筛选︰"
},
"$:/language/Manager/Controls/Order/Prompt": {
"title": "$:/language/Manager/Controls/Order/Prompt",
"text": "反向顺序"
},
"$:/language/Manager/Controls/Search/Placeholder": {
"title": "$:/language/Manager/Controls/Search/Placeholder",
"text": "搜寻"
},
"$:/language/Manager/Controls/Search/Prompt": {
"title": "$:/language/Manager/Controls/Search/Prompt",
"text": "搜寻︰"
},
"$:/language/Manager/Controls/Show/Option/Tags": {
"title": "$:/language/Manager/Controls/Show/Option/Tags",
"text": "标签"
},
"$:/language/Manager/Controls/Show/Option/Tiddlers": {
"title": "$:/language/Manager/Controls/Show/Option/Tiddlers",
"text": "条目"
},
"$:/language/Manager/Controls/Show/Prompt": {
"title": "$:/language/Manager/Controls/Show/Prompt",
"text": "显示︰"
},
"$:/language/Manager/Controls/Sort/Prompt": {
"title": "$:/language/Manager/Controls/Sort/Prompt",
"text": "排序︰"
},
"$:/language/Manager/Item/Colour": {
"title": "$:/language/Manager/Item/Colour",
"text": "颜色"
},
"$:/language/Manager/Item/Fields": {
"title": "$:/language/Manager/Item/Fields",
"text": "字段"
},
"$:/language/Manager/Item/Icon/None": {
"title": "$:/language/Manager/Item/Icon/None",
"text": "(无)"
},
"$:/language/Manager/Item/Icon": {
"title": "$:/language/Manager/Item/Icon",
"text": "图标"
},
"$:/language/Manager/Item/RawText": {
"title": "$:/language/Manager/Item/RawText",
"text": "原始文字"
},
"$:/language/Manager/Item/Tags": {
"title": "$:/language/Manager/Item/Tags",
"text": "标签"
},
"$:/language/Manager/Item/Tools": {
"title": "$:/language/Manager/Item/Tools",
"text": "工具"
},
"$:/language/Manager/Item/WikifiedText": {
"title": "$:/language/Manager/Item/WikifiedText",
"text": "Wikified 文字"
},
"$:/language/MissingTiddler/Hint": {
"title": "$:/language/MissingTiddler/Hint",
"text": "佚失条目 \"<$text text=<<currentTiddler>>/>\" - 点击 {{||$:/core/ui/Buttons/edit}} 可创建此条目"
},
"$:/language/No": {
"title": "$:/language/No",
"text": "否"
},
"$:/language/OfficialPluginLibrary": {
"title": "$:/language/OfficialPluginLibrary",
"text": "~TiddlyWiki 官方插件程式库"
},
"$:/language/OfficialPluginLibrary/Hint": {
"title": "$:/language/OfficialPluginLibrary/Hint",
"text": "此为在 tiddlywiki.com 的 ~TiddlyWiki 官方插件程式库。由核心团队维护的插件、主题和语言包。"
},
"$:/language/PageTemplate/Description": {
"title": "$:/language/PageTemplate/Description",
"text": "默认的 ~Tiddlywiki 布局"
},
"$:/language/PageTemplate/Name": {
"title": "$:/language/PageTemplate/Name",
"text": "默认的 ~PageTemplate"
},
"$:/language/PluginReloadWarning": {
"title": "$:/language/PluginReloadWarning",
"text": "请保存 {{$:/core/ui/Buttons/save-wiki}} 并刷新页面 {{$:/core/ui/Buttons/refresh}} ,使 ~JavaScript 插件的更改生效"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "YYYY年0MM月0DD日"
},
"$:/language/Shortcuts/Input/Accept/Hint": {
"title": "$:/language/Shortcuts/Input/Accept/Hint",
"text": "接受选取的项目"
},
"$:/language/Shortcuts/Input/AcceptVariant/Hint": {
"title": "$:/language/Shortcuts/Input/AcceptVariant/Hint",
"text": "接受选取项目 (变种)"
},
"$:/language/Shortcuts/Input/AdvancedSearch/Hint": {
"title": "$:/language/Shortcuts/Input/AdvancedSearch/Hint",
"text": "从侧边栏搜寻字段内打开[[进阶搜寻|$:/AdvancedSearch]]面板"
},
"$:/language/Shortcuts/Input/Cancel/Hint": {
"title": "$:/language/Shortcuts/Input/Cancel/Hint",
"text": "清除输入字段"
},
"$:/language/Shortcuts/Input/Down/Hint": {
"title": "$:/language/Shortcuts/Input/Down/Hint",
"text": "选择下一个项目"
},
"$:/language/Shortcuts/Input/Tab-Left/Hint": {
"title": "$:/language/Shortcuts/Input/Tab-Left/Hint",
"text": "选择上一个页签"
},
"$:/language/Shortcuts/Input/Tab-Right/Hint": {
"title": "$:/language/Shortcuts/Input/Tab-Right/Hint",
"text": "选择下一个页签"
},
"$:/language/Shortcuts/Input/Up/Hint": {
"title": "$:/language/Shortcuts/Input/Up/Hint",
"text": "选择前一个项目"
},
"$:/language/Shortcuts/SidebarLayout/Hint": {
"title": "$:/language/Shortcuts/SidebarLayout/Hint",
"text": "更改侧边栏布局"
},
"$:/language/Switcher/Subtitle/theme": {
"title": "$:/language/Switcher/Subtitle/theme",
"text": "切换布景主题"
},
"$:/language/Switcher/Subtitle/layout": {
"title": "$:/language/Switcher/Subtitle/layout",
"text": "切换布局"
},
"$:/language/Switcher/Subtitle/language": {
"title": "$:/language/Switcher/Subtitle/language",
"text": "切换语言"
},
"$:/language/Switcher/Subtitle/palette": {
"title": "$:/language/Switcher/Subtitle/palette",
"text": "切换调色板"
},
"$:/language/SystemTiddler/Tooltip": {
"title": "$:/language/SystemTiddler/Tooltip",
"text": "此为系统条目"
},
"$:/language/SystemTiddlers/Include/Prompt": {
"title": "$:/language/SystemTiddlers/Include/Prompt",
"text": "包括系统条目"
},
"$:/language/TagManager/Colour/Heading": {
"title": "$:/language/TagManager/Colour/Heading",
"text": "颜色"
},
"$:/language/TagManager/Count/Heading": {
"title": "$:/language/TagManager/Count/Heading",
"text": "计数"
},
"$:/language/TagManager/Icon/Heading": {
"title": "$:/language/TagManager/Icon/Heading",
"text": "图标"
},
"$:/language/TagManager/Icons/None": {
"title": "$:/language/TagManager/Icons/None",
"text": "无"
},
"$:/language/TagManager/Info/Heading": {
"title": "$:/language/TagManager/Info/Heading",
"text": "信息"
},
"$:/language/TagManager/Tag/Heading": {
"title": "$:/language/TagManager/Tag/Heading",
"text": "标签"
},
"$:/language/Tiddler/DateFormat": {
"title": "$:/language/Tiddler/DateFormat",
"text": "YYYY年0MM月0DD日 0hh:0mm"
},
"$:/language/UnsavedChangesWarning": {
"title": "$:/language/UnsavedChangesWarning",
"text": "在此 TiddlyWiki 您有尚未保存的变更"
},
"$:/language/Yes": {
"title": "$:/language/Yes",
"text": "是"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"type": "text/vnd.tiddlywiki",
"subtitle": "Download changes",
"footer": "<$button message=\"tm-close-tiddler\">关闭</$button>",
"help": "https://tiddlywiki.com/",
"text": "您的浏览器只支援手动保存。\n\n要保存更动的维基,右键点击下方的下载链结,选择\"下载文件\"或\"保存文件\",然后选择文件夹或文件名。\n\n//您可以藉由按一下 Ctrl 键(Windows)或 options/ alt 键(Mac OS X)中的链接,稍微加速操作。您不会被提示文件夹或文件名,您的浏览器可能无法辨认它的文件名 -- 在做其他任何事之前,您可能需要重新命名扩展名为 `.html` 的文件。//\n\n在智能型手机上,不允许下载文件,但您可以标记链结,然后从一台可以正常保存维基的台式机的维基同步你的书签。"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"type": "text/vnd.tiddlywiki",
"subtitle": "Save your work",
"footer": "<$button message=\"tm-close-tiddler\">关闭</$button>",
"help": "https://tiddlywiki.com/static/SavingChanges.html",
"text": "您对此 wiki 的变更需被保存为 ~TiddlyWiki HTML 文件。\n\n!!! 桌面版浏览器\n\n# 从''文件''菜单点选 ''另存为''\n# 选定文件名及保存位置\n#* 某些浏览器依然需要明确指定文件格式为 ''Webpage, HTML only'' 或类似的。\n# 关闭此页签\n\n!!! 智能手机版浏览器\n\n# 为此页建立书签\n#* 若您已设置 iCloud 或 Google 同步,该书签将自动与之前开启及保存于您电脑的书签同步。\n# 关闭此页签\n\n//若您再次于 Mobile Safari 开启该书签,将会再看到此信息。若要继续使用该文件,只需点击下列 ''关闭'' 按钮//\n"
},
"$:/config/NewJournal/Title": {
"title": "$:/config/NewJournal/Title",
"text": "YYYY年0MM月0DD日"
},
"$:/config/NewJournal/Text": {
"title": "$:/config/NewJournal/Text",
"text": ""
},
"$:/config/NewJournal/Tags": {
"title": "$:/config/NewJournal/Tags",
"text": "日志\n"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "已保存 wiki"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "开始保存 wiki"
},
"$:/language/Notifications/CopiedToClipboard/Succeeded": {
"title": "$:/language/Notifications/CopiedToClipboard/Succeeded",
"text": "已复制到剪贴板!"
},
"$:/language/Notifications/CopiedToClipboard/Failed": {
"title": "$:/language/Notifications/CopiedToClipboard/Failed",
"text": "无法复制到剪贴板!"
},
"$:/language/Search/DefaultResults/Caption": {
"title": "$:/language/Search/DefaultResults/Caption",
"text": "列表"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "筛选"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "以[[筛选表达式|https://tiddlywiki.com/static/Filters.html]]查找"
},
"$:/language/Search/Filter/Matches": {
"title": "$:/language/Search/Filter/Matches",
"text": "//<small><<resultCount>> 个条目符合条件</small>//"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><<resultCount>> 个条目符合条件</small>//"
},
"$:/language/Search/Matches/All": {
"title": "$:/language/Search/Matches/All",
"text": "所有匹配:"
},
"$:/language/Search/Matches/Title": {
"title": "$:/language/Search/Matches/Title",
"text": "条目名称匹配:"
},
"$:/language/Search/Search": {
"title": "$:/language/Search/Search",
"text": "查找"
},
"$:/language/Search/Search/TooShort": {
"title": "$:/language/Search/Search/TooShort",
"text": "查找文本太短"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "默认"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "查找默认条目"
},
"$:/language/Search/Shadows/Matches": {
"title": "$:/language/Search/Shadows/Matches",
"text": "//<small><<resultCount>> 个条目符合条件</small>//"
},
"$:/language/Search/Standard/Caption": {
"title": "$:/language/Search/Standard/Caption",
"text": "标准"
},
"$:/language/Search/Standard/Hint": {
"title": "$:/language/Search/Standard/Hint",
"text": "查找一般条目"
},
"$:/language/Search/Standard/Matches": {
"title": "$:/language/Search/Standard/Matches",
"text": "//<small><<resultCount>> 个条目符合条件</small>//"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "系统"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "查找系统条目"
},
"$:/language/Search/System/Matches": {
"title": "$:/language/Search/System/Matches",
"text": "//<small><<resultCount>> 个条目符合条件</small>//"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "全部"
},
"$:/language/SideBar/Contents/Caption": {
"title": "$:/language/SideBar/Contents/Caption",
"text": "目录"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "草稿"
},
"$:/language/SideBar/Explorer/Caption": {
"title": "$:/language/SideBar/Explorer/Caption",
"text": "探索"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "缺失"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "更多"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "开启"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "孤立"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "最近"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "默认"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "系统"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "标签"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "未设标签"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "工具"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "类型"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "一个非线性的网页式笔记"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "我的 ~TiddlyWiki"
},
"$:/language/Snippets/ListByTag": {
"title": "$:/language/Snippets/ListByTag",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "依标签筛选的条目列表",
"text": "<<list-links \"[tag[task]sort[title]]\">>\n"
},
"$:/language/Snippets/MacroDefinition": {
"title": "$:/language/Snippets/MacroDefinition",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "宏的定义",
"text": "\\define macroName(param1:\"默认值\",param2)\n宏的内容\n\\end\n"
},
"$:/language/Snippets/Table4x3": {
"title": "$:/language/Snippets/Table4x3",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "4 x 3 的表格",
"text": "|! | !一 | !二 | !三 | !四 |\n|! 1| | | | |\n|! 2| | | | |\n|! 3 | | | | |\n"
},
"$:/language/Snippets/TableOfContents": {
"title": "$:/language/Snippets/TableOfContents",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "目录",
"text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
},
"$:/language/ThemeTweaks/ThemeTweaks": {
"title": "$:/language/ThemeTweaks/ThemeTweaks",
"text": "主题调整"
},
"$:/language/ThemeTweaks/ThemeTweaks/Hint": {
"title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
"text": "您可以调整 ''Vanilla'' 布景主题的某些样貌。"
},
"$:/language/ThemeTweaks/Options": {
"title": "$:/language/ThemeTweaks/Options",
"text": "选项"
},
"$:/language/ThemeTweaks/Options/SidebarLayout": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout",
"text": "侧边栏布局"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
"text": "固定故事,浮动侧边栏"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
"text": "浮动故事,固定侧边栏"
},
"$:/language/ThemeTweaks/Options/StickyTitles": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles",
"text": "置顶标题"
},
"$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
"text": "使条目名称\"黏着\"于浏览器窗口的顶端"
},
"$:/language/ThemeTweaks/Options/CodeWrapping": {
"title": "$:/language/ThemeTweaks/Options/CodeWrapping",
"text": "在代码区块中折行"
},
"$:/language/ThemeTweaks/Settings": {
"title": "$:/language/ThemeTweaks/Settings",
"text": "设置"
},
"$:/language/ThemeTweaks/Settings/FontFamily": {
"title": "$:/language/ThemeTweaks/Settings/FontFamily",
"text": "字型"
},
"$:/language/ThemeTweaks/Settings/CodeFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
"text": "代码字型"
},
"$:/language/ThemeTweaks/Settings/EditorFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/EditorFontFamily",
"text": "编辑器字型"
},
"$:/language/ThemeTweaks/Settings/BackgroundImage": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
"text": "页面背景图像"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
"text": "页面背景图像附属"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
"text": "随条目卷动"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
"text": "固定于窗口"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
"text": "页面背景图像大小"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
"text": "自动"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
"text": "覆盖"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
"text": "包含"
},
"$:/language/ThemeTweaks/Metrics": {
"title": "$:/language/ThemeTweaks/Metrics",
"text": "大小"
},
"$:/language/ThemeTweaks/Metrics/FontSize": {
"title": "$:/language/ThemeTweaks/Metrics/FontSize",
"text": "字体大小"
},
"$:/language/ThemeTweaks/Metrics/LineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/LineHeight",
"text": "行高"
},
"$:/language/ThemeTweaks/Metrics/BodyFontSize": {
"title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
"text": "条目本文的字体大小"
},
"$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
"text": "条目本文的行高"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
"text": "故事左侧位置"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
"text": "故事河(条目区)的左边缘与页面左端的间距"
},
"$:/language/ThemeTweaks/Metrics/StoryTop": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop",
"text": "故事顶端位置"
},
"$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
"text": "故事河(条目区)的上边缘与页面顶端的间距"
},
"$:/language/ThemeTweaks/Metrics/StoryRight": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight",
"text": "故事右侧位置"
},
"$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
"text": "侧边栏的左边缘与页面左端的间距"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
"text": "故事的宽度"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
"text": "故事河的整体宽度"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
"text": "条目宽度"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
"text": "在故事河内"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
"text": "侧边栏中断点"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
"text": "故事河和侧边栏会并排显示的最小页面宽度"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
"text": "侧边栏宽度"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
"text": "在浮动-固定布局中,侧边栏的宽度"
},
"$:/language/TiddlerInfo/Advanced/Caption": {
"title": "$:/language/TiddlerInfo/Advanced/Caption",
"text": "高级"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
"text": "无信息"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
"text": "插件明细"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
"text": "此插件包含以下预设条目:"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
"text": "默认条目状态"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
"text": "<$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> 不是一个默认条目"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
"text": "<$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> 是一个默认条目"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
"text": "此条目定义于插件 <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
"text": "已被一般条目覆写"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "栏位"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "列表"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "此条目无指定列表"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "被列于"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "此条目未出现于其他条目的列表中"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "反向链接"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "无条目链接至此"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "子条目"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "无任何条目以此条目之标题为标签"
},
"$:/language/TiddlerInfo/Tools/Caption": {
"title": "$:/language/TiddlerInfo/Tools/Caption",
"text": "工具"
},
"$:/language/Docs/Types/application/javascript": {
"title": "$:/language/Docs/Types/application/javascript",
"description": "JavaScript 源码",
"name": "application/javascript",
"group": "开发者"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON 数据",
"name": "application/json",
"group": "开发者"
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "数据字典",
"name": "application/x-tiddler-dictionary",
"group": "开发者"
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF 图像",
"name": "image/gif",
"group": "图像"
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG 图像",
"name": "image/jpeg",
"group": "图像"
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG 图像",
"name": "image/png",
"group": "图像"
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "结构式矢量图",
"name": "image/svg+xml",
"group": "图像"
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "图标",
"name": "image/x-icon",
"group": "图像"
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "静态样式",
"name": "text/css",
"group": "开发者"
},
"$:/language/Docs/Types/text/html": {
"title": "$:/language/Docs/Types/text/html",
"description": "HTML 标记",
"name": "text/html",
"group": "文本"
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "纯文本",
"name": "text/plain",
"group": "文本"
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "TiddlyWiki 5",
"name": "text/vnd.tiddlywiki",
"group": "文本"
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "TiddlyWiki 2",
"name": "text/x-tiddlywiki",
"group": "文本"
}
}
}
此为 TiddlyWiki 介面与信息的简体中文翻译插件
目前由 {{$:/languages/zh-Hans!!author}} 维护
此為 TiddlyWiki 介面與訊息的簡體中文翻譯插件
目前由 {{$:/languages/zh-Hans!!author}} 維護
{
"tiddlers": {
"$:/language/Buttons/AdvancedSearch/Caption": {
"title": "$:/language/Buttons/AdvancedSearch/Caption",
"text": "進階搜尋"
},
"$:/language/Buttons/AdvancedSearch/Hint": {
"title": "$:/language/Buttons/AdvancedSearch/Hint",
"text": "進階搜尋"
},
"$:/language/Buttons/Cancel/Caption": {
"title": "$:/language/Buttons/Cancel/Caption",
"text": "取消"
},
"$:/language/Buttons/Cancel/Hint": {
"title": "$:/language/Buttons/Cancel/Hint",
"text": "放棄對此條目的更改"
},
"$:/language/Buttons/Clone/Caption": {
"title": "$:/language/Buttons/Clone/Caption",
"text": "複製"
},
"$:/language/Buttons/Clone/Hint": {
"title": "$:/language/Buttons/Clone/Hint",
"text": "複製此條目"
},
"$:/language/Buttons/Close/Caption": {
"title": "$:/language/Buttons/Close/Caption",
"text": "關閉"
},
"$:/language/Buttons/Close/Hint": {
"title": "$:/language/Buttons/Close/Hint",
"text": "關閉此條目"
},
"$:/language/Buttons/CloseAll/Caption": {
"title": "$:/language/Buttons/CloseAll/Caption",
"text": "全部關閉"
},
"$:/language/Buttons/CloseAll/Hint": {
"title": "$:/language/Buttons/CloseAll/Hint",
"text": "關閉所有條目"
},
"$:/language/Buttons/CloseOthers/Caption": {
"title": "$:/language/Buttons/CloseOthers/Caption",
"text": "關閉其他"
},
"$:/language/Buttons/CloseOthers/Hint": {
"title": "$:/language/Buttons/CloseOthers/Hint",
"text": "關閉其他條目"
},
"$:/language/Buttons/ControlPanel/Caption": {
"title": "$:/language/Buttons/ControlPanel/Caption",
"text": "控制台"
},
"$:/language/Buttons/ControlPanel/Hint": {
"title": "$:/language/Buttons/ControlPanel/Hint",
"text": "開啟控制台"
},
"$:/language/Buttons/CopyToClipboard/Caption": {
"title": "$:/language/Buttons/CopyToClipboard/Caption",
"text": "複製到剪貼簿"
},
"$:/language/Buttons/CopyToClipboard/Hint": {
"title": "$:/language/Buttons/CopyToClipboard/Hint",
"text": "將此文字複製到剪貼簿"
},
"$:/language/Buttons/Delete/Caption": {
"title": "$:/language/Buttons/Delete/Caption",
"text": "刪除"
},
"$:/language/Buttons/Delete/Hint": {
"title": "$:/language/Buttons/Delete/Hint",
"text": "刪除此條目"
},
"$:/language/Buttons/Edit/Caption": {
"title": "$:/language/Buttons/Edit/Caption",
"text": "編輯"
},
"$:/language/Buttons/Edit/Hint": {
"title": "$:/language/Buttons/Edit/Hint",
"text": "編輯此條目"
},
"$:/language/Buttons/Encryption/Caption": {
"title": "$:/language/Buttons/Encryption/Caption",
"text": "加密"
},
"$:/language/Buttons/Encryption/Hint": {
"title": "$:/language/Buttons/Encryption/Hint",
"text": "設定或清除儲存此維基的密碼"
},
"$:/language/Buttons/Encryption/ClearPassword/Caption": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
"text": "清除密碼"
},
"$:/language/Buttons/Encryption/ClearPassword/Hint": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
"text": "清除密碼且不加密儲存此維基"
},
"$:/language/Buttons/Encryption/SetPassword/Caption": {
"title": "$:/language/Buttons/Encryption/SetPassword/Caption",
"text": "設定密碼"
},
"$:/language/Buttons/Encryption/SetPassword/Hint": {
"title": "$:/language/Buttons/Encryption/SetPassword/Hint",
"text": "設定加密儲存此維基的密碼"
},
"$:/language/Buttons/ExportPage/Caption": {
"title": "$:/language/Buttons/ExportPage/Caption",
"text": "導出所有條目"
},
"$:/language/Buttons/ExportPage/Hint": {
"title": "$:/language/Buttons/ExportPage/Hint",
"text": "導出所有條目"
},
"$:/language/Buttons/ExportTiddler/Caption": {
"title": "$:/language/Buttons/ExportTiddler/Caption",
"text": "導出此條目"
},
"$:/language/Buttons/ExportTiddler/Hint": {
"title": "$:/language/Buttons/ExportTiddler/Hint",
"text": "導出此條目"
},
"$:/language/Buttons/ExportTiddlers/Caption": {
"title": "$:/language/Buttons/ExportTiddlers/Caption",
"text": "導出條目"
},
"$:/language/Buttons/ExportTiddlers/Hint": {
"title": "$:/language/Buttons/ExportTiddlers/Hint",
"text": "導出條目"
},
"$:/language/Buttons/SidebarSearch/Hint": {
"title": "$:/language/Buttons/SidebarSearch/Hint",
"text": "選擇側邊欄的搜尋欄位"
},
"$:/language/Buttons/Fold/Caption": {
"title": "$:/language/Buttons/Fold/Caption",
"text": "收合條目"
},
"$:/language/Buttons/Fold/Hint": {
"title": "$:/language/Buttons/Fold/Hint",
"text": "收合此條目的內容"
},
"$:/language/Buttons/Fold/FoldBar/Caption": {
"title": "$:/language/Buttons/Fold/FoldBar/Caption",
"text": "收合條"
},
"$:/language/Buttons/Fold/FoldBar/Hint": {
"title": "$:/language/Buttons/Fold/FoldBar/Hint",
"text": "可選的收合與展開條目的長條按鈕"
},
"$:/language/Buttons/Unfold/Caption": {
"title": "$:/language/Buttons/Unfold/Caption",
"text": "展開條目"
},
"$:/language/Buttons/Unfold/Hint": {
"title": "$:/language/Buttons/Unfold/Hint",
"text": "展開此條目的內容"
},
"$:/language/Buttons/FoldOthers/Caption": {
"title": "$:/language/Buttons/FoldOthers/Caption",
"text": "收合其他條目"
},
"$:/language/Buttons/FoldOthers/Hint": {
"title": "$:/language/Buttons/FoldOthers/Hint",
"text": "收合其他已開啟條目的內容"
},
"$:/language/Buttons/FoldAll/Caption": {
"title": "$:/language/Buttons/FoldAll/Caption",
"text": "收合所有條目"
},
"$:/language/Buttons/FoldAll/Hint": {
"title": "$:/language/Buttons/FoldAll/Hint",
"text": "收合所有已開啟條目的內容"
},
"$:/language/Buttons/UnfoldAll/Caption": {
"title": "$:/language/Buttons/UnfoldAll/Caption",
"text": "展開所有條目"
},
"$:/language/Buttons/UnfoldAll/Hint": {
"title": "$:/language/Buttons/UnfoldAll/Hint",
"text": "展開所有已開啟條目的內容"
},
"$:/language/Buttons/FullScreen/Caption": {
"title": "$:/language/Buttons/FullScreen/Caption",
"text": "全螢幕"
},
"$:/language/Buttons/FullScreen/Hint": {
"title": "$:/language/Buttons/FullScreen/Hint",
"text": "進入或離開全螢幕模式"
},
"$:/language/Buttons/Help/Caption": {
"title": "$:/language/Buttons/Help/Caption",
"text": "說明"
},
"$:/language/Buttons/Help/Hint": {
"title": "$:/language/Buttons/Help/Hint",
"text": "顯示說明中心"
},
"$:/language/Buttons/Home/Caption": {
"title": "$:/language/Buttons/Home/Caption",
"text": "首頁"
},
"$:/language/Buttons/Home/Hint": {
"title": "$:/language/Buttons/Home/Hint",
"text": "開啟首頁條目"
},
"$:/language/Buttons/Import/Caption": {
"title": "$:/language/Buttons/Import/Caption",
"text": "導入"
},
"$:/language/Buttons/Import/Hint": {
"title": "$:/language/Buttons/Import/Hint",
"text": "導入許多類型的檔案包括文字、圖像、TiddlyWiki 或 JSON"
},
"$:/language/Buttons/Info/Caption": {
"title": "$:/language/Buttons/Info/Caption",
"text": "資訊"
},
"$:/language/Buttons/Info/Hint": {
"title": "$:/language/Buttons/Info/Hint",
"text": "顯示此條目的資訊"
},
"$:/language/Buttons/Language/Caption": {
"title": "$:/language/Buttons/Language/Caption",
"text": "語言"
},
"$:/language/Buttons/Language/Hint": {
"title": "$:/language/Buttons/Language/Hint",
"text": "選擇使用者介面語言"
},
"$:/language/Buttons/Manager/Caption": {
"title": "$:/language/Buttons/Manager/Caption",
"text": "條目管理器"
},
"$:/language/Buttons/Manager/Hint": {
"title": "$:/language/Buttons/Manager/Hint",
"text": "開啟條目管理器"
},
"$:/language/Buttons/More/Caption": {
"title": "$:/language/Buttons/More/Caption",
"text": "更多"
},
"$:/language/Buttons/More/Hint": {
"title": "$:/language/Buttons/More/Hint",
"text": "更多動作"
},
"$:/language/Buttons/NewHere/Caption": {
"title": "$:/language/Buttons/NewHere/Caption",
"text": "新增子條目"
},
"$:/language/Buttons/NewHere/Hint": {
"title": "$:/language/Buttons/NewHere/Hint",
"text": "建立一個標籤為此條目名稱的新條目"
},
"$:/language/Buttons/NewJournal/Caption": {
"title": "$:/language/Buttons/NewJournal/Caption",
"text": "新增日誌"
},
"$:/language/Buttons/NewJournal/Hint": {
"title": "$:/language/Buttons/NewJournal/Hint",
"text": "建立一個新的日誌條目"
},
"$:/language/Buttons/NewJournalHere/Caption": {
"title": "$:/language/Buttons/NewJournalHere/Caption",
"text": "新增子日誌"
},
"$:/language/Buttons/NewJournalHere/Hint": {
"title": "$:/language/Buttons/NewJournalHere/Hint",
"text": "建立一個標籤含此條目名稱的新日誌條目"
},
"$:/language/Buttons/NewImage/Caption": {
"title": "$:/language/Buttons/NewImage/Caption",
"text": "新增圖像"
},
"$:/language/Buttons/NewImage/Hint": {
"title": "$:/language/Buttons/NewImage/Hint",
"text": "建立一個新的圖像條目"
},
"$:/language/Buttons/NewMarkdown/Caption": {
"title": "$:/language/Buttons/NewMarkdown/Caption",
"text": "新增 Markdown 條目"
},
"$:/language/Buttons/NewMarkdown/Hint": {
"title": "$:/language/Buttons/NewMarkdown/Hint",
"text": "建立一個新的 Markdown 條目"
},
"$:/language/Buttons/NewTiddler/Caption": {
"title": "$:/language/Buttons/NewTiddler/Caption",
"text": "新增條目"
},
"$:/language/Buttons/NewTiddler/Hint": {
"title": "$:/language/Buttons/NewTiddler/Hint",
"text": "建立一個新的條目"
},
"$:/language/Buttons/OpenWindow/Caption": {
"title": "$:/language/Buttons/OpenWindow/Caption",
"text": "開啟於新視窗"
},
"$:/language/Buttons/OpenWindow/Hint": {
"title": "$:/language/Buttons/OpenWindow/Hint",
"text": "在新視窗中開啟條目"
},
"$:/language/Buttons/Palette/Caption": {
"title": "$:/language/Buttons/Palette/Caption",
"text": "調色盤"
},
"$:/language/Buttons/Palette/Hint": {
"title": "$:/language/Buttons/Palette/Hint",
"text": "選擇調色盤"
},
"$:/language/Buttons/Permalink/Caption": {
"title": "$:/language/Buttons/Permalink/Caption",
"text": "引用連結"
},
"$:/language/Buttons/Permalink/Hint": {
"title": "$:/language/Buttons/Permalink/Hint",
"text": "設定瀏覽器網址列為直接連結到此條目"
},
"$:/language/Buttons/Permaview/Caption": {
"title": "$:/language/Buttons/Permaview/Caption",
"text": "固定連結"
},
"$:/language/Buttons/Permaview/Hint": {
"title": "$:/language/Buttons/Permaview/Hint",
"text": "設定瀏覽器網址列為直接連結到當前所有已開啟條目"
},
"$:/language/Buttons/Print/Caption": {
"title": "$:/language/Buttons/Print/Caption",
"text": "列印頁面"
},
"$:/language/Buttons/Print/Hint": {
"title": "$:/language/Buttons/Print/Hint",
"text": "列印當前頁面"
},
"$:/language/Buttons/Refresh/Caption": {
"title": "$:/language/Buttons/Refresh/Caption",
"text": "重新整理"
},
"$:/language/Buttons/Refresh/Hint": {
"title": "$:/language/Buttons/Refresh/Hint",
"text": "執行維基的完全刷新"
},
"$:/language/Buttons/Save/Caption": {
"title": "$:/language/Buttons/Save/Caption",
"text": "確定"
},
"$:/language/Buttons/Save/Hint": {
"title": "$:/language/Buttons/Save/Hint",
"text": "確定對此條目的更改"
},
"$:/language/Buttons/SaveWiki/Caption": {
"title": "$:/language/Buttons/SaveWiki/Caption",
"text": "儲存變更"
},
"$:/language/Buttons/SaveWiki/Hint": {
"title": "$:/language/Buttons/SaveWiki/Hint",
"text": "儲存變更"
},
"$:/language/Buttons/StoryView/Caption": {
"title": "$:/language/Buttons/StoryView/Caption",
"text": "檢視模式"
},
"$:/language/Buttons/StoryView/Hint": {
"title": "$:/language/Buttons/StoryView/Hint",
"text": "選擇檢視條目的視覺效果"
},
"$:/language/Buttons/HideSideBar/Caption": {
"title": "$:/language/Buttons/HideSideBar/Caption",
"text": "隱藏側邊欄"
},
"$:/language/Buttons/HideSideBar/Hint": {
"title": "$:/language/Buttons/HideSideBar/Hint",
"text": "隱藏側邊欄"
},
"$:/language/Buttons/ShowSideBar/Caption": {
"title": "$:/language/Buttons/ShowSideBar/Caption",
"text": "顯示側邊欄"
},
"$:/language/Buttons/ShowSideBar/Hint": {
"title": "$:/language/Buttons/ShowSideBar/Hint",
"text": "顯示側邊欄"
},
"$:/language/Buttons/TagManager/Caption": {
"title": "$:/language/Buttons/TagManager/Caption",
"text": "標籤管理"
},
"$:/language/Buttons/TagManager/Hint": {
"title": "$:/language/Buttons/TagManager/Hint",
"text": "標籤管理"
},
"$:/language/Buttons/Timestamp/Caption": {
"title": "$:/language/Buttons/Timestamp/Caption",
"text": "時間戳記"
},
"$:/language/Buttons/Timestamp/Hint": {
"title": "$:/language/Buttons/Timestamp/Hint",
"text": "選擇修改是否更新時間戳記"
},
"$:/language/Buttons/Timestamp/On/Caption": {
"title": "$:/language/Buttons/Timestamp/On/Caption",
"text": "時間戳記開啟"
},
"$:/language/Buttons/Timestamp/On/Hint": {
"title": "$:/language/Buttons/Timestamp/On/Hint",
"text": "條目被修改時,更新時間戳記"
},
"$:/language/Buttons/Timestamp/Off/Caption": {
"title": "$:/language/Buttons/Timestamp/Off/Caption",
"text": "時間戳記關閉"
},
"$:/language/Buttons/Timestamp/Off/Hint": {
"title": "$:/language/Buttons/Timestamp/Off/Hint",
"text": "條目被修改時,不更新時間戳記"
},
"$:/language/Buttons/Theme/Caption": {
"title": "$:/language/Buttons/Theme/Caption",
"text": "佈景主題"
},
"$:/language/Buttons/Theme/Hint": {
"title": "$:/language/Buttons/Theme/Hint",
"text": "選擇佈景主題"
},
"$:/language/Buttons/Bold/Caption": {
"title": "$:/language/Buttons/Bold/Caption",
"text": "粗體"
},
"$:/language/Buttons/Bold/Hint": {
"title": "$:/language/Buttons/Bold/Hint",
"text": "套用粗體格式於所選文字"
},
"$:/language/Buttons/Clear/Caption": {
"title": "$:/language/Buttons/Clear/Caption",
"text": "清除"
},
"$:/language/Buttons/Clear/Hint": {
"title": "$:/language/Buttons/Clear/Hint",
"text": "清除圖像為純色"
},
"$:/language/Buttons/EditorHeight/Caption": {
"title": "$:/language/Buttons/EditorHeight/Caption",
"text": "編輯器高度"
},
"$:/language/Buttons/EditorHeight/Caption/Auto": {
"title": "$:/language/Buttons/EditorHeight/Caption/Auto",
"text": "自動調整高度以適合內容"
},
"$:/language/Buttons/EditorHeight/Caption/Fixed": {
"title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
"text": "固定高度︰"
},
"$:/language/Buttons/EditorHeight/Hint": {
"title": "$:/language/Buttons/EditorHeight/Hint",
"text": "選擇文字編輯器的高度"
},
"$:/language/Buttons/Excise/Caption": {
"title": "$:/language/Buttons/Excise/Caption",
"text": "剪切"
},
"$:/language/Buttons/Excise/Caption/Excise": {
"title": "$:/language/Buttons/Excise/Caption/Excise",
"text": "執行剪切"
},
"$:/language/Buttons/Excise/Caption/MacroName": {
"title": "$:/language/Buttons/Excise/Caption/MacroName",
"text": "巨集名稱︰"
},
"$:/language/Buttons/Excise/Caption/NewTitle": {
"title": "$:/language/Buttons/Excise/Caption/NewTitle",
"text": "新條目的名稱︰"
},
"$:/language/Buttons/Excise/Caption/Replace": {
"title": "$:/language/Buttons/Excise/Caption/Replace",
"text": "替換剪切的文本為:"
},
"$:/language/Buttons/Excise/Caption/Replace/Macro": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
"text": "巨集"
},
"$:/language/Buttons/Excise/Caption/Replace/Link": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Link",
"text": "鏈接"
},
"$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
"text": "嵌入"
},
"$:/language/Buttons/Excise/Caption/Tag": {
"title": "$:/language/Buttons/Excise/Caption/Tag",
"text": "將新條目的標籤設為此條目的名稱"
},
"$:/language/Buttons/Excise/Caption/TiddlerExists": {
"title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
"text": "警示:條目已經存在"
},
"$:/language/Buttons/Excise/Hint": {
"title": "$:/language/Buttons/Excise/Hint",
"text": "剪切所選文字到一個新條目"
},
"$:/language/Buttons/Heading1/Caption": {
"title": "$:/language/Buttons/Heading1/Caption",
"text": "標題 1"
},
"$:/language/Buttons/Heading1/Hint": {
"title": "$:/language/Buttons/Heading1/Hint",
"text": "套用標題級別 1 的格式於包含所選文字的列"
},
"$:/language/Buttons/Heading2/Caption": {
"title": "$:/language/Buttons/Heading2/Caption",
"text": "標題 2"
},
"$:/language/Buttons/Heading2/Hint": {
"title": "$:/language/Buttons/Heading2/Hint",
"text": "套用標題級別 2 的格式於包含所選文字的列"
},
"$:/language/Buttons/Heading3/Caption": {
"title": "$:/language/Buttons/Heading3/Caption",
"text": "標題 3"
},
"$:/language/Buttons/Heading3/Hint": {
"title": "$:/language/Buttons/Heading3/Hint",
"text": "套用標題級別 3 的格式於包含所選文字的列"
},
"$:/language/Buttons/Heading4/Caption": {
"title": "$:/language/Buttons/Heading4/Caption",
"text": "標題 4"
},
"$:/language/Buttons/Heading4/Hint": {
"title": "$:/language/Buttons/Heading4/Hint",
"text": "套用標題級別 4 的格式於包含所選文字的列"
},
"$:/language/Buttons/Heading5/Caption": {
"title": "$:/language/Buttons/Heading5/Caption",
"text": "標題 5"
},
"$:/language/Buttons/Heading5/Hint": {
"title": "$:/language/Buttons/Heading5/Hint",
"text": "套用標題級別 5 的格式於包含所選文字的列"
},
"$:/language/Buttons/Heading6/Caption": {
"title": "$:/language/Buttons/Heading6/Caption",
"text": "標題 6"
},
"$:/language/Buttons/Heading6/Hint": {
"title": "$:/language/Buttons/Heading6/Hint",
"text": "套用標題級別 6 的格式於包含所選文字的列"
},
"$:/language/Buttons/Italic/Caption": {
"title": "$:/language/Buttons/Italic/Caption",
"text": "斜體"
},
"$:/language/Buttons/Italic/Hint": {
"title": "$:/language/Buttons/Italic/Hint",
"text": "套用斜體格式於所選文字"
},
"$:/language/Buttons/LineWidth/Caption": {
"title": "$:/language/Buttons/LineWidth/Caption",
"text": "線寬"
},
"$:/language/Buttons/LineWidth/Hint": {
"title": "$:/language/Buttons/LineWidth/Hint",
"text": "設定繪畫的線條寬度"
},
"$:/language/Buttons/Link/Caption": {
"title": "$:/language/Buttons/Link/Caption",
"text": "鏈接"
},
"$:/language/Buttons/Link/Hint": {
"title": "$:/language/Buttons/Link/Hint",
"text": "建立維基文字鏈接"
},
"$:/language/Buttons/Linkify/Caption": {
"title": "$:/language/Buttons/Linkify/Caption",
"text": "維基鏈接"
},
"$:/language/Buttons/Linkify/Hint": {
"title": "$:/language/Buttons/Linkify/Hint",
"text": "套用維基鏈接於所選文字"
},
"$:/language/Buttons/ListBullet/Caption": {
"title": "$:/language/Buttons/ListBullet/Caption",
"text": "符號清單"
},
"$:/language/Buttons/ListBullet/Hint": {
"title": "$:/language/Buttons/ListBullet/Hint",
"text": "套用符號清單格式於包含所選文字的列"
},
"$:/language/Buttons/ListNumber/Caption": {
"title": "$:/language/Buttons/ListNumber/Caption",
"text": "數字清單"
},
"$:/language/Buttons/ListNumber/Hint": {
"title": "$:/language/Buttons/ListNumber/Hint",
"text": "套用數字清單格式於包含所選文字的列"
},
"$:/language/Buttons/MonoBlock/Caption": {
"title": "$:/language/Buttons/MonoBlock/Caption",
"text": "等寬區塊"
},
"$:/language/Buttons/MonoBlock/Hint": {
"title": "$:/language/Buttons/MonoBlock/Hint",
"text": "套用等寬區塊格式於包含所選文字的列"
},
"$:/language/Buttons/MonoLine/Caption": {
"title": "$:/language/Buttons/MonoLine/Caption",
"text": "等寬"
},
"$:/language/Buttons/MonoLine/Hint": {
"title": "$:/language/Buttons/MonoLine/Hint",
"text": "套用等寬字元格式於所選文字"
},
"$:/language/Buttons/Opacity/Caption": {
"title": "$:/language/Buttons/Opacity/Caption",
"text": "不透明度"
},
"$:/language/Buttons/Opacity/Hint": {
"title": "$:/language/Buttons/Opacity/Hint",
"text": "設定繪畫的不透明度"
},
"$:/language/Buttons/Paint/Caption": {
"title": "$:/language/Buttons/Paint/Caption",
"text": "繪畫顏色"
},
"$:/language/Buttons/Paint/Hint": {
"title": "$:/language/Buttons/Paint/Hint",
"text": "設定繪畫的顏色"
},
"$:/language/Buttons/Picture/Caption": {
"title": "$:/language/Buttons/Picture/Caption",
"text": "圖片"
},
"$:/language/Buttons/Picture/Hint": {
"title": "$:/language/Buttons/Picture/Hint",
"text": "插入圖片"
},
"$:/language/Buttons/Preview/Caption": {
"title": "$:/language/Buttons/Preview/Caption",
"text": "預覽"
},
"$:/language/Buttons/Preview/Hint": {
"title": "$:/language/Buttons/Preview/Hint",
"text": "顯示預覽窗格"
},
"$:/language/Buttons/PreviewType/Caption": {
"title": "$:/language/Buttons/PreviewType/Caption",
"text": "預覽類型"
},
"$:/language/Buttons/PreviewType/Hint": {
"title": "$:/language/Buttons/PreviewType/Hint",
"text": "選擇預覽類型"
},
"$:/language/Buttons/Quote/Caption": {
"title": "$:/language/Buttons/Quote/Caption",
"text": "引言"
},
"$:/language/Buttons/Quote/Hint": {
"title": "$:/language/Buttons/Quote/Hint",
"text": "套用引言文字格式於包含所選文字的列"
},
"$:/language/Buttons/RotateLeft/Caption": {
"title": "$:/language/Buttons/RotateLeft/Caption",
"text": "向左旋轉"
},
"$:/language/Buttons/RotateLeft/Hint": {
"title": "$:/language/Buttons/RotateLeft/Hint",
"text": "圖像向左旋轉 90 度"
},
"$:/language/Buttons/Size/Caption": {
"title": "$:/language/Buttons/Size/Caption",
"text": "圖像大小"
},
"$:/language/Buttons/Size/Caption/Height": {
"title": "$:/language/Buttons/Size/Caption/Height",
"text": "高度︰"
},
"$:/language/Buttons/Size/Caption/Resize": {
"title": "$:/language/Buttons/Size/Caption/Resize",
"text": "調整圖像的大小"
},
"$:/language/Buttons/Size/Caption/Width": {
"title": "$:/language/Buttons/Size/Caption/Width",
"text": "寬度:"
},
"$:/language/Buttons/Size/Hint": {
"title": "$:/language/Buttons/Size/Hint",
"text": "設定圖像的大小"
},
"$:/language/Buttons/Stamp/Caption": {
"title": "$:/language/Buttons/Stamp/Caption",
"text": "印記"
},
"$:/language/Buttons/Stamp/Caption/New": {
"title": "$:/language/Buttons/Stamp/Caption/New",
"text": "新增您自己的"
},
"$:/language/Buttons/Stamp/Hint": {
"title": "$:/language/Buttons/Stamp/Hint",
"text": "插入一個預配置的文字片段"
},
"$:/language/Buttons/Stamp/New/Title": {
"title": "$:/language/Buttons/Stamp/New/Title",
"text": "在選單中顯示的標題"
},
"$:/language/Buttons/Stamp/New/Text": {
"title": "$:/language/Buttons/Stamp/New/Text",
"text": "片段的文字。(記得在 `caption` 欄位中新增一個說明性的標題)。"
},
"$:/language/Buttons/Strikethrough/Caption": {
"title": "$:/language/Buttons/Strikethrough/Caption",
"text": "刪除線"
},
"$:/language/Buttons/Strikethrough/Hint": {
"title": "$:/language/Buttons/Strikethrough/Hint",
"text": "套用刪除線格式於所選文字"
},
"$:/language/Buttons/Subscript/Caption": {
"title": "$:/language/Buttons/Subscript/Caption",
"text": "下標"
},
"$:/language/Buttons/Subscript/Hint": {
"title": "$:/language/Buttons/Subscript/Hint",
"text": "套用下標格式於所選文字"
},
"$:/language/Buttons/Superscript/Caption": {
"title": "$:/language/Buttons/Superscript/Caption",
"text": "上標"
},
"$:/language/Buttons/Superscript/Hint": {
"title": "$:/language/Buttons/Superscript/Hint",
"text": "套用上標格式於所選文字"
},
"$:/language/Buttons/ToggleSidebar/Hint": {
"title": "$:/language/Buttons/ToggleSidebar/Hint",
"text": "切換顯示或隱藏側邊欄"
},
"$:/language/Buttons/Transcludify/Caption": {
"title": "$:/language/Buttons/Transcludify/Caption",
"text": "嵌入"
},
"$:/language/Buttons/Transcludify/Hint": {
"title": "$:/language/Buttons/Transcludify/Hint",
"text": "套用嵌入於所選文字"
},
"$:/language/Buttons/Underline/Caption": {
"title": "$:/language/Buttons/Underline/Caption",
"text": "底線"
},
"$:/language/Buttons/Underline/Hint": {
"title": "$:/language/Buttons/Underline/Hint",
"text": "套用底線格式於所選文字"
},
"$:/config/Search/MinLength": {
"title": "$:/config/Search/MinLength",
"text": "1"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "進階"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "關於此 TiddlyWiki 的內部資訊"
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "視覺外觀"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "自訂您的 TiddlyWiki 外觀。"
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "動畫持續時間"
},
"$:/language/ControlPanel/Basics/AutoFocus/Prompt": {
"title": "$:/language/ControlPanel/Basics/AutoFocus/Prompt",
"text": "編輯條目時的預設自動停留欄位"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "基本"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "標題含空白時請使用 [[雙中括弧]],或者您可用 <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">保留開啟中的條目順序</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "首頁"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "預設開啟的條目"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "您好!當前的語言:"
},
"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
"text": "新日誌條目的標籤"
},
"$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
"text": "新日誌條目的內容"
},
"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
"text": "新日誌條目的名稱"
},
"$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt",
"text": "新條目的標籤"
},
"$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt",
"text": "新條目的名稱"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "被覆寫的預設條目數量"
},
"$:/language/ControlPanel/Basics/RemoveTags": {
"title": "$:/language/ControlPanel/Basics/RemoveTags",
"text": "更新到當前格式"
},
"$:/language/ControlPanel/Basics/RemoveTags/Hint": {
"title": "$:/language/ControlPanel/Basics/RemoveTags/Hint",
"text": "將標籤設定更新為最新格式"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "預設條目數量"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "副標題"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "系統條目數量"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "標籤數量"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "一般條目數量"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "標題"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "編輯者署名"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "~TiddlyWiki 版本"
},
"$:/language/ControlPanel/EditorTypes/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Caption",
"text": "編輯器類型"
},
"$:/language/ControlPanel/EditorTypes/Editor/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
"text": "編輯器"
},
"$:/language/ControlPanel/EditorTypes/Hint": {
"title": "$:/language/ControlPanel/EditorTypes/Hint",
"text": "這些條目決定使用哪個編輯器來編輯特定條目類型。"
},
"$:/language/ControlPanel/EditorTypes/Type/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
"text": "類型"
},
"$:/language/ControlPanel/Info/Caption": {
"title": "$:/language/ControlPanel/Info/Caption",
"text": "資訊"
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"text": "有關此 TiddlyWiki 的資訊"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
"text": "在此輸入快捷鍵"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
"text": "新增快捷鍵"
},
"$:/language/ControlPanel/KeyboardShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
"text": "快捷鍵"
},
"$:/language/ControlPanel/KeyboardShortcuts/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
"text": "管理鍵盤快捷鍵分配"
},
"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
"text": "尚無指定快捷鍵"
},
"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
"text": "刪除快捷鍵"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
"text": "所有平臺"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
"text": "僅 Macintosh 平臺"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
"text": "僅非 Macintosh 平臺"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
"text": "僅 Linux 平臺"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
"text": "僅非 Linux 平臺"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
"text": "僅 Windows 平臺"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
"text": "僅非 Windows 平臺"
},
"$:/language/ControlPanel/LayoutSwitcher/Caption": {
"title": "$:/language/ControlPanel/LayoutSwitcher/Caption",
"text": "版面"
},
"$:/language/ControlPanel/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/LoadedModules/Caption",
"text": "已載入的模組"
},
"$:/language/ControlPanel/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/LoadedModules/Hint",
"text": "這些是當前已載入的模組之源碼條目。斜體的模組則無源碼條目,通常是因為它們是在引導過程中設置。"
},
"$:/language/ControlPanel/Palette/Caption": {
"title": "$:/language/ControlPanel/Palette/Caption",
"text": "調色盤"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
"text": "複製"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
"text": "建議您修改前先複製此預設調色盤"
},
"$:/language/ControlPanel/Palette/Editor/Delete/Hint": {
"title": "$:/language/ControlPanel/Palette/Editor/Delete/Hint",
"text": "從當前調色盤中刪除此項"
},
"$:/language/ControlPanel/Palette/Editor/Names/External/Show": {
"title": "$:/language/ControlPanel/Palette/Editor/Names/External/Show",
"text": "顯示不屬於當前調色盤的顏色名稱"
},
"$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
"text": "此預設調色盤已被修改過"
},
"$:/language/ControlPanel/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt",
"text": "編輯"
},
"$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
"text": "重置"
},
"$:/language/ControlPanel/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
"text": "隱藏編輯器"
},
"$:/language/ControlPanel/Palette/Prompt": {
"title": "$:/language/ControlPanel/Palette/Prompt",
"text": "當前的調色盤:"
},
"$:/language/ControlPanel/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
"text": "顯示編輯器"
},
"$:/language/ControlPanel/Plugins/Add/Hint": {
"title": "$:/language/ControlPanel/Plugins/Add/Hint",
"text": "從官方插件庫安裝插件"
},
"$:/language/ControlPanel/Plugins/Add/Caption": {
"title": "$:/language/ControlPanel/Plugins/Add/Caption",
"text": "獲取更多插件"
},
"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
"text": "此插件已經安裝版本 <$text text=<<installedVersion>>/>"
},
"$:/language/ControlPanel/Plugins/AlsoRequires": {
"title": "$:/language/ControlPanel/Plugins/AlsoRequires",
"text": "還需要:"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "插件"
},
"$:/language/ControlPanel/Plugins/Disable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Disable/Caption",
"text": "停用"
},
"$:/language/ControlPanel/Plugins/Disable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Disable/Hint",
"text": "重新載入頁面時停用此插件"
},
"$:/language/ControlPanel/Plugins/Disabled/Status": {
"title": "$:/language/ControlPanel/Plugins/Disabled/Status",
"text": "(已停用)"
},
"$:/language/ControlPanel/Plugins/Downgrade/Caption": {
"title": "$:/language/ControlPanel/Plugins/Downgrade/Caption",
"text": "降級"
},
"$:/language/ControlPanel/Plugins/Empty/Hint": {
"title": "$:/language/ControlPanel/Plugins/Empty/Hint",
"text": "無"
},
"$:/language/ControlPanel/Plugins/Enable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Enable/Caption",
"text": "啟用"
},
"$:/language/ControlPanel/Plugins/Enable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Enable/Hint",
"text": "重新載入頁面時啟用此插件"
},
"$:/language/ControlPanel/Plugins/Install/Caption": {
"title": "$:/language/ControlPanel/Plugins/Install/Caption",
"text": "安裝"
},
"$:/language/ControlPanel/Plugins/Installed/Hint": {
"title": "$:/language/ControlPanel/Plugins/Installed/Hint",
"text": "當前已安裝的插件:"
},
"$:/language/ControlPanel/Plugins/Languages/Caption": {
"title": "$:/language/ControlPanel/Plugins/Languages/Caption",
"text": "語言"
},
"$:/language/ControlPanel/Plugins/Languages/Hint": {
"title": "$:/language/ControlPanel/Plugins/Languages/Hint",
"text": "語言包插件"
},
"$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
"text": "無 ''\"<$text text=<<currentTab>>/>\"''"
},
"$:/language/ControlPanel/Plugins/NoInformation/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInformation/Hint",
"text": "未提供資訊"
},
"$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
"text": "尚未安裝此插件"
},
"$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
"text": "開啟插件程式庫"
},
"$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
"text": "關閉插件程式庫"
},
"$:/language/ControlPanel/Plugins/PluginWillRequireReload": {
"title": "$:/language/ControlPanel/Plugins/PluginWillRequireReload",
"text": "(需要重新載入)"
},
"$:/language/ControlPanel/Plugins/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
"text": "插件"
},
"$:/language/ControlPanel/Plugins/Plugins/Hint": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
"text": "插件"
},
"$:/language/ControlPanel/Plugins/Reinstall/Caption": {
"title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
"text": "重新安裝"
},
"$:/language/ControlPanel/Plugins/Themes/Caption": {
"title": "$:/language/ControlPanel/Plugins/Themes/Caption",
"text": "佈景主題"
},
"$:/language/ControlPanel/Plugins/Themes/Hint": {
"title": "$:/language/ControlPanel/Plugins/Themes/Hint",
"text": "佈景主題插件"
},
"$:/language/ControlPanel/Plugins/Update/Caption": {
"title": "$:/language/ControlPanel/Plugins/Update/Caption",
"text": "更新"
},
"$:/language/ControlPanel/Plugins/Updates/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/Caption",
"text": "更新"
},
"$:/language/ControlPanel/Plugins/Updates/Hint": {
"title": "$:/language/ControlPanel/Plugins/Updates/Hint",
"text": "已安裝插件的可用更新"
},
"$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption",
"text": "更新 <<update-count>> 個插件"
},
"$:/language/ControlPanel/Plugins/SubPluginPrompt": {
"title": "$:/language/ControlPanel/Plugins/SubPluginPrompt",
"text": "提供 <<count>> 個可用的附加插件"
},
"$:/language/ControlPanel/Parsing/Caption": {
"title": "$:/language/ControlPanel/Parsing/Caption",
"text": "解析"
},
"$:/language/ControlPanel/Parsing/Hint": {
"title": "$:/language/ControlPanel/Parsing/Hint",
"text": "在此您可以全域停用或啟用維基解析規則。要使更改生效,請儲存並重新載入您的維基。停用某些解析規則,會妨礙 <$text text=\"TiddlyWiki\"/> 正常運作。可使用[[安全模式|https://tiddlywiki.com/#SafeMode]]恢復正常操作。"
},
"$:/language/ControlPanel/Parsing/Block/Caption": {
"title": "$:/language/ControlPanel/Parsing/Block/Caption",
"text": "區塊解析規則"
},
"$:/language/ControlPanel/Parsing/Inline/Caption": {
"title": "$:/language/ControlPanel/Parsing/Inline/Caption",
"text": "行內解析規則"
},
"$:/language/ControlPanel/Parsing/Pragma/Caption": {
"title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
"text": "編譯指示解析規則"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "儲存"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
"text": "允許下載儲存模組的自動儲存"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
"text": "啟用下載儲存模組的自動儲存"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
"text": "下載儲存模組"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
"text": "這些設定適用於相容 HTML5 的下載儲存模組"
},
"$:/language/ControlPanel/Saving/General/Caption": {
"title": "$:/language/ControlPanel/Saving/General/Caption",
"text": "通用"
},
"$:/language/ControlPanel/Saving/General/Hint": {
"title": "$:/language/ControlPanel/Saving/General/Hint",
"text": "這些設定適用於所有已載入的儲存模組"
},
"$:/language/ControlPanel/Saving/Hint": {
"title": "$:/language/ControlPanel/Saving/Hint",
"text": "用於通過儲存模組將整個 TiddlyWiki 儲存為單個檔案的設定"
},
"$:/language/ControlPanel/Saving/GitService/Branch": {
"title": "$:/language/ControlPanel/Saving/GitService/Branch",
"text": "用於儲存的目標分支"
},
"$:/language/ControlPanel/Saving/GitService/CommitMessage": {
"title": "$:/language/ControlPanel/Saving/GitService/CommitMessage",
"text": "由 TiddlyWiki 儲存"
},
"$:/language/ControlPanel/Saving/GitService/Description": {
"title": "$:/language/ControlPanel/Saving/GitService/Description",
"text": "這些設定僅用於儲存至 <<service-name>>"
},
"$:/language/ControlPanel/Saving/GitService/Filename": {
"title": "$:/language/ControlPanel/Saving/GitService/Filename",
"text": "目標檔案的檔案名稱 (例如,`index.html`)"
},
"$:/language/ControlPanel/Saving/GitService/Path": {
"title": "$:/language/ControlPanel/Saving/GitService/Path",
"text": "目標檔案的路徑 (例如,`/wiki/`)"
},
"$:/language/ControlPanel/Saving/GitService/Repo": {
"title": "$:/language/ControlPanel/Saving/GitService/Repo",
"text": "目標存儲庫 (例如,`Jermolene/TiddlyWiki5`)"
},
"$:/language/ControlPanel/Saving/GitService/ServerURL": {
"title": "$:/language/ControlPanel/Saving/GitService/ServerURL",
"text": "伺服器 API 網址"
},
"$:/language/ControlPanel/Saving/GitService/UserName": {
"title": "$:/language/ControlPanel/Saving/GitService/UserName",
"text": "使用者名稱"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Caption",
"text": "~GitHub 儲存模組"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Password",
"text": "密碼、OAUTH 權杖,或個人存取權杖 (詳見 [[GitHub 說明頁面|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]])"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Caption",
"text": "~GitLab 儲存模組"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Password",
"text": "個人存取權杖的 API (詳見 [[GitLab 說明頁面|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]])"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Caption",
"text": "Gitea 儲存模組"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Password",
"text": "個人存取權杖的 API (通過 Gitea 的 Web 介面:`設定 | 應用程式 | 產生新的權杖`)"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "進階設定"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "備份資料夾"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "備份"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
"text": "~TiddlySpot 儲存模組"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel",
"text": "~TiddlySpot 控制台"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Description": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
"text": "這些設定只適用於儲存到 [[TiddlySpot|http://tiddlyspot.com]]、[[TiddlyHost|https://tiddlyhost.com]],或相容的遠端伺服器。有關 ~TiddlySpot 和 ~TiddlyHost 的儲存設定資訊,請參閱[[此處|https://github.com/simonbaird/tiddlyhost/wiki/TiddlySpot-Saver-configuration-for-Tiddlyhost-and-Tiddlyspot]]。"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "上傳檔名"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
"text": "~TiddlySpot"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//預設之伺服器網址 `http://<wikiname>.tiddlyspot.com/store.cgi`,可改為自訂之伺服器網址,例如 `http://example.com/store.php`。//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "密碼"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly",
"text": "請注意,[[TiddlySpot|http://tiddlyspot.com]] 不再允許建立新網站。對於新網站,您可以使用 [[TiddlyHost|https://tiddlyhost.com]],一個新的取代 ~TiddlySpot 的託管服務 。"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "伺服器網址"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "上傳資料夾"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "帳號"
},
"$:/language/ControlPanel/Settings/AutoSave/Caption": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
"text": "自動儲存"
},
"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
"text": "不要自動儲存變更"
},
"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
"text": "自動儲存變更"
},
"$:/language/ControlPanel/Settings/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
"text": "當使用支援的儲存模組時,在編輯期間嘗試自動儲存變更"
},
"$:/language/ControlPanel/Settings/CamelCase/Caption": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
"text": "駝峰式維基鏈接"
},
"$:/language/ControlPanel/Settings/CamelCase/Hint": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
"text": "您可以全域停用駝峰式短語自動鏈接。須儲存後重新載入,方才生效。"
},
"$:/language/ControlPanel/Settings/CamelCase/Description": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Description",
"text": "啟用自動駝峰式鏈接"
},
"$:/language/ControlPanel/Settings/Caption": {
"title": "$:/language/ControlPanel/Settings/Caption",
"text": "設定"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
"text": "預設側邊欄頁籤"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
"text": "指定預設顯示的側邊欄頁籤"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption",
"text": "更多側邊欄的預設頁籤"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint",
"text": "指定預設顯示的更多側欄頁籤"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
"text": "編輯器工具列"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
"text": "啟用或停用編輯器工具列︰"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Description": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
"text": "顯示編輯器工具列"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
"text": "條目資訊面板模式"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
"text": "控制條目資訊面板何時關閉︰"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
"text": "條目資訊面板自動關閉"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
"text": "條目資訊面板保持開啟狀態,直到明確關閉"
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"text": "這些進階設定讓您自訂 TiddlyWiki 的行為。"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
"text": "條目開啟行為"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
"text": "從故事河//中//導航"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
"text": "從故事河//外//導航"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
"text": "開啟於當前條目之上"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
"text": "開啟於當前條目之下"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
"text": "開啟於故事河的頂端"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
"text": "開啟於故事河的底部"
},
"$:/language/ControlPanel/Settings/MissingLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
"text": "維基鏈接"
},
"$:/language/ControlPanel/Settings/MissingLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
"text": "選擇是否要鏈接到尚未存在的條目"
},
"$:/language/ControlPanel/Settings/MissingLinks/Description": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
"text": "啟用鏈接到佚失條目"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
"text": "網址列導覽"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
"text": "在瀏覽器網址列導覽到條目時的行為:"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
"text": "不更新網址列"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
"text": "包含目標條目"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
"text": "包括目標條目和當前已開啟的條目序列"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
"text": "歷史記錄導覽"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
"text": "當導覽到條目時,更新瀏覽器歷史記錄:"
},
"$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
"text": "不更新歷史記錄"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
"text": "更新歷史記錄"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption",
"text": "引用連結/固定連結 模式"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint",
"text": "選擇 引用連結/固定連結 的處理方式:"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description",
"text": "將 引用連結/固定連結 網址複製到剪貼簿"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description",
"text": "以 引用連結/固定連結 更新網址列"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
"text": "效能檢測"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
"text": "在瀏覽器的開發人員主控台,顯示效能統計資訊。需要重新載入才能生效。"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
"text": "啟用效能檢測"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
"text": "工具列按鈕樣式"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
"text": "選擇工具列按鈕的樣式:"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
"text": "無邊框"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
"text": "方框"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
"text": "圓形"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
"text": "工具列按鈕"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
"text": "預設的工具列按鈕外觀:"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
"text": "包含圖示"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
"text": "包含文字"
},
"$:/language/ControlPanel/Settings/TitleLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
"text": "條目標題"
},
"$:/language/ControlPanel/Settings/TitleLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
"text": "可選地顯示條目標題為鏈接"
},
"$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
"text": "不顯示條目標題為鏈接"
},
"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
"text": "顯示條目標題為鏈接"
},
"$:/language/ControlPanel/StoryView/Caption": {
"title": "$:/language/ControlPanel/StoryView/Caption",
"text": "檢視模式"
},
"$:/language/ControlPanel/StoryView/Prompt": {
"title": "$:/language/ControlPanel/StoryView/Prompt",
"text": "當前的檢視模式:"
},
"$:/language/ControlPanel/Stylesheets/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Caption",
"text": "樣式表"
},
"$:/language/ControlPanel/Stylesheets/Expand/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Expand/Caption",
"text": "全部展開"
},
"$:/language/ControlPanel/Stylesheets/Hint": {
"title": "$:/language/ControlPanel/Stylesheets/Hint",
"text": "這是當前標籤為 <<tag \"$:/tags/Stylesheet\">> 的樣式表條目呈現的 CSS"
},
"$:/language/ControlPanel/Stylesheets/Restore/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Restore/Caption",
"text": "復原"
},
"$:/language/ControlPanel/Theme/Caption": {
"title": "$:/language/ControlPanel/Theme/Caption",
"text": "佈景主題"
},
"$:/language/ControlPanel/Theme/Prompt": {
"title": "$:/language/ControlPanel/Theme/Prompt",
"text": "當前的佈景主題:"
},
"$:/language/ControlPanel/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/TiddlerFields/Caption",
"text": "條目欄位"
},
"$:/language/ControlPanel/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/TiddlerFields/Hint",
"text": "這是本維基使用中的所有條目欄位(含系統條目的欄位,但預設條目的欄位除外)。"
},
"$:/language/ControlPanel/Toolbars/Caption": {
"title": "$:/language/ControlPanel/Toolbars/Caption",
"text": "工具列"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
"text": "編輯工具列"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
"text": "選擇將顯示哪些按鈕於條目的編輯模式工具列。拖放可改變順序。"
},
"$:/language/ControlPanel/Toolbars/Hint": {
"title": "$:/language/ControlPanel/Toolbars/Hint",
"text": "選擇將顯示哪些工具列按鈕"
},
"$:/language/ControlPanel/Toolbars/PageControls/Caption": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
"text": "頁面工具列"
},
"$:/language/ControlPanel/Toolbars/PageControls/Hint": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
"text": "選擇將顯示哪些按鈕於主頁面的工具列。拖放可改變順序。"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
"text": "編輯器工具列"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
"text": "選擇將顯示哪些按鈕於編輯器工具列。請注意,某些按鈕只會出現在編輯某一類型的條目時。拖放可改變順序。"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
"text": "檢視工具列"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
"text": "選擇將顯示哪些按鈕於條目的檢視模式工具列。拖放可改變順序。"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "下載完整副本"
},
"$:/core/zh-Hant/readme": {
"title": "$:/core/zh-Hant/readme",
"text": "此插件包含 TiddlyWiki 的核心元件,包括:\n\n* JavaScript 程式碼模組\n* 圖示\n* 建立 TiddlyWiki 的使用者介面所需的範本\n* 核心所使用的可當地語系化字串的英國英語 (''en-GB'') 翻譯\n"
},
"$:/language/Date/Long/Day/0": {
"title": "$:/language/Date/Long/Day/0",
"text": "星期日"
},
"$:/language/Date/Long/Day/1": {
"title": "$:/language/Date/Long/Day/1",
"text": "星期一"
},
"$:/language/Date/Long/Day/2": {
"title": "$:/language/Date/Long/Day/2",
"text": "星期二"
},
"$:/language/Date/Long/Day/3": {
"title": "$:/language/Date/Long/Day/3",
"text": "星期三"
},
"$:/language/Date/Long/Day/4": {
"title": "$:/language/Date/Long/Day/4",
"text": "星期四"
},
"$:/language/Date/Long/Day/5": {
"title": "$:/language/Date/Long/Day/5",
"text": "星期五"
},
"$:/language/Date/Long/Day/6": {
"title": "$:/language/Date/Long/Day/6",
"text": "星期六"
},
"$:/language/Date/Long/Month/1": {
"title": "$:/language/Date/Long/Month/1",
"text": "一月"
},
"$:/language/Date/Long/Month/2": {
"title": "$:/language/Date/Long/Month/2",
"text": "二月"
},
"$:/language/Date/Long/Month/3": {
"title": "$:/language/Date/Long/Month/3",
"text": "三月"
},
"$:/language/Date/Long/Month/4": {
"title": "$:/language/Date/Long/Month/4",
"text": "四月"
},
"$:/language/Date/Long/Month/5": {
"title": "$:/language/Date/Long/Month/5",
"text": "五月"
},
"$:/language/Date/Long/Month/6": {
"title": "$:/language/Date/Long/Month/6",
"text": "六月"
},
"$:/language/Date/Long/Month/7": {
"title": "$:/language/Date/Long/Month/7",
"text": "七月"
},
"$:/language/Date/Long/Month/8": {
"title": "$:/language/Date/Long/Month/8",
"text": "八月"
},
"$:/language/Date/Long/Month/9": {
"title": "$:/language/Date/Long/Month/9",
"text": "九月"
},
"$:/language/Date/Long/Month/10": {
"title": "$:/language/Date/Long/Month/10",
"text": "十月"
},
"$:/language/Date/Long/Month/11": {
"title": "$:/language/Date/Long/Month/11",
"text": "十一月"
},
"$:/language/Date/Long/Month/12": {
"title": "$:/language/Date/Long/Month/12",
"text": "十二月"
},
"$:/language/Date/Period/am": {
"title": "$:/language/Date/Period/am",
"text": "上午"
},
"$:/language/Date/Period/pm": {
"title": "$:/language/Date/Period/pm",
"text": "下午"
},
"$:/language/Date/Short/Day/0": {
"title": "$:/language/Date/Short/Day/0",
"text": "日"
},
"$:/language/Date/Short/Day/1": {
"title": "$:/language/Date/Short/Day/1",
"text": "一"
},
"$:/language/Date/Short/Day/2": {
"title": "$:/language/Date/Short/Day/2",
"text": "二"
},
"$:/language/Date/Short/Day/3": {
"title": "$:/language/Date/Short/Day/3",
"text": "三"
},
"$:/language/Date/Short/Day/4": {
"title": "$:/language/Date/Short/Day/4",
"text": "四"
},
"$:/language/Date/Short/Day/5": {
"title": "$:/language/Date/Short/Day/5",
"text": "五"
},
"$:/language/Date/Short/Day/6": {
"title": "$:/language/Date/Short/Day/6",
"text": "六"
},
"$:/language/Date/Short/Month/1": {
"title": "$:/language/Date/Short/Month/1",
"text": "01月"
},
"$:/language/Date/Short/Month/2": {
"title": "$:/language/Date/Short/Month/2",
"text": "02月"
},
"$:/language/Date/Short/Month/3": {
"title": "$:/language/Date/Short/Month/3",
"text": "03月"
},
"$:/language/Date/Short/Month/4": {
"title": "$:/language/Date/Short/Month/4",
"text": "04月"
},
"$:/language/Date/Short/Month/5": {
"title": "$:/language/Date/Short/Month/5",
"text": "05月"
},
"$:/language/Date/Short/Month/6": {
"title": "$:/language/Date/Short/Month/6",
"text": "06月"
},
"$:/language/Date/Short/Month/7": {
"title": "$:/language/Date/Short/Month/7",
"text": "07月"
},
"$:/language/Date/Short/Month/8": {
"title": "$:/language/Date/Short/Month/8",
"text": "08月"
},
"$:/language/Date/Short/Month/9": {
"title": "$:/language/Date/Short/Month/9",
"text": "09月"
},
"$:/language/Date/Short/Month/10": {
"title": "$:/language/Date/Short/Month/10",
"text": "10月"
},
"$:/language/Date/Short/Month/11": {
"title": "$:/language/Date/Short/Month/11",
"text": "11月"
},
"$:/language/Date/Short/Month/12": {
"title": "$:/language/Date/Short/Month/12",
"text": "12月"
},
"$:/language/RelativeDate/Future/Days": {
"title": "$:/language/RelativeDate/Future/Days",
"text": "<<period>> 天後"
},
"$:/language/RelativeDate/Future/Hours": {
"title": "$:/language/RelativeDate/Future/Hours",
"text": "<<period>> 小時後"
},
"$:/language/RelativeDate/Future/Minutes": {
"title": "$:/language/RelativeDate/Future/Minutes",
"text": "<<period>> 分鐘後"
},
"$:/language/RelativeDate/Future/Months": {
"title": "$:/language/RelativeDate/Future/Months",
"text": "<<period>> 個月後"
},
"$:/language/RelativeDate/Future/Second": {
"title": "$:/language/RelativeDate/Future/Second",
"text": "1 秒後"
},
"$:/language/RelativeDate/Future/Seconds": {
"title": "$:/language/RelativeDate/Future/Seconds",
"text": "<<period>> 秒後"
},
"$:/language/RelativeDate/Future/Years": {
"title": "$:/language/RelativeDate/Future/Years",
"text": "<<period>> 年後"
},
"$:/language/RelativeDate/Past/Days": {
"title": "$:/language/RelativeDate/Past/Days",
"text": "<<period>> 天前"
},
"$:/language/RelativeDate/Past/Hours": {
"title": "$:/language/RelativeDate/Past/Hours",
"text": "<<period>> 小時前"
},
"$:/language/RelativeDate/Past/Minutes": {
"title": "$:/language/RelativeDate/Past/Minutes",
"text": "<<period>> 分鐘前"
},
"$:/language/RelativeDate/Past/Months": {
"title": "$:/language/RelativeDate/Past/Months",
"text": "<<period>> 個月前"
},
"$:/language/RelativeDate/Past/Second": {
"title": "$:/language/RelativeDate/Past/Second",
"text": "1 秒前"
},
"$:/language/RelativeDate/Past/Seconds": {
"title": "$:/language/RelativeDate/Past/Seconds",
"text": "<<period>> 秒前"
},
"$:/language/RelativeDate/Past/Years": {
"title": "$:/language/RelativeDate/Past/Years",
"text": "<<period>> 年前"
},
"$:/language/Docs/ModuleTypes/allfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/allfilteroperator",
"text": "''all'' 篩選器運算子的子運算子。"
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "動畫模組包含可用於 RevealWidget 的動畫。"
},
"$:/language/Docs/ModuleTypes/authenticator": {
"title": "$:/language/Docs/ModuleTypes/authenticator",
"text": "定義內建 HTTP 伺服器對請求的身份驗證方式。"
},
"$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
"title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
"text": "一個點陣圖編輯器工具列操作。"
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "可於 Node.js 執行的指令。"
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "加入 `$tw.config` 的資料。"
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "個別篩選器運算元方法。"
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "加入 `$tw` 的全域資料。"
},
"$:/language/Docs/ModuleTypes/info": {
"title": "$:/language/Docs/ModuleTypes/info",
"text": "透過 [[$:/temp/info-plugin]] 偽插件,發佈系統資訊。"
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "''is'' 篩選器運算元的運算子。"
},
"$:/language/Docs/ModuleTypes/library": {
"title": "$:/language/Docs/ModuleTypes/library",
"text": "一般用途的 JavaScript 模組的通用的模組類型。"
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "JavaScript ''巨集''定義。"
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "不同內容類型的解析器。"
},
"$:/language/Docs/ModuleTypes/route": {
"title": "$:/language/Docs/ModuleTypes/route",
"text": "定義內建 HTTP 伺服器如何處理各個網址格式。"
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "於瀏覽器儲存檔案的不同的儲存處理方法。"
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "啟動時期的功能函數。"
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "檢視模式用以自訂 list 小工具的動畫與行為。"
},
"$:/language/Docs/ModuleTypes/texteditoroperation": {
"title": "$:/language/Docs/ModuleTypes/texteditoroperation",
"text": "一個文字編輯器工具列操作。"
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "轉換不同內容類型至條目。"
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "定義個別條目欄位的行為。"
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "新增方法至 `$tw.Tiddler` 原型。"
},
"$:/language/Docs/ModuleTypes/upgrader": {
"title": "$:/language/Docs/ModuleTypes/upgrader",
"text": "於升級/導入過程中,套用升級處理至條目。"
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "新增方法至 `$tw.utils`。"
},
"$:/language/Docs/ModuleTypes/utils-browser": {
"title": "$:/language/Docs/ModuleTypes/utils-browser",
"text": "將特定於瀏覽器的方法新增到 `$tw.utils`。"
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "將特定於 Node.js 的方法新增到 `$tw.utils`。"
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "封裝 DOM 渲染和刷新的小工具。"
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "新增方法至 `$tw.Wiki`。"
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "WikiText 解析器的個別的語法規則。"
},
"$:/language/Docs/PaletteColours/alert-background": {
"title": "$:/language/Docs/PaletteColours/alert-background",
"text": "警示背景"
},
"$:/language/Docs/PaletteColours/alert-border": {
"title": "$:/language/Docs/PaletteColours/alert-border",
"text": "警示邊框"
},
"$:/language/Docs/PaletteColours/alert-highlight": {
"title": "$:/language/Docs/PaletteColours/alert-highlight",
"text": "警示高亮度"
},
"$:/language/Docs/PaletteColours/alert-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
"text": "警示的低調前景"
},
"$:/language/Docs/PaletteColours/background": {
"title": "$:/language/Docs/PaletteColours/background",
"text": "一般背景"
},
"$:/language/Docs/PaletteColours/blockquote-bar": {
"title": "$:/language/Docs/PaletteColours/blockquote-bar",
"text": "引言條"
},
"$:/language/Docs/PaletteColours/button-background": {
"title": "$:/language/Docs/PaletteColours/button-background",
"text": "預設按鈕背景"
},
"$:/language/Docs/PaletteColours/button-border": {
"title": "$:/language/Docs/PaletteColours/button-border",
"text": "預設按鈕邊框"
},
"$:/language/Docs/PaletteColours/button-foreground": {
"title": "$:/language/Docs/PaletteColours/button-foreground",
"text": "預設按鈕前景"
},
"$:/language/Docs/PaletteColours/code-background": {
"title": "$:/language/Docs/PaletteColours/code-background",
"text": "程式碼背景"
},
"$:/language/Docs/PaletteColours/code-border": {
"title": "$:/language/Docs/PaletteColours/code-border",
"text": "程式碼邊框"
},
"$:/language/Docs/PaletteColours/code-foreground": {
"title": "$:/language/Docs/PaletteColours/code-foreground",
"text": "程式碼前景"
},
"$:/language/Docs/PaletteColours/dirty-indicator": {
"title": "$:/language/Docs/PaletteColours/dirty-indicator",
"text": "未儲存變更指示器"
},
"$:/language/Docs/PaletteColours/download-background": {
"title": "$:/language/Docs/PaletteColours/download-background",
"text": "下載按鈕背景"
},
"$:/language/Docs/PaletteColours/download-foreground": {
"title": "$:/language/Docs/PaletteColours/download-foreground",
"text": "下載按鈕前景"
},
"$:/language/Docs/PaletteColours/dragger-background": {
"title": "$:/language/Docs/PaletteColours/dragger-background",
"text": "拖動區背景"
},
"$:/language/Docs/PaletteColours/dragger-foreground": {
"title": "$:/language/Docs/PaletteColours/dragger-foreground",
"text": "拖動區前景"
},
"$:/language/Docs/PaletteColours/dropdown-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-background",
"text": "下拉背景"
},
"$:/language/Docs/PaletteColours/dropdown-border": {
"title": "$:/language/Docs/PaletteColours/dropdown-border",
"text": "下拉邊框"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
"text": "選定的下拉頁籤背景"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
"text": "下拉頁籤背景"
},
"$:/language/Docs/PaletteColours/dropzone-background": {
"title": "$:/language/Docs/PaletteColours/dropzone-background",
"text": "拖放區背景"
},
"$:/language/Docs/PaletteColours/external-link-background-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-background-hover",
"text": "懸停外部鏈結背景"
},
"$:/language/Docs/PaletteColours/external-link-background-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-background-visited",
"text": "已造訪過的外部鏈結背景"
},
"$:/language/Docs/PaletteColours/external-link-background": {
"title": "$:/language/Docs/PaletteColours/external-link-background",
"text": "外部鏈結背景"
},
"$:/language/Docs/PaletteColours/external-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
"text": "懸停外部鏈結前景"
},
"$:/language/Docs/PaletteColours/external-link-foreground-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
"text": "已造訪過的外部鏈結前景"
},
"$:/language/Docs/PaletteColours/external-link-foreground": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground",
"text": "外部鏈結前景"
},
"$:/language/Docs/PaletteColours/foreground": {
"title": "$:/language/Docs/PaletteColours/foreground",
"text": "一般前景"
},
"$:/language/Docs/PaletteColours/menubar-background": {
"title": "$:/language/Docs/PaletteColours/menubar-background",
"text": "選單列背景"
},
"$:/language/Docs/PaletteColours/menubar-foreground": {
"title": "$:/language/Docs/PaletteColours/menubar-foreground",
"text": "選單列前景"
},
"$:/language/Docs/PaletteColours/message-background": {
"title": "$:/language/Docs/PaletteColours/message-background",
"text": "訊息框背景"
},
"$:/language/Docs/PaletteColours/message-border": {
"title": "$:/language/Docs/PaletteColours/message-border",
"text": "訊息邊框"
},
"$:/language/Docs/PaletteColours/message-foreground": {
"title": "$:/language/Docs/PaletteColours/message-foreground",
"text": "訊息框前景"
},
"$:/language/Docs/PaletteColours/modal-backdrop": {
"title": "$:/language/Docs/PaletteColours/modal-backdrop",
"text": "模組背景幕"
},
"$:/language/Docs/PaletteColours/modal-background": {
"title": "$:/language/Docs/PaletteColours/modal-background",
"text": "模組背景"
},
"$:/language/Docs/PaletteColours/modal-border": {
"title": "$:/language/Docs/PaletteColours/modal-border",
"text": "模組邊框"
},
"$:/language/Docs/PaletteColours/modal-footer-background": {
"title": "$:/language/Docs/PaletteColours/modal-footer-background",
"text": "模組頁腳背景"
},
"$:/language/Docs/PaletteColours/modal-footer-border": {
"title": "$:/language/Docs/PaletteColours/modal-footer-border",
"text": "模組頁腳邊框"
},
"$:/language/Docs/PaletteColours/modal-header-border": {
"title": "$:/language/Docs/PaletteColours/modal-header-border",
"text": "模組標題邊框"
},
"$:/language/Docs/PaletteColours/muted-foreground": {
"title": "$:/language/Docs/PaletteColours/muted-foreground",
"text": "一般低調前景"
},
"$:/language/Docs/PaletteColours/notification-background": {
"title": "$:/language/Docs/PaletteColours/notification-background",
"text": "通知背景"
},
"$:/language/Docs/PaletteColours/notification-border": {
"title": "$:/language/Docs/PaletteColours/notification-border",
"text": "通知邊框"
},
"$:/language/Docs/PaletteColours/page-background": {
"title": "$:/language/Docs/PaletteColours/page-background",
"text": "頁面背景"
},
"$:/language/Docs/PaletteColours/pre-background": {
"title": "$:/language/Docs/PaletteColours/pre-background",
"text": "pre 背景"
},
"$:/language/Docs/PaletteColours/pre-border": {
"title": "$:/language/Docs/PaletteColours/pre-border",
"text": "pre 邊框"
},
"$:/language/Docs/PaletteColours/primary": {
"title": "$:/language/Docs/PaletteColours/primary",
"text": "主顏色"
},
"$:/language/Docs/PaletteColours/select-tag-background": {
"title": "$:/language/Docs/PaletteColours/select-tag-background",
"text": "`<select>` 元素背景"
},
"$:/language/Docs/PaletteColours/select-tag-foreground": {
"title": "$:/language/Docs/PaletteColours/select-tag-foreground",
"text": "`<select>` 元素文字"
},
"$:/language/Docs/PaletteColours/sidebar-button-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
"text": "側邊欄按鈕前景"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
"text": "懸停側邊欄控制項前景"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
"text": "側邊欄控制項前景"
},
"$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
"text": "側邊欄前景陰影"
},
"$:/language/Docs/PaletteColours/sidebar-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground",
"text": "側邊欄前景"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
"text": "懸停側邊欄低調前景"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
"text": "側邊欄低調前景"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
"text": "側邊欄選定的頁籤背景"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
"text": "側邊欄頁籤背景"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
"text": "側邊欄選定的頁籤邊框"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
"text": "側邊欄頁籤邊框"
},
"$:/language/Docs/PaletteColours/sidebar-tab-divider": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
"text": "側邊欄頁籤分隔線"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
"text": "側邊欄選定頁籤前景"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
"text": "側邊欄頁籤前景"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
"text": "側邊欄懸停條目鏈結前景"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
"text": "側邊欄條目鏈結前景"
},
"$:/language/Docs/PaletteColours/site-title-foreground": {
"title": "$:/language/Docs/PaletteColours/site-title-foreground",
"text": "網站標題前景"
},
"$:/language/Docs/PaletteColours/static-alert-foreground": {
"title": "$:/language/Docs/PaletteColours/static-alert-foreground",
"text": "靜態警示前景"
},
"$:/language/Docs/PaletteColours/tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/tab-background-selected",
"text": "選定的頁籤背景"
},
"$:/language/Docs/PaletteColours/tab-background": {
"title": "$:/language/Docs/PaletteColours/tab-background",
"text": "頁籤背景"
},
"$:/language/Docs/PaletteColours/tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/tab-border-selected",
"text": "選定的頁籤邊框"
},
"$:/language/Docs/PaletteColours/tab-border": {
"title": "$:/language/Docs/PaletteColours/tab-border",
"text": "頁籤邊框"
},
"$:/language/Docs/PaletteColours/tab-divider": {
"title": "$:/language/Docs/PaletteColours/tab-divider",
"text": "頁籤分隔線"
},
"$:/language/Docs/PaletteColours/tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
"text": "選定的頁籤前景"
},
"$:/language/Docs/PaletteColours/tab-foreground": {
"title": "$:/language/Docs/PaletteColours/tab-foreground",
"text": "頁籤前景"
},
"$:/language/Docs/PaletteColours/table-border": {
"title": "$:/language/Docs/PaletteColours/table-border",
"text": "表格邊框"
},
"$:/language/Docs/PaletteColours/table-footer-background": {
"title": "$:/language/Docs/PaletteColours/table-footer-background",
"text": "表格頁腳背景"
},
"$:/language/Docs/PaletteColours/table-header-background": {
"title": "$:/language/Docs/PaletteColours/table-header-background",
"text": "表格標題背景"
},
"$:/language/Docs/PaletteColours/tag-background": {
"title": "$:/language/Docs/PaletteColours/tag-background",
"text": "標籤背景"
},
"$:/language/Docs/PaletteColours/tag-foreground": {
"title": "$:/language/Docs/PaletteColours/tag-foreground",
"text": "標籤前景"
},
"$:/language/Docs/PaletteColours/tiddler-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-background",
"text": "條目背景"
},
"$:/language/Docs/PaletteColours/tiddler-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-border",
"text": "條目邊框"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
"text": "懸停的條目控制項前景"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
"text": "選定的條目控制項前景"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
"text": "條目控制項前景"
},
"$:/language/Docs/PaletteColours/tiddler-editor-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
"text": "條目編輯器背景"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
"text": "條目編輯器邊框圖片"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
"text": "條目編輯器邊框"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
"text": "條目編輯器中偶數欄位背景"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
"text": "條目編輯器中奇數欄位背景"
},
"$:/language/Docs/PaletteColours/tiddler-info-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-background",
"text": "條目資訊面板背景"
},
"$:/language/Docs/PaletteColours/tiddler-info-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-border",
"text": "條目資訊面板邊框"
},
"$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
"text": "條目資訊面板頁籤背景"
},
"$:/language/Docs/PaletteColours/tiddler-link-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-background",
"text": "條目鏈結背景"
},
"$:/language/Docs/PaletteColours/tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
"text": "條目鏈結前景"
},
"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
"text": "條目副標題前景"
},
"$:/language/Docs/PaletteColours/tiddler-title-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
"text": "條目標題前景"
},
"$:/language/Docs/PaletteColours/toolbar-new-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-new-button",
"text": "工具列 '新增條目' 按鈕前景"
},
"$:/language/Docs/PaletteColours/toolbar-options-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-options-button",
"text": "工具列 '選項' 按鈕前景"
},
"$:/language/Docs/PaletteColours/toolbar-save-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-save-button",
"text": "工具列 '儲存' 按鈕前景"
},
"$:/language/Docs/PaletteColours/toolbar-info-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-info-button",
"text": "工具列 '資訊' 按鈕前景"
},
"$:/language/Docs/PaletteColours/toolbar-edit-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
"text": "工具列 '編輯' 按鈕前景"
},
"$:/language/Docs/PaletteColours/toolbar-close-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-close-button",
"text": "工具列 '關閉' 按鈕前景"
},
"$:/language/Docs/PaletteColours/toolbar-delete-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
"text": "工具列 '刪除' 按鈕前景"
},
"$:/language/Docs/PaletteColours/toolbar-cancel-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
"text": "工具列 '取消' 按鈕前景"
},
"$:/language/Docs/PaletteColours/toolbar-done-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-done-button",
"text": "工具列 '完成 按鈕前景"
},
"$:/language/Docs/PaletteColours/untagged-background": {
"title": "$:/language/Docs/PaletteColours/untagged-background",
"text": "未設標籤的背景"
},
"$:/language/Docs/PaletteColours/very-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/very-muted-foreground",
"text": "非常低調前景"
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"text": "此條目顯示儲存於主要的 TiddlyWiki 檔之外的內容。你可以編輯其標籤和欄位,但不能直接編輯內容本身"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "輸入此條目的內容"
},
"$:/language/EditTemplate/Body/Preview/Type/Output": {
"title": "$:/language/EditTemplate/Body/Preview/Type/Output",
"text": "輸出"
},
"$:/language/EditTemplate/Body/Preview/Type/DiffShadow": {
"title": "$:/language/EditTemplate/Body/Preview/Type/DiffShadow",
"text": "與影子條目的差異(如果有)"
},
"$:/language/EditTemplate/Body/Preview/Type/DiffCurrent": {
"title": "$:/language/EditTemplate/Body/Preview/Type/DiffCurrent",
"text": "與當前條目的差異"
},
"$:/language/EditTemplate/Field/Remove/Caption": {
"title": "$:/language/EditTemplate/Field/Remove/Caption",
"text": "刪除欄位"
},
"$:/language/EditTemplate/Field/Remove/Hint": {
"title": "$:/language/EditTemplate/Field/Remove/Hint",
"text": "刪除欄位"
},
"$:/language/EditTemplate/Field/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Field/Dropdown/Caption",
"text": "欄位列表"
},
"$:/language/EditTemplate/Field/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Field/Dropdown/Hint",
"text": "顯示欄位列表"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "新增"
},
"$:/language/EditTemplate/Fields/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Fields/Add/Button/Hint",
"text": "新增欄位至條目"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/System": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
"text": "系統欄位"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/User": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
"text": "使用者欄位"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "欄位名稱"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "新增欄位:"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "欄位內容"
},
"$:/language/EditTemplate/Shadow/Warning": {
"title": "$:/language/EditTemplate/Shadow/Warning",
"text": "這是一個預設條目。您做的任何更改將會覆蓋來自 <<pluginLink>> 插件的預設版本。"
},
"$:/language/EditTemplate/Shadow/OverriddenWarning": {
"title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
"text": "這是一個修改過的預設條目。刪除此條目可以還原為 <<pluginLink>> 插件中的預設版本。"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "新增"
},
"$:/language/EditTemplate/Tags/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Tags/Add/Button/Hint",
"text": "新增標籤"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "標籤名稱"
},
"$:/language/EditTemplate/Tags/ClearInput/Caption": {
"title": "$:/language/EditTemplate/Tags/ClearInput/Caption",
"text": "清除輸入"
},
"$:/language/EditTemplate/Tags/ClearInput/Hint": {
"title": "$:/language/EditTemplate/Tags/ClearInput/Hint",
"text": "清除標籤輸入"
},
"$:/language/EditTemplate/Tags/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
"text": "標籤清單"
},
"$:/language/EditTemplate/Tags/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
"text": "顯示標籤清單"
},
"$:/language/EditTemplate/Title/BadCharacterWarning": {
"title": "$:/language/EditTemplate/Title/BadCharacterWarning",
"text": "請注意,避免在條目名稱中使用這些字元:<<bad-chars>>"
},
"$:/language/EditTemplate/Title/Exists/Prompt": {
"title": "$:/language/EditTemplate/Title/Exists/Prompt",
"text": "目標條目已經存在"
},
"$:/language/EditTemplate/Title/Relink/Prompt": {
"title": "$:/language/EditTemplate/Title/Relink/Prompt",
"text": "將在其他條目的 //tags// 和 //list// 欄位中的 ''<$text text=<<fromTitle>>/>'' 改為 ''<$text text=<<toTitle>>/>''"
},
"$:/language/EditTemplate/Title/References/Prompt": {
"title": "$:/language/EditTemplate/Title/References/Prompt",
"text": "下列對此條目的引用,不會自動更新:"
},
"$:/language/EditTemplate/Type/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Type/Dropdown/Caption",
"text": "內容類型清單"
},
"$:/language/EditTemplate/Type/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Type/Dropdown/Hint",
"text": "顯示內容類型清單"
},
"$:/language/EditTemplate/Type/Delete/Caption": {
"title": "$:/language/EditTemplate/Type/Delete/Caption",
"text": "刪除內容類型"
},
"$:/language/EditTemplate/Type/Delete/Hint": {
"title": "$:/language/EditTemplate/Type/Delete/Hint",
"text": "刪除內容類型"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "內容類型"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "類型:"
},
"$:/language/Exporters/StaticRiver": {
"title": "$:/language/Exporters/StaticRiver",
"text": "靜態 HTML"
},
"$:/language/Exporters/JsonFile": {
"title": "$:/language/Exporters/JsonFile",
"text": "JSON 檔案"
},
"$:/language/Exporters/CsvFile": {
"title": "$:/language/Exporters/CsvFile",
"text": "CSV 檔案"
},
"$:/language/Exporters/TidFile": {
"title": "$:/language/Exporters/TidFile",
"text": "\".tid\" 檔案"
},
"$:/language/Docs/Fields/_canonical_uri": {
"title": "$:/language/Docs/Fields/_canonical_uri",
"text": "外部圖片條目的完整的 URI"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "條目的來源集的名稱"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "顯示於頁籤或按鈕上的標題文字"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "條目的 CSS 顏色值"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "負責[[警示條目|AlertMechanism]]的元件名稱"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "條目的建立日期"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "條目的建立者"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "用於快取[[瀏覽歷史列表|HistoryMechanism]]的最上層條目"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "插件的相依插件列表"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "插件的說明、描述"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "草稿條目,包含條目的標題、標籤、欄位 ..."
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "草稿條目的標題"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "wizard 的註腳"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "條目的標題含有與條目關聯的圖示"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "若設為 \"yes\",表示條目應該被儲存為一個 JavaScript 程式庫"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "條目的列表,指定一些條目的標題清單"
},
"$:/language/Docs/Fields/list-before": {
"title": "$:/language/Docs/Fields/list-before",
"text": "當前條目名稱將被新增到條目排序清單中的設定條目名稱之前,或若此欄位存在但是空的,則被新增於清單的前端"
},
"$:/language/Docs/Fields/list-after": {
"title": "$:/language/Docs/Fields/list-after",
"text": "當前條目名稱將被新增到條目排序清單中的設定條目名稱之後,或若此欄位存在但是空的,則被新增於清單的尾端"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "條目的最近修改日期與時間"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "條目的最近修改者"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "具可讀性的套件條目的名稱"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "套件條目的優先級數值"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "套件條目的類型"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "TiddlyWiki 的釋出日期"
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "條目存放於伺服器中的修訂版本"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "條目的網址"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "一個 wizard 的副標題"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "條目的標籤清單"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "條目的內文"
},
"$:/language/Docs/Fields/throttle.refresh": {
"title": "$:/language/Docs/Fields/throttle.refresh",
"text": "如果存在,則限制此條目的刷新"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "條目的唯一名稱"
},
"$:/language/Docs/Fields/toc-link": {
"title": "$:/language/Docs/Fields/toc-link",
"text": "若設爲: \"no\",則抑制目錄樹中的條目鏈接。"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "條目的內容類型"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "插件的版本資訊"
},
"$:/language/Docs/Fields/_is_skinny": {
"title": "$:/language/Docs/Fields/_is_skinny",
"text": "如果存在,則表示必須從伺服器載入條目的文字欄位"
},
"$:/language/Filters/AllTiddlers": {
"title": "$:/language/Filters/AllTiddlers",
"text": "所有條目,不含系統條目"
},
"$:/language/Filters/RecentSystemTiddlers": {
"title": "$:/language/Filters/RecentSystemTiddlers",
"text": "最近修改的條目,包含系統條目"
},
"$:/language/Filters/RecentTiddlers": {
"title": "$:/language/Filters/RecentTiddlers",
"text": "最近修改的條目"
},
"$:/language/Filters/AllTags": {
"title": "$:/language/Filters/AllTags",
"text": "所有標籤,不含系統標籤"
},
"$:/language/Filters/Missing": {
"title": "$:/language/Filters/Missing",
"text": "佚失條目"
},
"$:/language/Filters/Drafts": {
"title": "$:/language/Filters/Drafts",
"text": "草稿條目"
},
"$:/language/Filters/Orphans": {
"title": "$:/language/Filters/Orphans",
"text": "孤立條目"
},
"$:/language/Filters/SystemTiddlers": {
"title": "$:/language/Filters/SystemTiddlers",
"text": "系統條目"
},
"$:/language/Filters/ShadowTiddlers": {
"title": "$:/language/Filters/ShadowTiddlers",
"text": "預設條目"
},
"$:/language/Filters/OverriddenShadowTiddlers": {
"title": "$:/language/Filters/OverriddenShadowTiddlers",
"text": "被覆寫的預設條目"
},
"$:/language/Filters/SessionTiddlers": {
"title": "$:/language/Filters/SessionTiddlers",
"text": "自維基載入後修改的條目"
},
"$:/language/Filters/SystemTags": {
"title": "$:/language/Filters/SystemTags",
"text": "系統標籤"
},
"$:/language/Filters/StoryList": {
"title": "$:/language/Filters/StoryList",
"text": "故事河中的條目,不含 ~$:/AdvancedSearch"
},
"$:/language/Filters/TypedTiddlers": {
"title": "$:/language/Filters/TypedTiddlers",
"text": "非維基文字條目"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n歡迎使用 ~TiddlyWiki 及參與 ~TiddlyWiki 社群\n\n開始將重要資訊存放於 ~TiddlyWiki 之前,確認您可以可靠地儲存變更是很重要的。詳細資訊請參閱 https://tiddlywiki.com/#GettingStarted\n\n!! 設定此 ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\n請參閱[[控制台|$:/ControlPanel]]查看更多選項。"
},
"$:/language/Help/build": {
"title": "$:/language/Help/build",
"description": "自動執行已組態的命令",
"text": "產生指定的建置目標為當前 wiki。若未指定任何建置目標,則產生所有可用的目標。\n\n```\n--build <target> [<target> ...]\n```\n\n建置目標在 wiki 資料夾的 `tiddlywiki.info` 檔案中定義。\n"
},
"$:/language/Help/clearpassword": {
"title": "$:/language/Help/clearpassword",
"description": "清除用於後續加密的密碼",
"text": "清除用於後續加密的密碼\n\n```\n--clearpassword\n```\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\n用法: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\n可用的命令:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\n取得關於某個命令的詳細説明:\n\n```\ntiddlywiki --help <command>\n```\n"
},
"$:/language/Help/deletetiddlers": {
"title": "$:/language/Help/deletetiddlers",
"description": "刪除一組條目",
"text": "<<.from-version \"5.1.20\">> 刪除由篩選器標識的一組條目。\n\n```\n--deletetiddlers <filter>\n```\n"
},
"$:/language/Help/editions": {
"title": "$:/language/Help/editions",
"description": "列出可用的 TiddlyWiki 版本",
"text": "列出可用版本的名稱和描述。您可以用 `--init` 命令建立一個指定版本的新維基。\n\n```\n--editions\n```\n"
},
"$:/language/Help/fetch": {
"title": "$:/language/Help/fetch",
"description": "通過網址從維基擷取條目",
"text": "通過 HTTP/HTTPS 擷取一個或多個檔案,並導入符合篩選器的條目,可選的轉換傳入的名稱。\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\n \"file\" 和 \"files\" 選項擷取指定的檔案,並嘗試導入其中的條目(與將檔案拖動到瀏覽器視窗中的處理相同)。 \"raw-file\" 和 \"raw-files\" 變選項擷取指定的檔案,並將原始檔案資料存儲於條目,而不套用導入邏輯。\n\n使用 \"file\" and \"raw-file\" 選項為僅擷取單個檔案,且第一個參數為要讀取檔案的網址。\n\n使用 \"files\" 和 \"raw-files\" 選項為擷取多個檔案,且第一個參數是一個產生要讀取檔案的網址清單的篩選器。例如,給定標籤為 \"remote-server\" 的一組具有欄位 \"url\" 的條目,篩選器 `[tag[remote-server]get[url]]` 將取回所有可用的網址。\n\n對於 \"file\" 和 \"files\" 選項,the `<import-filter>` 參數指定一個篩選器,用於確定要導入哪些條目。如果未提供,則預設為 `[all[tiddlers]]`。\n\n對於所有選項,`<transform-filter>` 參數指定一個可選的篩選器,用於轉換導入條目的名稱。例如,`[addprefix[$:/myimports/]]` 會將前綴 `$:/myimports/` 加至每個名稱。\n\n於 `--fetch` 之前使用 `--verbose` 命令,將在導入期間輸出進度資訊。\n\n請注意,TiddlyWiki 不會擷取一個已經載入插件的舊版本。\n\n以下範例從 https://tiddlywiki.com 取回所有非系統條目,並將其儲存到一個 JSON 檔案:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\n以下範例從 https://tiddlywiki.com 取回 \"favicon\" 檔案,並將其儲存在名為 \"output.ico\" 的檔案中。請注意,在 \"--fetch\" 命令中引用的中間條目 \"Icon Tiddler\",因為它被用作轉換篩選器來替換預設的名稱,而 \"--savetiddler\" 命令沒有引號,因為它是直接用作標題。\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "顯示 TiddlyWiki 命令的説明",
"text": "顯示命令的説明文字:\n\n```\n--help [<command>]\n```\n\n若省略命令名稱,則顯示可用命令的清單。\n"
},
"$:/language/Help/import": {
"title": "$:/language/Help/import",
"description": "從檔案導入條目",
"text": "從 TiddlyWiki 檔案 (`.html`)、`.tiddler`、`.tid`、`.json` 或其他本機檔案導入條目。必須明確指定解串器,而不像 `load` 命令,從檔案的副檔名推斷解串器。\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\n核心的解串器包括:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\n導入的條目名稱,預設為檔名。\n\n編碼預設為 \"utf8\",但用於導入二進位檔案可以是 \"base64\"。\n\n請注意,TiddlyWiki 不會導入舊版本的已載入插件。\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "初始化一個新的 wiki 資料夾",
"text": "初始化一個空的 [[WikiFolder|WikiFolders]] 的指定版本的副本。\n\n```\n--init <edition> [<edition> ...]\n```\n\n例如:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\n注意:\n\n* 若有需要,將建立 wiki 資料夾目錄\n* 其中 \"edition\" 預設為 ''empty''\n* 若 wiki 資料夾不是空的,則初始化命令將失敗\n* 初始化命令會刪除 'tiddlywiki.info' 檔內所有 'includeWikis' 的定義。\n* 當指定多個版本時,這些版本於初始化後,將覆寫早期版本共用的所有檔案 (故此最終的 `tiddlywiki.info` 檔案將是從最近的版本複製而得)\n* `--editions` 傳回所有可用版本的清單。\n"
},
"$:/language/Help/listen": {
"title": "$:/language/Help/listen",
"description": "為 TiddlyWiki 提供一個 HTTP 伺服器介面",
"text": "通過 HTTP 提供一個維基服務。\n\nlisten 命令使用[[命名的命令參數|NamedCommandParameters]]:\n\n```\n--listen [<name>=<value>]...\n```\n\n所有參數都是可選的, 具有安全的預設值, 可以按任意順序指定。認可的參數有:\n\n* ''host'' - 可選的主機名稱, (預設為 \"127.0.0.1\" 或名為 \"localhost\")\n* ''path-prefix'' - 可選的路徑前綴\n* ''port'' - 偵聽的埠號;非數值會被解譯為一個系統環境變數,從其中提取埠號 (預設為 \"8080\")\n* ''credentials'' - 憑證 CSV 檔案的路徑名(相對於維基資料夾)\n* ''anon-username'' - 匿名使用者的編輯署名\n* ''username'' - 可選的基本驗證使用者名稱\n* ''password'' - 可選的基本驗證密碼\n* ''authenticated-user-header'' - 可選的標頭名稱,用於受信任身份驗證\n* ''readers'' - 允許讀取此維基,以逗號分隔的使用者名稱的清單\n* ''writers'' - 允許寫入此維基,以逗號分隔的使用者名稱的清單\n* ''csrf-disable'' - 設定為 \"yes\" 以停用 CSRF 檢查 (預設為 \"no\")\n* ''sse-enabled'' - 設定為 \"yes\" 以啟用伺服器傳送的事件 (預設為 \"no\")\n* ''root-tiddler'' - 服務的基本條目 (預設為 \"$:/core/save/all\")\n* ''root-render-type'' - 呈現的基本條目的內容類型 (預設為 \"text/plain\")\n* ''root-serve-type'' - 服務的基本條目的內容類型 (預設為 \"text/html\")\n* ''tls-cert'' - TLS 證書檔案的路徑名(相對於維基資料夾)\n* ''tls-key'' - TLS 密鑰檔案的路徑名(相對於維基資料夾)\n* ''debug-level'' - 可選的偵錯層級;設定為 \"debug\" 來檢視請求的詳細資訊;(預設為 \"none\")\n* ''gzip'' - 設為 \"yes\" 以啟用某些 http 端點的 gzip 壓縮 (預設為 \"no\")\n* ''use-browser-cache'' - 設定為 \"yes\" ,允許瀏覽器快取回應,以節省頻寬(預設值為 \"no\")\n\n有關向整個本地網路開啟實例的資訊,以及可能的安全問題,請參閱 TiddlyWiki.com 的 WebServer 條目。\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "從檔案中載入條目",
"text": "從 TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` 或其他本機檔案載入條目。應用的處理程序取決於導入檔案的副檔名。如果您需要明確指定解串器和編碼,請改用 `import` 命令。\n\n```\n--load <filepath> [noerror]\n--load <dirpath> [noerror]\n```\n\n預設情況下, 如果未找到條目,load 命令會引發錯誤。通過提供可選的 \"noerror\" 參數可以抑制該錯誤。\n\n從已加密的 TiddlyWiki 檔案中載入條目,須使用 PasswordCommand 指定密碼,例如:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\n請注意 TiddlyWiki 將不載入舊版本的已掛載的插件。\n"
},
"$:/language/Help/makelibrary": {
"title": "$:/language/Help/makelibrary",
"description": "構建升級處理所需的程式庫插件",
"text": "為升級處理構建 `$:/UpgradeLibrary` 條目。\n\n升級程式庫被格式化為一個插件類型為 `library` 的一般插件條目。它包含 TiddlyWiki5 存儲庫中所有可用的插件、佈景主題和語言包的副本。\n\n此命令僅供內部使用;它只是與使用者構建一個自訂的升級程式相關。\n\n```\n--makelibrary <title>\n```\n\n標題參數預設為 `$:/UpgradeLibrary`。\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "無此項目說明"
},
"$:/language/Help/output": {
"title": "$:/language/Help/output",
"description": "設定後續命令的基準輸出資料夾",
"text": "設定後續命令的基準輸出資料夾,預設為該版本資料夾的 `output` 子資料夾。\n\n```\n--output <pathname>\n```\n\n若指定的路徑是相對路徑,則它是被解析相對於當前的工作資料夾。例如:`--output .` 將輸出資料夾設定為當前工作資料夾。"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "設定用以加密的密碼",
"text": "設定用以加密的密碼\n\n```\n--password <password>\n```\n\n''請注意'':這不是用於提供 TiddlyWiki 具有密碼保護功能。相反地,請看 [[ServerCommand]] 的密碼選項說明。\n"
},
"$:/language/Help/render": {
"title": "$:/language/Help/render",
"description": "呈現個別條目到檔案",
"text": "呈現由篩選器標識的個別條目,並將結果儲存到指定的檔案。\n\n可選擇性地指定範本條目名稱。在此情況下,不是直接呈現每個條目,而是使用設為正在呈現的條目名稱的 \"currentTiddler\" 變數,來呈現範本條目。\n\n也可以選擇性地指定附加變數的名稱和值。\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [ [<name>] [<value>] ]*\n```\n\n* ''tiddler-filter'': 標識要呈現的條目的篩選器\n* ''filename-filter'': 可選的篩選器,轉換條目名稱至路徑名。如果省略,預設為 `[is[tiddler]addsuffix[.html]]`,其使用未改變的條目名稱為檔名\n* ''template'': 可選的範本,用於呈現每個條目\n* ''render-type'': 可選的呈現類型:`text/html` (預設值) 會傳回完整的 HTML 文字,而 `text/plain` 只會傳回文字內容 (即其忽略 HTML 標記與其他不可印出的資料)\n* ''name'': 可選的變數名稱\n* ''value'': 可選的變數值\n\n預設情況下,檔名被解析為相對於發行版資料夾的 `output` 子資料夾。`--output` 命令可用於將輸出指到一個不同的資料夾。\n\n附註:\n\n* 輸出資料夾不清除任何現有的檔案\n* 檔名的路徑中,任何不存在的資料夾,將自動建立。\n* 當正呈現的條目名稱中帶有空格,請注意同時使用命令列介面所要求的引號,與 TiddlyWiki 的雙重方括號:`--render \"[[Motovun Jack.jpg]]\"`\n* 所選的項目被設定為當前正在呈現的條目名稱,以此評估檔名篩選器,允條目名稱用作基礎計算的檔名。例如,`[encodeuricomponent[]addprefix[static/]]` 為每個條目名稱套用 URI 編碼,然後增加首碼 `static/`\n* `--render` 命令是已棄用的 `--rendertiddler` 和 `--rendertiddlers` 的一個更靈活的替代命令。\n\n範例:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- 呈現所有非系統條目為 \"tiddlers\" 子資料夾中的檔案,檔名為 URL 編碼的條目名稱和副檔名 HTML\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "呈現個別條目為指定的內容類型",
"text": "(請注意:`--rendertiddler` 命令已被棄用,而支援新的、更靈活得 `--render` 命令)\n\n呈現個別條目為指定的[[內容類型|ContentType]],預設為 `text/html` 且儲存為指定的檔名。\n\n還能可選地指定一個範本條目的名稱,在這種情況下,\"currentTiddler\" 變數設為正在呈現的條目 (第一個參數值) 與範本條目合併呈現。\n\n也能可選地指定附加變數的名稱與其值。\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\n預設情況下,檔名被解析為相對於發行版資料夾的 `output` 子資料夾。 `--output` 命令可以用於將輸出指定到一個不同的資料夾。\n\n自動建立在檔案名稱的路徑中任何缺少的資料夾。\n\n例如,以下命令通過使用核心範本 `$:/core/templates/exporters/JsonFile`,將所有符合篩選器 `[tag[done]]` 的條目儲存到名為 `output.json` 的 JSON 檔案。\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "呈現符合篩選條件的條目為指定的內容類型",
"text": "(請注意:`--rendertiddlers` 命令已被棄用,而支援新的、更靈活得 `--render` 命令)\n\n呈現符合篩選條的條目為指定的[[內容類型|ContentType]] (預設為 `text/html`) 與副檔名 (預設為 `.html`).\n\n```\n--rendertiddlers '<filter>' <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\n例如:\n\n```\n--rendertiddlers '[!is[system]]' $:/core/templates/static.tiddler.html ./static text/plain\n```\n\n預設情況下,路徑名被解析為相對於發行版資料夾的 `output` 子資料夾。 `--output` 命令可以用於將輸出指定到一個不同的資料夾。\n\n在目標資料夾中的任何檔案都會被刪除,除非指定 ''noclean'' 旗標。若缺少目標資料夾,則以遞迴方式建立。"
},
"$:/language/Help/save": {
"title": "$:/language/Help/save",
"description": "將個別原始條目儲存到檔案",
"text": "將篩選器標識的個別條目,以原始文字或二進位格式,儲存到指定的檔案。\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': 標識要儲存的條目的篩選器\n* ''filename-filter'': 可選的篩選器,轉換條目名稱至路徑名。如果省略,預設為 `[is[tiddler]]`,其使用未改變的條目名稱為檔名\n\n附註:\n\n* 輸出資料夾不清除任何現有的檔案\n* 檔名的路徑中,任何不存在的目錄,將自動建立。\n* 當正儲存的條目的名稱中帶有空格,請注意同時使用命令列介面所要求的引號,與 TiddlyWiki 的雙重方括號:`--save \"[[Motovun Jack.jpg]]\"`\n* 所選的項目被設定為當前正在儲存的條目名稱,以此評估檔案名篩選器,允條目名稱用作基礎計算的檔名。例如,`[encodeuricomponent[]addprefix[static/]]` 為每個條目名稱套用 URI 編碼,然後增加首碼 `static/`\n* `--save` 命令是已被棄用的 `--savetiddler` 和 `--savetiddlers` 的一個更靈活的替代命令。\n\n範例:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- 儲存所有非系統的圖像條目為 \"tiddlers\" 子資料夾中的檔案,檔名為 URL 編碼的條目名稱"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "將條目的原始內容儲存到一個檔案",
"text": "(請注意:`--savetiddler` 命令已被棄用,而支援新的、更靈活得 `--save` 命令)\n\n儲存個別條目的原始文字或二進位格式到指定的檔名。\n\n```\n--savetiddler <title> <filename>\n```\n\n預設情況下,檔名被解析為相對於發行版資料夾的 `output` 子資料夾。 `--output` 命令可以用於將輸出指定到一個不同的資料夾。\n\n自動建立在檔案名稱的路徑中任何缺少的資料夾。"
},
"$:/language/Help/savetiddlers": {
"title": "$:/language/Help/savetiddlers",
"description": "將一群條目的原始內容儲存到一個資料夾",
"text": "(請注意:`--savetiddlers` 命令已被棄用,而支援新的、更靈活得 `--save` 命令)\n\n儲存一群條目的原始文字或二進位格式到指定的資料夾。\n\n```\n--savetiddlers <filter> <pathname> [noclean]\n```\n\n預設情況下,路徑名被解析為相對於發行版資料夾的 `output` 子資料夾。 `--output` 命令可以用於將輸出指定到一個不同的資料夾。\n\n儲存指定的檔案之前,會先清除輸出目錄的現有檔案。可藉由指定 ''noclean'' 旗標,停用該刪除動作。\n\n自動建立在路徑中任何缺少的資料夾。\n"
},
"$:/language/Help/savewikifolder": {
"title": "$:/language/Help/savewikifolder",
"description": "將維基儲存到一個新的維基資料夾",
"text": "<<.from-version \"5.1.20\">> 將當前維基儲存為一個維基資料夾,包含條目、插件和配置:\n\n```\n--savewikifolder <wikifolderpath> [<filter>]\n```\n\n* 目標維基資料夾必須為空或不存在\n* 篩選器指定應包括哪些條目。其為可選,預設為 `[all[tiddlers]]`\n* 官方插件庫中的插件,將替換為 `tiddlywiki.info` 檔案中引用到的插件\n* 自訂插件將解壓縮到自己的資料夾中\n\n常見的用法是將一個 TiddlyWiki HTML 檔案轉換成維基資料夾:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\n```\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "提供一個 HTTP 伺服器介面到 TiddlyWiki (已棄用,支持新的 listen 命令)",
"text": "在伺服器中內建 TiddlyWiki5 是非常簡單。雖與 TiddlyWeb 相容,但不支援許多健全網際網路面向的使用方式所需的功能。\n\n提供呈現一個指定條目,也可將個別條目編碼成 JSON,且支援基本的 HTTP 操作 `GET`、`PUT` 及 `DELETE`.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\n參數說明:\n\n* ''port'' - 要偵聽的埠號;非數值會被解譯為一個系統環境變數,從其中提取埠號 (預設為 \"8080\")\n* ''root-tiddler'' - 服務的基本條目 (預設為 \"$:/core/save/all\")\n* ''root-render-type'' - 呈現的基本條目的內容類型 (預設為 \"text/plain\")\n* ''root-serve-type'' - 服務的基本條目的內容類型 (預設為 \"text/html\")\n* ''username'' - 預設的編輯者署名\n* ''password'' - 可選的基本驗證密碼\n* ''host'' - 可選的主機名稱, (預設為 \"127.0.0.1\" 或名為 \"localhost\")\n* ''path-prefix'' - 可選的的路徑前綴\n* ''debug-level'' - 可選的偵錯層級;設定為 \"debug\" 來檢視請求的詳細資訊;(預設為 \"none\")\n\n若指定密碼參數,瀏覽器將提示使用者輸入帳號與密碼。注意,密碼係以明碼方式傳遞,應只在受信任的網路或 HTTPS 上使用。\n\n例如:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\n若您需要設定主機名稱或路徑前綴,而不要求輸入密碼,則可以指定空字串的使用者名和密碼。\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\n使用這樣的位址,會將您的系統暴露給本地網路。有關向整個本地網路開啟實例的資訊,以及可能的安全問題,請參閱 TiddlyWiki.com 的 WebServer 條目。\n\n同時執行多個 TiddlyWiki 伺服器,須分別指定不同的埠號。使用環境變數,有助於將埠號傳遞給 Node.js 進程。本示例引用一個名為 \"MY_PORT_NUMBER\" 的環境變數:\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```"
},
"$:/language/Help/setfield": {
"title": "$:/language/Help/setfield",
"description": "準備用於外部條目",
"text": "//請注意此命令是試驗性的,且可能會更改或在最終定稿前被替換//\n\n設定一群條目的指定欄位到 wikifying 範本條目的結果,其中的 `currentTiddler` 變數設定為各該條目。\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\n參數說明:\n\n* ''filter'' - 受影響的辨識條目的篩選條件\n* ''fieldname'' - 要修改的欄位(預設為 \"text\")\n* ''templatetitle'' - 該條目 wikify 到指定欄位。若為空白或丟失,則刪除指定的欄位\n* ''rendertype'' - 要呈現的文本類型(預設為 \"text/plain\"; \"text/html\" 可以用於包含 HTML 標記))\n"
},
"$:/language/Help/unpackplugin": {
"title": "$:/language/Help/unpackplugin",
"description": "從插件解開附屬的條目",
"text": "提取插件的附屬條目,將其建立為一般條目:\n\n```\n--unpackplugin <title>\n```\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "觸發詳細的輸出模式",
"text": "觸發顯示詳細的命令執行過程,可用於偵錯\n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "顯示 TiddlyWiki 的版本編號",
"text": "顯示 TiddlyWiki 的版本編號。\n\n```\n--version\n```\n"
},
"$:/languages/zh-Hant/icon": {
"title": "$:/languages/zh-Hant/icon",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg>\n<svg width=\"900\" height=\"600\" viewBox=\"-60 -40 240 160\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <rect x=\"-60\" y=\"-40\" width=\"100%\" height=\"100%\" fill=\"#fe0000\"/>\n <rect x=\"-60\" y=\"-40\" width=\"50%\" height=\"50%\" fill=\"#000095\"/>\n <path id=\"four_rays\" d=\"M 8,0 L 0,30 L -8,0 L 0,-30 M 0,8 L 30,0 L 0,-8 L -30,0\" fill=\"#fff\"/>\n <use xlink:href=\"#four_rays\" transform=\"rotate(30)\"/>\n <use xlink:href=\"#four_rays\" transform=\"rotate(60)\"/>\n <circle r=\"17\" fill=\"#000095\"/>\n <circle r=\"15\" fill=\"#fff\"/>\n</svg>"
},
"$:/language/Import/Editor/Import/Heading": {
"title": "$:/language/Import/Editor/Import/Heading",
"text": "導入圖像並將其插入至編輯器。"
},
"$:/language/Import/Imported/Hint": {
"title": "$:/language/Import/Imported/Hint",
"text": "下列條目已被導入:"
},
"$:/language/Import/Listing/Cancel/Caption": {
"title": "$:/language/Import/Listing/Cancel/Caption",
"text": "取消"
},
"$:/language/Import/Listing/Hint": {
"title": "$:/language/Import/Listing/Hint",
"text": "這些條目已備妥導入:"
},
"$:/language/Import/Listing/Import/Caption": {
"title": "$:/language/Import/Listing/Import/Caption",
"text": "導入"
},
"$:/language/Import/Listing/Select/Caption": {
"title": "$:/language/Import/Listing/Select/Caption",
"text": "選擇"
},
"$:/language/Import/Listing/Status/Caption": {
"title": "$:/language/Import/Listing/Status/Caption",
"text": "狀態"
},
"$:/language/Import/Listing/Title/Caption": {
"title": "$:/language/Import/Listing/Title/Caption",
"text": "條目"
},
"$:/language/Import/Listing/Preview": {
"title": "$:/language/Import/Listing/Preview",
"text": "預覽:"
},
"$:/language/Import/Listing/Preview/Text": {
"title": "$:/language/Import/Listing/Preview/Text",
"text": "文字"
},
"$:/language/Import/Listing/Preview/TextRaw": {
"title": "$:/language/Import/Listing/Preview/TextRaw",
"text": "文字 (原始)"
},
"$:/language/Import/Listing/Preview/Fields": {
"title": "$:/language/Import/Listing/Preview/Fields",
"text": "欄位"
},
"$:/language/Import/Listing/Preview/Diff": {
"title": "$:/language/Import/Listing/Preview/Diff",
"text": "差異"
},
"$:/language/Import/Listing/Preview/DiffFields": {
"title": "$:/language/Import/Listing/Preview/DiffFields",
"text": "差異 (欄位)"
},
"$:/language/Import/Listing/Rename/Prompt": {
"title": "$:/language/Import/Listing/Rename/Prompt",
"text": "重新命名為:"
},
"$:/language/Import/Listing/Rename/Tooltip": {
"title": "$:/language/Import/Listing/Rename/Tooltip",
"text": "導入前重新命名條目"
},
"$:/language/Import/Listing/Rename/ConfirmRename": {
"title": "$:/language/Import/Listing/Rename/ConfirmRename",
"text": "重新命名條目"
},
"$:/language/Import/Listing/Rename/CancelRename": {
"title": "$:/language/Import/Listing/Rename/CancelRename",
"text": "取消"
},
"$:/language/Import/Listing/Rename/OverwriteWarning": {
"title": "$:/language/Import/Listing/Rename/OverwriteWarning",
"text": "具有此標題的條目已存在。"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
"text": "封鎖的不相容或過時插件。"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
"text": "封鎖的插件 (由於傳入的 <<incoming>> 不比現有版本 <<existing>> 新)。"
},
"$:/language/Import/Upgrader/Plugins/Upgraded": {
"title": "$:/language/Import/Upgrader/Plugins/Upgraded",
"text": "升級插件,從 <<incoming>> 到 <<upgraded>>。"
},
"$:/language/Import/Upgrader/State/Suppressed": {
"title": "$:/language/Import/Upgrader/State/Suppressed",
"text": "封鎖的暫存狀態條目。"
},
"$:/language/Import/Upgrader/System/Disabled": {
"title": "$:/language/Import/Upgrader/System/Disabled",
"text": "停用系統條目。"
},
"$:/language/Import/Upgrader/System/Suppressed": {
"title": "$:/language/Import/Upgrader/System/Suppressed",
"text": "封鎖的系統條目。"
},
"$:/language/Import/Upgrader/System/Warning": {
"title": "$:/language/Import/Upgrader/System/Warning",
"text": "核心模組條目。"
},
"$:/language/Import/Upgrader/System/Alert": {
"title": "$:/language/Import/Upgrader/System/Alert",
"text": "您即將導入一個條目會覆蓋一個核心模組條目。不建議這樣做,因為可能會使系統不穩定。"
},
"$:/language/Import/Upgrader/ThemeTweaks/Created": {
"title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
"text": "從 <$text text=<<from>>/> 遷移佈景主題。"
},
"$:/language/Import/Upgrader/Tiddler/Disabled": {
"title": "$:/language/Import/Upgrader/Tiddler/Disabled",
"text": "停用條目。"
},
"$:/language/Import/Upgrader/Tiddler/Selected": {
"title": "$:/language/Import/Upgrader/Tiddler/Selected",
"text": "使用者選定。"
},
"$:/language/Import/Upgrader/Tiddler/Unselected": {
"title": "$:/language/Import/Upgrader/Tiddler/Unselected",
"text": "未選定的條目。"
},
"$:/language/AboveStory/ClassicPlugin/Warning": {
"title": "$:/language/AboveStory/ClassicPlugin/Warning",
"text": "您似乎要載入為 ~TiddlyWiki 經典版設計的插件。請注意,[[這些插件無法運行於 TiddlyWiki 5.x.x 版|https://tiddlywiki.com/#TiddlyWikiClassic]]。偵測到 ~TiddlyWiki 經典版插件:"
},
"$:/language/BinaryWarning/Prompt": {
"title": "$:/language/BinaryWarning/Prompt",
"text": "此條目包含二進位資料"
},
"$:/language/ClassicWarning/Hint": {
"title": "$:/language/ClassicWarning/Hint",
"text": "此條目以經典版 TiddlyWiki 標記格式撰寫,不完全相容新版 TiddlyWiki 的格式,詳細資訊請參閱:https://tiddlywiki.com/static/Upgrading。"
},
"$:/language/ClassicWarning/Upgrade/Caption": {
"title": "$:/language/ClassicWarning/Upgrade/Caption",
"text": "升級"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "全部關閉"
},
"$:/language/ColourPicker/Recent": {
"title": "$:/language/ColourPicker/Recent",
"text": "最近︰"
},
"$:/language/ConfirmCancelTiddler": {
"title": "$:/language/ConfirmCancelTiddler",
"text": "您確定要放棄對條目 \"<$text text=<<title>>/>\" 的更改?"
},
"$:/language/ConfirmDeleteTiddler": {
"title": "$:/language/ConfirmDeleteTiddler",
"text": "您確定要刪除條目 \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmOverwriteTiddler": {
"title": "$:/language/ConfirmOverwriteTiddler",
"text": "您確定要覆寫條目 \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmEditShadowTiddler": {
"title": "$:/language/ConfirmEditShadowTiddler",
"text": "您即將要編輯預設條目,任何更改將會覆蓋預設的系統,使未來的升級不尋常。您確定要編輯 \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmAction": {
"title": "$:/language/ConfirmAction",
"text": "是否要繼續?"
},
"$:/language/Count": {
"title": "$:/language/Count",
"text": "計數"
},
"$:/language/DefaultNewTiddlerTitle": {
"title": "$:/language/DefaultNewTiddlerTitle",
"text": "新條目"
},
"$:/language/Diffs/CountMessage": {
"title": "$:/language/Diffs/CountMessage",
"text": "<<diff-count>> 個差異"
},
"$:/language/DropMessage": {
"title": "$:/language/DropMessage",
"text": "拖放到此處 (或按 ESC 鍵取消)"
},
"$:/language/Encryption/Cancel": {
"title": "$:/language/Encryption/Cancel",
"text": "取消"
},
"$:/language/Encryption/ConfirmClearPassword": {
"title": "$:/language/Encryption/ConfirmClearPassword",
"text": "您要清除密碼嗎?當儲存此維基時,這將刪除已套用的加密"
},
"$:/language/Encryption/Username": {
"title": "$:/language/Encryption/Username",
"text": "使用者名稱"
},
"$:/language/Encryption/Password": {
"title": "$:/language/Encryption/Password",
"text": "密碼"
},
"$:/language/Encryption/PromptSetPassword": {
"title": "$:/language/Encryption/PromptSetPassword",
"text": "為此 TiddlyWiki 設定一個新密碼"
},
"$:/language/Encryption/RepeatPassword": {
"title": "$:/language/Encryption/RepeatPassword",
"text": "重複輸入密碼"
},
"$:/language/Encryption/PasswordNoMatch": {
"title": "$:/language/Encryption/PasswordNoMatch",
"text": "密碼不匹配"
},
"$:/language/Encryption/SetPassword": {
"title": "$:/language/Encryption/SetPassword",
"text": "設定密碼"
},
"$:/language/Error/Caption": {
"title": "$:/language/Error/Caption",
"text": "錯誤"
},
"$:/language/Error/Filter": {
"title": "$:/language/Error/Filter",
"text": "篩選器錯誤"
},
"$:/language/Error/FilterRunPrefix": {
"title": "$:/language/Error/FilterRunPrefix",
"text": "篩選器錯誤:篩選器 run 的未知首碼"
},
"$:/language/Error/FilterSyntax": {
"title": "$:/language/Error/FilterSyntax",
"text": "篩選器運算式中的語法錯誤"
},
"$:/language/Error/FormatFilterOperator": {
"title": "$:/language/Error/FormatFilterOperator",
"text": "篩選器錯誤:`format` 篩選器運算子的未知尾碼"
},
"$:/language/Error/IsFilterOperator": {
"title": "$:/language/Error/IsFilterOperator",
"text": "篩選器錯誤︰'is' 篩選器運算子的未知運算元"
},
"$:/language/Error/LoadingPluginLibrary": {
"title": "$:/language/Error/LoadingPluginLibrary",
"text": "載入插件程式庫時,發生錯誤"
},
"$:/language/Error/NetworkErrorAlert": {
"title": "$:/language/Error/NetworkErrorAlert",
"text": "`<h2>''網路錯誤''</h2>與伺服器的連線似乎已中斷。這可能表示您的網路連線有問題。請嘗試恢復網路連線才能繼續。<br><br>''恢復連線時,所有未儲存的變更,將自動同步''。`"
},
"$:/language/Error/PutEditConflict": {
"title": "$:/language/Error/PutEditConflict",
"text": "伺服器上的檔案已更改"
},
"$:/language/Error/PutForbidden": {
"title": "$:/language/Error/PutForbidden",
"text": "沒有權限"
},
"$:/language/Error/PutUnauthorized": {
"title": "$:/language/Error/PutUnauthorized",
"text": "需要身份驗證"
},
"$:/language/Error/RecursiveTransclusion": {
"title": "$:/language/Error/RecursiveTransclusion",
"text": "於 transclude 小工具中的遞迴嵌入錯誤"
},
"$:/language/Error/RetrievingSkinny": {
"title": "$:/language/Error/RetrievingSkinny",
"text": "簡要條目清單擷取錯誤"
},
"$:/language/Error/SavingToTWEdit": {
"title": "$:/language/Error/SavingToTWEdit",
"text": "儲存到 TWEdit 時,發生錯誤"
},
"$:/language/Error/WhileSaving": {
"title": "$:/language/Error/WhileSaving",
"text": "儲存時,發生錯誤"
},
"$:/language/Error/XMLHttpRequest": {
"title": "$:/language/Error/XMLHttpRequest",
"text": "XMLHttpRequest 錯誤代碼"
},
"$:/language/InternalJavaScriptError/Title": {
"title": "$:/language/InternalJavaScriptError/Title",
"text": "內部的 JavaScript 錯誤"
},
"$:/language/InternalJavaScriptError/Hint": {
"title": "$:/language/InternalJavaScriptError/Hint",
"text": "喔,真是令人尷尬。建議刷新您的瀏覽器,重新啟動 TiddlyWiki"
},
"$:/language/InvalidFieldName": {
"title": "$:/language/InvalidFieldName",
"text": "欄位名稱 \"<$text text=<<fieldName>>/>\" 包含無效字元,欄位名稱只能包含小寫字母、數字、底線 (`_`)、 連接號 (`-`) 和小數點 (`.`)"
},
"$:/language/LayoutSwitcher/Description": {
"title": "$:/language/LayoutSwitcher/Description",
"text": "開啟版面切換器"
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"text": "<p>正在從 ''<$text text={{!!_canonical_uri}}/>'' 載入外部內容 ...</p><p>如果此訊息未消失,可能是條目內容類型與外部內容的類型不匹配,或是您可能正在使用的瀏覽器,不支援單檔式維基的外部內容。請參閱 https://tiddlywiki.com/#ExternalText</p>"
},
"$:/language/LoginToTiddlySpace": {
"title": "$:/language/LoginToTiddlySpace",
"text": "登入 TiddlySpace"
},
"$:/language/Manager/Controls/FilterByTag/None": {
"title": "$:/language/Manager/Controls/FilterByTag/None",
"text": "(無)"
},
"$:/language/Manager/Controls/FilterByTag/Prompt": {
"title": "$:/language/Manager/Controls/FilterByTag/Prompt",
"text": "依標籤篩選︰"
},
"$:/language/Manager/Controls/Order/Prompt": {
"title": "$:/language/Manager/Controls/Order/Prompt",
"text": "反向順序"
},
"$:/language/Manager/Controls/Search/Placeholder": {
"title": "$:/language/Manager/Controls/Search/Placeholder",
"text": "搜尋"
},
"$:/language/Manager/Controls/Search/Prompt": {
"title": "$:/language/Manager/Controls/Search/Prompt",
"text": "搜尋︰"
},
"$:/language/Manager/Controls/Show/Option/Tags": {
"title": "$:/language/Manager/Controls/Show/Option/Tags",
"text": "標籤"
},
"$:/language/Manager/Controls/Show/Option/Tiddlers": {
"title": "$:/language/Manager/Controls/Show/Option/Tiddlers",
"text": "條目"
},
"$:/language/Manager/Controls/Show/Prompt": {
"title": "$:/language/Manager/Controls/Show/Prompt",
"text": "顯示︰"
},
"$:/language/Manager/Controls/Sort/Prompt": {
"title": "$:/language/Manager/Controls/Sort/Prompt",
"text": "排序︰"
},
"$:/language/Manager/Item/Colour": {
"title": "$:/language/Manager/Item/Colour",
"text": "顏色"
},
"$:/language/Manager/Item/Fields": {
"title": "$:/language/Manager/Item/Fields",
"text": "欄位"
},
"$:/language/Manager/Item/Icon/None": {
"title": "$:/language/Manager/Item/Icon/None",
"text": "(無)"
},
"$:/language/Manager/Item/Icon": {
"title": "$:/language/Manager/Item/Icon",
"text": "圖示"
},
"$:/language/Manager/Item/RawText": {
"title": "$:/language/Manager/Item/RawText",
"text": "原始文字"
},
"$:/language/Manager/Item/Tags": {
"title": "$:/language/Manager/Item/Tags",
"text": "標籤"
},
"$:/language/Manager/Item/Tools": {
"title": "$:/language/Manager/Item/Tools",
"text": "工具"
},
"$:/language/Manager/Item/WikifiedText": {
"title": "$:/language/Manager/Item/WikifiedText",
"text": "Wikified 文字"
},
"$:/language/MissingTiddler/Hint": {
"title": "$:/language/MissingTiddler/Hint",
"text": "佚失條目 \"<$text text=<<currentTiddler>>/>\" - 點擊 {{||$:/core/ui/Buttons/edit}} 可建立此條目"
},
"$:/language/No": {
"title": "$:/language/No",
"text": "否"
},
"$:/language/OfficialPluginLibrary": {
"title": "$:/language/OfficialPluginLibrary",
"text": "~TiddlyWiki 官方插件程式庫"
},
"$:/language/OfficialPluginLibrary/Hint": {
"title": "$:/language/OfficialPluginLibrary/Hint",
"text": "此為在 tiddlywiki.com 的 ~TiddlyWiki 官方插件程式庫。由核心團隊維護的插件、主題和語言包。"
},
"$:/language/PageTemplate/Description": {
"title": "$:/language/PageTemplate/Description",
"text": "預設的 ~Tiddlywiki 佈局"
},
"$:/language/PageTemplate/Name": {
"title": "$:/language/PageTemplate/Name",
"text": "預設的 ~PageTemplate"
},
"$:/language/PluginReloadWarning": {
"title": "$:/language/PluginReloadWarning",
"text": "請儲存 {{$:/core/ui/Buttons/save-wiki}} 並刷新頁面 {{$:/core/ui/Buttons/refresh}} ,使 ~JavaScript 插件的更改生效"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "YYYY年0MM月0DD日"
},
"$:/language/Shortcuts/Input/Accept/Hint": {
"title": "$:/language/Shortcuts/Input/Accept/Hint",
"text": "接受選取的項目"
},
"$:/language/Shortcuts/Input/AcceptVariant/Hint": {
"title": "$:/language/Shortcuts/Input/AcceptVariant/Hint",
"text": "接受選取項目 (變種)"
},
"$:/language/Shortcuts/Input/AdvancedSearch/Hint": {
"title": "$:/language/Shortcuts/Input/AdvancedSearch/Hint",
"text": "從側邊欄搜尋欄位內開啟[[進階搜尋|$:/AdvancedSearch]]面板"
},
"$:/language/Shortcuts/Input/Cancel/Hint": {
"title": "$:/language/Shortcuts/Input/Cancel/Hint",
"text": "清除輸入欄位"
},
"$:/language/Shortcuts/Input/Down/Hint": {
"title": "$:/language/Shortcuts/Input/Down/Hint",
"text": "選擇下一個項目"
},
"$:/language/Shortcuts/Input/Tab-Left/Hint": {
"title": "$:/language/Shortcuts/Input/Tab-Left/Hint",
"text": "選擇上一個頁籤"
},
"$:/language/Shortcuts/Input/Tab-Right/Hint": {
"title": "$:/language/Shortcuts/Input/Tab-Right/Hint",
"text": "選擇下一個頁籤"
},
"$:/language/Shortcuts/Input/Up/Hint": {
"title": "$:/language/Shortcuts/Input/Up/Hint",
"text": "選擇前一個項目"
},
"$:/language/Shortcuts/SidebarLayout/Hint": {
"title": "$:/language/Shortcuts/SidebarLayout/Hint",
"text": "更改側邊欄版面"
},
"$:/language/Switcher/Subtitle/theme": {
"title": "$:/language/Switcher/Subtitle/theme",
"text": "切換佈景主題"
},
"$:/language/Switcher/Subtitle/layout": {
"title": "$:/language/Switcher/Subtitle/layout",
"text": "切換版面"
},
"$:/language/Switcher/Subtitle/language": {
"title": "$:/language/Switcher/Subtitle/language",
"text": "切換語言"
},
"$:/language/Switcher/Subtitle/palette": {
"title": "$:/language/Switcher/Subtitle/palette",
"text": "切換調色盤"
},
"$:/language/SystemTiddler/Tooltip": {
"title": "$:/language/SystemTiddler/Tooltip",
"text": "此為系統條目"
},
"$:/language/SystemTiddlers/Include/Prompt": {
"title": "$:/language/SystemTiddlers/Include/Prompt",
"text": "包括系統條目"
},
"$:/language/TagManager/Colour/Heading": {
"title": "$:/language/TagManager/Colour/Heading",
"text": "顏色"
},
"$:/language/TagManager/Count/Heading": {
"title": "$:/language/TagManager/Count/Heading",
"text": "計數"
},
"$:/language/TagManager/Icon/Heading": {
"title": "$:/language/TagManager/Icon/Heading",
"text": "圖示"
},
"$:/language/TagManager/Icons/None": {
"title": "$:/language/TagManager/Icons/None",
"text": "無"
},
"$:/language/TagManager/Info/Heading": {
"title": "$:/language/TagManager/Info/Heading",
"text": "資訊"
},
"$:/language/TagManager/Tag/Heading": {
"title": "$:/language/TagManager/Tag/Heading",
"text": "標籤"
},
"$:/language/Tiddler/DateFormat": {
"title": "$:/language/Tiddler/DateFormat",
"text": "YYYY年0MM月0DD日 0hh:0mm"
},
"$:/language/UnsavedChangesWarning": {
"title": "$:/language/UnsavedChangesWarning",
"text": "在此 TiddlyWiki 您有尚未儲存的變更"
},
"$:/language/Yes": {
"title": "$:/language/Yes",
"text": "是"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"type": "text/vnd.tiddlywiki",
"subtitle": "Download changes",
"footer": "<$button message=\"tm-close-tiddler\">關閉</$button>",
"help": "https://tiddlywiki.com/",
"text": "您的瀏覽器只支援手動儲存。\n\n要儲存更動的維基,右鍵點擊下方的下載鏈結,選擇\"下載檔案\"或\"儲存檔案\",然後選擇資料夾和檔名。\n\n//您可以藉由按一下 Ctrl 鍵(Windows)或 options/ alt 鍵(Mac OS X)中的鏈接,稍微加速操作。您不會被提示資料夾或檔名,您的瀏覽器可能無法辨認它的檔名 -- 在做其他任何事之前,您可能需要重新命名副檔名為 `.html` 的檔案。//\n\n在智慧型手機上,不允許下載檔案,但您可以標記鏈結,然後從一台可以正常保存維基的桌上型電腦的維基同步你的書籤。"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"type": "text/vnd.tiddlywiki",
"subtitle": "Save your work",
"footer": "<$button message=\"tm-close-tiddler\">關閉</$button>",
"help": "https://tiddlywiki.com/static/SavingChanges.html",
"text": "您對此 wiki 的變更需被儲存為 ~TiddlyWiki HTML 檔案。\n\n!!! 桌面版瀏覽器\n\n# 從''檔案''選單點選 ''另存新檔''\n# 選定檔名及儲存位置\n#* 某些瀏覽器依然需要明確指定檔案格式為 ''Webpage, HTML only'' 或類似的。\n# 關閉此頁籤\n\n!!! 智慧手機版瀏覽器\n\n# 為此頁建立書籤\n#* 若您已設定 iCloud 或 Google 同步,該書籤將自動與之前開啟及儲存於您電腦的書籤同步。\n# 關閉此頁籤\n\n//若您再次於 Mobile Safari 開啟該書籤,將會再看到此訊息。若要繼續使用該檔案,只需點擊下列 ''關閉'' 按鈕//\n"
},
"$:/config/NewJournal/Title": {
"title": "$:/config/NewJournal/Title",
"text": "YYYY年0MM月0DD日"
},
"$:/config/NewJournal/Text": {
"title": "$:/config/NewJournal/Text",
"text": ""
},
"$:/config/NewJournal/Tags": {
"title": "$:/config/NewJournal/Tags",
"text": "日誌\n"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "已儲存 wiki"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "開始儲存 wiki"
},
"$:/language/Notifications/CopiedToClipboard/Succeeded": {
"title": "$:/language/Notifications/CopiedToClipboard/Succeeded",
"text": "已複製到剪貼簿!"
},
"$:/language/Notifications/CopiedToClipboard/Failed": {
"title": "$:/language/Notifications/CopiedToClipboard/Failed",
"text": "無法複製到剪貼簿!"
},
"$:/language/Search/DefaultResults/Caption": {
"title": "$:/language/Search/DefaultResults/Caption",
"text": "列表"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "篩選"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "以[[篩選表達式|https://tiddlywiki.com/static/Filters.html]]搜尋"
},
"$:/language/Search/Filter/Matches": {
"title": "$:/language/Search/Filter/Matches",
"text": "//<small><<resultCount>> 個條目符合條件</small>//"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><<resultCount>> 個條目符合條件</small>//"
},
"$:/language/Search/Matches/All": {
"title": "$:/language/Search/Matches/All",
"text": "所有匹配:"
},
"$:/language/Search/Matches/Title": {
"title": "$:/language/Search/Matches/Title",
"text": "條目名稱匹配:"
},
"$:/language/Search/Search": {
"title": "$:/language/Search/Search",
"text": "搜尋"
},
"$:/language/Search/Search/TooShort": {
"title": "$:/language/Search/Search/TooShort",
"text": "搜尋文字太短"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "預設"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "尋找預設條目"
},
"$:/language/Search/Shadows/Matches": {
"title": "$:/language/Search/Shadows/Matches",
"text": "//<small><<resultCount>> 個條目符合條件</small>//"
},
"$:/language/Search/Standard/Caption": {
"title": "$:/language/Search/Standard/Caption",
"text": "標準"
},
"$:/language/Search/Standard/Hint": {
"title": "$:/language/Search/Standard/Hint",
"text": "尋找一般條目"
},
"$:/language/Search/Standard/Matches": {
"title": "$:/language/Search/Standard/Matches",
"text": "//<small><<resultCount>> 個條目符合條件</small>//"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "系統"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "尋找系統條目"
},
"$:/language/Search/System/Matches": {
"title": "$:/language/Search/System/Matches",
"text": "//<small><<resultCount>> 個條目符合條件</small>//"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "全部"
},
"$:/language/SideBar/Contents/Caption": {
"title": "$:/language/SideBar/Contents/Caption",
"text": "目錄"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "草稿"
},
"$:/language/SideBar/Explorer/Caption": {
"title": "$:/language/SideBar/Explorer/Caption",
"text": "探索"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "佚失"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "更多"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "開啟"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "孤立"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "最近"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "預設"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "系統"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "標籤"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "未設標籤"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "工具"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "類型"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "一個非線性的網頁式筆記"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "我的 ~TiddlyWiki"
},
"$:/language/Snippets/ListByTag": {
"title": "$:/language/Snippets/ListByTag",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "依標籤篩選的條目列表",
"text": "<<list-links \"[tag[task]sort[title]]\">>\n"
},
"$:/language/Snippets/MacroDefinition": {
"title": "$:/language/Snippets/MacroDefinition",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "巨集的定義",
"text": "\\define macroName(param1:\"預設值\",param2)\n巨集的內容\n\\end\n"
},
"$:/language/Snippets/Table4x3": {
"title": "$:/language/Snippets/Table4x3",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "4 x 3 的表格",
"text": "|! | !一 | !二 | !三 | !四 |\n|! 1| | | | |\n|! 2| | | | |\n|! 3 | | | | |\n"
},
"$:/language/Snippets/TableOfContents": {
"title": "$:/language/Snippets/TableOfContents",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "目錄",
"text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
},
"$:/language/ThemeTweaks/ThemeTweaks": {
"title": "$:/language/ThemeTweaks/ThemeTweaks",
"text": "主題調整"
},
"$:/language/ThemeTweaks/ThemeTweaks/Hint": {
"title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
"text": "您可以調整 ''Vanilla'' 佈景主題的某些樣貌。"
},
"$:/language/ThemeTweaks/Options": {
"title": "$:/language/ThemeTweaks/Options",
"text": "選項"
},
"$:/language/ThemeTweaks/Options/SidebarLayout": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout",
"text": "側邊欄佈局"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
"text": "固定故事,浮動側邊欄"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
"text": "浮動故事,固定側邊欄"
},
"$:/language/ThemeTweaks/Options/StickyTitles": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles",
"text": "置頂標題"
},
"$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
"text": "使條目名稱\"黏著\"於瀏覽器視窗的頂端"
},
"$:/language/ThemeTweaks/Options/CodeWrapping": {
"title": "$:/language/ThemeTweaks/Options/CodeWrapping",
"text": "在代碼區塊中折行"
},
"$:/language/ThemeTweaks/Settings": {
"title": "$:/language/ThemeTweaks/Settings",
"text": "設定"
},
"$:/language/ThemeTweaks/Settings/FontFamily": {
"title": "$:/language/ThemeTweaks/Settings/FontFamily",
"text": "字型"
},
"$:/language/ThemeTweaks/Settings/CodeFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
"text": "代碼字型"
},
"$:/language/ThemeTweaks/Settings/EditorFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/EditorFontFamily",
"text": "編輯器字型"
},
"$:/language/ThemeTweaks/Settings/BackgroundImage": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
"text": "頁面背景圖像"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
"text": "頁面背景圖像附屬"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
"text": "隨條目捲動"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
"text": "固定於視窗"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
"text": "頁面背景圖像大小"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
"text": "自動"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
"text": "覆蓋"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
"text": "包含"
},
"$:/language/ThemeTweaks/Metrics": {
"title": "$:/language/ThemeTweaks/Metrics",
"text": "大小"
},
"$:/language/ThemeTweaks/Metrics/FontSize": {
"title": "$:/language/ThemeTweaks/Metrics/FontSize",
"text": "字體大小"
},
"$:/language/ThemeTweaks/Metrics/LineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/LineHeight",
"text": "行高"
},
"$:/language/ThemeTweaks/Metrics/BodyFontSize": {
"title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
"text": "條目本文的字體大小"
},
"$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
"text": "條目本文的行高"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
"text": "故事左側位置"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
"text": "故事河(條目區)的左邊緣與頁面左端的間距"
},
"$:/language/ThemeTweaks/Metrics/StoryTop": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop",
"text": "故事頂端位置"
},
"$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
"text": "故事河(條目區)的上邊緣與頁面頂端的間距"
},
"$:/language/ThemeTweaks/Metrics/StoryRight": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight",
"text": "故事右側位置"
},
"$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
"text": "側邊欄的左邊緣與頁面左端的間距"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
"text": "故事的寬度"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
"text": "故事河的整體寬度"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
"text": "條目寬度"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
"text": "在故事河內"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
"text": "側邊欄中斷點"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
"text": "故事河和側邊欄會並排顯示的最小頁面寬度"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
"text": "側邊欄寬度"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
"text": "在浮動-固定佈局中,側邊欄的寬度"
},
"$:/language/TiddlerInfo/Advanced/Caption": {
"title": "$:/language/TiddlerInfo/Advanced/Caption",
"text": "進階"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
"text": "無資訊"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
"text": "插件明細"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
"text": "此插件包含以下預設條目:"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
"text": "預設條目狀態"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
"text": "<$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> 不是一個預設條目"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
"text": "<$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> 是一個預設條目"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
"text": "此條目定義於插件 <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
"text": "已被一般條目覆寫"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "欄位"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "列表"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "此條目無指定列表"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "被列於"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "此條目未出現於其他條目的列表中"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "反向連結"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "無條目連結至此"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "子條目"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "無任何條目以此條目之標題為標籤"
},
"$:/language/TiddlerInfo/Tools/Caption": {
"title": "$:/language/TiddlerInfo/Tools/Caption",
"text": "工具"
},
"$:/language/Docs/Types/application/javascript": {
"title": "$:/language/Docs/Types/application/javascript",
"description": "JavaScript 程式碼",
"name": "application/javascript",
"group": "開發者"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON 資料",
"name": "application/json",
"group": "開發者"
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "資料字典",
"name": "application/x-tiddler-dictionary",
"group": "開發者"
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF 圖片",
"name": "image/gif",
"group": "圖片"
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG 圖片",
"name": "image/jpeg",
"group": "圖片"
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG 圖片",
"name": "image/png",
"group": "圖片"
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "結構式向量圖",
"name": "image/svg+xml",
"group": "圖片"
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "圖示",
"name": "image/x-icon",
"group": "圖片"
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "靜態樣式",
"name": "text/css",
"group": "開發者"
},
"$:/language/Docs/Types/text/html": {
"title": "$:/language/Docs/Types/text/html",
"description": "HTML 標記",
"name": "text/html",
"group": "文字"
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "純文字",
"name": "text/plain",
"group": "文字"
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "TiddlyWiki 5",
"name": "text/vnd.tiddlywiki",
"group": "文字"
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "TiddlyWiki 2",
"name": "text/x-tiddlywiki",
"group": "文字"
}
}
}
此为 TiddlyWiki 介面与信息的正体中文翻译插件
目前由 {{$:/languages/zh-Hant!!author}} 维护
此為 TiddlyWiki 介面與訊息的正體中文翻譯插件
目前由 {{$:/languages/zh-Hant!!author}} 維護
{
"tiddlers": {
"$:/plugins/tiddlywiki/bibtex/deserializer.js": {
"title": "$:/plugins/tiddlywiki/bibtex/deserializer.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/bibtex/deserializer.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nXLSX file deserializer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar bibtexParse = require(\"$:/plugins/tiddlywiki/bibtex/bibtexParse.js\");\n\n/*\nParse an XLSX file into tiddlers\n*/\nexports[\"application/x-bibtex\"] = function(text,fields) {\n\tvar data,\n\t\tresults = [];\n\t// Parse the text\n\ttry {\n\t\tdata = bibtexParse.toJSON(text)\n\t} catch(ex) {\n\t\tdata = ex.toString();\n\t}\n\tif(typeof data === \"string\") {\n\t\treturn [{\n\t\t\ttitle: \"BibTeX import error\",\n\t\t\ttext: data\n\t\t}];\n\t}\n\t// Convert each entry\n\t$tw.utils.each(data,function(entry) {\n\t\tvar fields = {\n\t\t\ttitle: entry.citationKey,\n\t\t\t\"bibtex-entry-type\": entry.entryType\n\t\t};\n\t\t$tw.utils.each(entry.entryTags,function(value,name) {\n\t\t\tfields[\"bibtex-\" + name.toLowerCase()] = value;\n\t\t});\n\t\tresults.push(fields);\n\t});\n\t// Return the output tiddlers\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/plugins/tiddlywiki/bibtex/readme": {
"title": "$:/plugins/tiddlywiki/bibtex/readme",
"text": "The BibTeX plugin provides a deserializer that can convert bibliographic entries in `.bib` files into individual tiddlers.\n\nYou can use it in the browser by dragging and dropping a `.bib` file into the TiddlyWiki window. Under Node.js, use the `--load` command to load a `.bib` file.\n\nThe conversion is as follows:\n\n* `title` comes from citationKey\n* `bibtex-entry-type` comes from entryType\n* all `entryTags` are assigned to fields with the prefix `bibtex-`\n\nThe BibTeX plugin is based on the library [[bibtexParseJs by Henrik Muehe and Mikola Lysenko|https://github.com/ORCID/bibtexParseJs]].\n"
},
"$:/plugins/tiddlywiki/bibtex/bibtexParse.js": {
"text": "/* start bibtexParse 0.0.24 */\n\n//Original work by Henrik Muehe (c) 2010\n//\n//CommonJS port by Mikola Lysenko 2013\n//\n//Choice of compact (default) or pretty output from toBibtex:\n//\t\tNick Bailey, 2017.\n//\n//Port to Browser lib by ORCID / RCPETERS\n//\n//Issues:\n//no comment handling within strings\n//no string concatenation\n//no variable values yet\n//Grammar implemented here:\n//bibtex -> (string | preamble | comment | entry)*;\n//string -> '@STRING' '{' key_equals_value '}';\n//preamble -> '@PREAMBLE' '{' value '}';\n//comment -> '@COMMENT' '{' value '}';\n//entry -> '@' key '{' key ',' key_value_list '}';\n//key_value_list -> key_equals_value (',' key_equals_value)*;\n//key_equals_value -> key '=' value;\n//value -> value_quotes | value_braces | key;\n//value_quotes -> '\"' .*? '\"'; // not quite\n//value_braces -> '{' .*? '\"'; // not quite\n(function(exports) {\n\n function BibtexParser() {\n\n this.months = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\n this.notKey = [',','{','}',' ','='];\n this.pos = 0;\n this.input = \"\";\n this.entries = new Array();\n\n this.currentEntry = \"\";\n\n this.setInput = function(t) {\n this.input = t;\n };\n\n this.getEntries = function() {\n return this.entries;\n };\n\n this.isWhitespace = function(s) {\n return (s == ' ' || s == '\\r' || s == '\\t' || s == '\\n');\n };\n\n this.match = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n this.pos += s.length;\n } else {\n throw TypeError(\"Token mismatch: match\", \"expected \" + s + \", found \"\n + this.input.substring(this.pos));\n };\n this.skipWhitespace(canCommentOut);\n };\n\n this.tryMatch = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n return true;\n } else {\n return false;\n };\n this.skipWhitespace(canCommentOut);\n };\n\n /* when search for a match all text can be ignored, not just white space */\n this.matchAt = function() {\n while (this.input.length > this.pos && this.input[this.pos] != '@') {\n this.pos++;\n };\n\n if (this.input[this.pos] == '@') {\n return true;\n };\n return false;\n };\n\n this.skipWhitespace = function(canCommentOut) {\n while (this.isWhitespace(this.input[this.pos])) {\n this.pos++;\n };\n if (this.input[this.pos] == \"%\" && canCommentOut == true) {\n while (this.input[this.pos] != \"\\n\") {\n this.pos++;\n };\n this.skipWhitespace(canCommentOut);\n };\n };\n\n this.value_braces = function() {\n var bracecount = 0;\n this.match(\"{\", false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '}') {\n if (bracecount > 0) {\n bracecount--;\n } else {\n var end = this.pos;\n this.match(\"}\", false);\n return this.input.substring(start, end);\n };\n } else if (this.input[this.pos] == '{') {\n bracecount++;\n } else if (this.pos >= this.input.length - 1) {\n throw TypeError(\"Unterminated value: value_braces\");\n };\n };\n if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n };\n };\n\n this.value_comment = function() {\n var str = '';\n var brcktCnt = 0;\n while (!(this.tryMatch(\"}\", false) && brcktCnt == 0)) {\n str = str + this.input[this.pos];\n if (this.input[this.pos] == '{')\n brcktCnt++;\n if (this.input[this.pos] == '}')\n brcktCnt--;\n if (this.pos >= this.input.length - 1) {\n throw TypeError(\"Unterminated value: value_comment\", + this.input.substring(start));\n };\n this.pos++;\n };\n return str;\n };\n\n this.value_quotes = function() {\n this.match('\"', false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '\"') {\n var end = this.pos;\n this.match('\"', false);\n return this.input.substring(start, end);\n } else if (this.pos >= this.input.length - 1) {\n throw TypeError(\"Unterminated value: value_quotes\", this.input.substring(start));\n };\n }\n if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n };\n };\n\n this.single_value = function() {\n var start = this.pos;\n if (this.tryMatch(\"{\")) {\n return this.value_braces();\n } else if (this.tryMatch('\"')) {\n return this.value_quotes();\n } else {\n var k = this.key();\n if (k.match(\"^[0-9]+$\"))\n return k;\n else if (this.months.indexOf(k.toLowerCase()) >= 0)\n return k.toLowerCase();\n else\n throw \"Value expected: single_value\" + this.input.substring(start) + ' for key: ' + k;\n\n };\n };\n\n this.value = function() {\n var values = [];\n values.push(this.single_value());\n while (this.tryMatch(\"#\")) {\n this.match(\"#\");\n values.push(this.single_value());\n };\n return values.join(\"\");\n };\n\n this.key = function(optional) {\n var start = this.pos;\n while (true) {\n if (this.pos >= this.input.length) {\n throw TypeError(\"Runaway key: key\");\n };\n // а-яА-Я is Cyrillic\n //console.log(this.input[this.pos]);\n if (this.notKey.indexOf(this.input[this.pos]) >= 0) {\n if (optional && this.input[this.pos] != ',') {\n this.pos = start;\n return null;\n };\n return this.input.substring(start, this.pos);\n } else {\n this.pos++;\n\n };\n };\n };\n\n this.key_equals_value = function() {\n var key = this.key();\n if (this.tryMatch(\"=\")) {\n this.match(\"=\");\n var val = this.value();\n key = key.trim()\n return [ key, val ];\n } else {\n throw TypeError(\"Value expected, equals sign missing: key_equals_value\",\n this.input.substring(this.pos));\n };\n };\n\n this.key_value_list = function() {\n var kv = this.key_equals_value();\n this.currentEntry['entryTags'] = {};\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n while (this.tryMatch(\",\")) {\n this.match(\",\");\n // fixes problems with commas at the end of a list\n if (this.tryMatch(\"}\")) {\n break;\n }\n ;\n kv = this.key_equals_value();\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n };\n };\n\n this.entry_body = function(d) {\n this.currentEntry = {};\n this.currentEntry['citationKey'] = this.key(true);\n this.currentEntry['entryType'] = d.substring(1);\n if (this.currentEntry['citationKey'] != null) {\n this.match(\",\");\n }\n this.key_value_list();\n this.entries.push(this.currentEntry);\n };\n\n this.directive = function() {\n this.match(\"@\");\n return \"@\" + this.key();\n };\n\n this.preamble = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'PREAMBLE';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.comment = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'COMMENT';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.entry = function(d) {\n this.entry_body(d);\n };\n\n this.alernativeCitationKey = function () {\n this.entries.forEach(function (entry) {\n if (!entry.citationKey && entry.entryTags) {\n entry.citationKey = '';\n if (entry.entryTags.author) {\n entry.citationKey += entry.entryTags.author.split(',')[0] += ', ';\n }\n entry.citationKey += entry.entryTags.year;\n }\n });\n }\n\n this.bibtex = function() {\n while (this.matchAt()) {\n var d = this.directive();\n this.match(\"{\");\n if (d.toUpperCase() == \"@STRING\") {\n this.string();\n } else if (d.toUpperCase() == \"@PREAMBLE\") {\n this.preamble();\n } else if (d.toUpperCase() == \"@COMMENT\") {\n this.comment();\n } else {\n this.entry(d);\n }\n this.match(\"}\");\n };\n\n this.alernativeCitationKey();\n };\n };\n\n exports.toJSON = function(bibtex) {\n var b = new BibtexParser();\n b.setInput(bibtex);\n b.bibtex();\n return b.entries;\n };\n\n /* added during hackathon don't hate on me */\n /* Increased the amount of white-space to make entries\n * more attractive to humans. Pass compact as false\n * to enable */\n exports.toBibtex = function(json, compact) {\n if (compact === undefined) compact = true;\n var out = '';\n \n var entrysep = ',';\n var indent = '';\n if (!compact) {\n\t\t entrysep = ',\\n';\n\t\t indent = ' '; \n }\n for ( var i in json) {\n out += \"@\" + json[i].entryType;\n out += '{';\n if (json[i].citationKey)\n out += json[i].citationKey + entrysep;\n if (json[i].entry)\n out += json[i].entry ;\n if (json[i].entryTags) {\n var tags = indent;\n for (var jdx in json[i].entryTags) {\n if (tags.trim().length != 0)\n tags += entrysep + indent;\n tags += jdx + (compact ? '={' : ' = {') + \n json[i].entryTags[jdx] + '}';\n }\n out += tags;\n }\n out += compact ? '}\\n' : '\\n}\\n\\n';\n }\n return out;\n\n };\n\n})(typeof exports === 'undefined' ? this['bibtexParse'] = {} : exports);\n\n/* end bibtexParse */\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/bibtex/bibtexParse.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/bibtex/license": {
"text": "\nThe MIT License (MIT)\nCopyright (c) 2013 ORCID, Inc.\n\nCopyright (c) 2010 Henrik Muehe\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n",
"type": "text/plain",
"title": "$:/plugins/tiddlywiki/bibtex/license"
}
}
}
BibTeX 插件提供了一个反串行器,可以将 `.bib` 文件中的书目项目转换为单独的条目。
你可以在浏览器中使用它,通过拖放 `.bib` 文件到 TiddlyWiki 窗口。在 Node.js 环境下,使用 `--load` 命令,可以加载一个 `.bib` 文件。
转换如下所示︰
* `title` 来自 citationKey
* `bibtex-entry-type` 来自 entryType
* 所有 `entryTags`分配给具有前缀 `bibtex-` 的字段
BibTeX 插件基于 [[bibtexParseJs by Henrik Muehe and Mikola Lysenko|https://github.com/ORCID/bibtexParseJs]] 程序库。
{
"tiddlers": {
"$:/plugins/tiddlywiki/browser-sniff/sniff.js": {
"title": "$:/plugins/tiddlywiki/browser-sniff/sniff.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/browser-sniff/sniff.js\ntype: application/javascript\nmodule-type: info\n\nInitialise $:/info/browser tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tif($tw.browser) {\n\t\t// Mappings from tiddler titles (prefixed with \"$:/info/browser/\") to bowser.browser property name\n\t\tvar bowser = require(\"$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js\"),\n\t\t\tmappings = [\n\t\t\t\t[\"name\",\"name\",\"unknown\"],\n\t\t\t\t[\"version\",\"version\"],\n\t\t\t\t[\"is/webkit\",\"webkit\"],\n\t\t\t\t[\"is/gecko\",\"gecko\"],\n\t\t\t\t[\"is/chrome\",\"chrome\"],\n\t\t\t\t[\"is/firefox\",\"firefox\"],\n\t\t\t\t[\"is/ios\",\"ios\"],\n\t\t\t\t[\"is/iphone\",\"iphone\"],\n\t\t\t\t[\"is/ipad\",\"ipad\"],\n\t\t\t\t[\"is/ipod\",\"ios\"],\n\t\t\t\t[\"is/opera\",\"opera\"],\n\t\t\t\t[\"is/phantomjs\",\"phantomjs\"],\n\t\t\t\t[\"is/safari\",\"safari\"],\n\t\t\t\t[\"is/seamonkey\",\"seamonkey\"],\n\t\t\t\t[\"is/blackberry\",\"blackberry\"],\n\t\t\t\t[\"is/webos\",\"webos\"],\n\t\t\t\t[\"is/silk\",\"silk\"],\n\t\t\t\t[\"is/bada\",\"bada\"],\n\t\t\t\t[\"is/tizen\",\"tizen\"],\n\t\t\t\t[\"is/sailfish\",\"sailfish\"],\n\t\t\t\t[\"is/android\",\"android\"],\n\t\t\t\t[\"is/windowsphone\",\"windowsphone\"],\n\t\t\t\t[\"is/firefoxos\",\"firefoxos\"]\n\t\t\t];\n\t\t$tw.utils.each(mappings,function(mapping) {\n\t\t\tvar value = bowser.browser[mapping[1]];\n\t\t\tif(value === undefined) {\n\t\t\t\tvalue = mapping[2];\n\t\t\t}\n\t\t\tif(value === undefined) {\n\t\t\t\tvalue = false;\n\t\t\t}\n\t\t\tif(typeof value === \"boolean\") {\n\t\t\t\tvalue = mapBoolean(value);\n\t\t\t}\n\t\t\tinfoTiddlerFields.push({title: \"$:/info/browser/\" + mapping[0], text: value});\n\t\t});\n\t\t// Set $:/info/browser/name to the platform with some changes from Bowser\n\t\tvar platform = bowser.browser.name;\n\t\tif(\"iPad iPhone iPod\".split(\" \").indexOf(platform) !== -1) {\n\t\t\tplatform = \"iOS\";\n\t\t}\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/name\", text: platform});\n\t\t// Non-bowser settings for TiddlyFox and TiddlyDesktop\n\t\tvar hasTiddlyFox = !!document.getElementById(\"tiddlyfox-message-box\"), // Fails because message box is added after page load\n\t\t\tisTiddlyDesktop = false; // Can't detect it until we update TiddlyDesktop to have a distinct useragent string\n\t\t//infoTiddlerFields.push({title: \"$:/info/browser/has/tiddlyfox\", text: mapBoolean(hasTiddlyFox)});\n\t\t//infoTiddlerFields.push({title: \"$:/info/browser/is/tiddlydesktop\", text: mapBoolean(isTiddlyDesktop)});\n\t\tif(isTiddlyDesktop) {\n\t\t\tinfoTiddlerFields.push({title: \"$:/info/browser/name\", text: \"TiddlyDesktop\"});\n\t\t}\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "info"
},
"$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js": {
"text": "/*!\n * Bowser - a browser detector\n * https://github.com/ded/bowser\n * MIT License | (c) Dustin Diaz 2014\n */\n\n!function (name, definition) {\n if (typeof module != 'undefined' && module.exports) module.exports['browser'] = definition()\n else if (typeof define == 'function') define(definition)\n else this[name] = definition()\n}('bowser', function () {\n /**\n * See useragents.js for examples of navigator.userAgent\n */\n\n var t = true\n\n function detect(ua) {\n\n function getFirstMatch(regex) {\n var match = ua.match(regex);\n return (match && match.length > 1 && match[1]) || '';\n }\n\n var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()\n , likeAndroid = /like android/i.test(ua)\n , android = !likeAndroid && /android/i.test(ua)\n , versionIdentifier = getFirstMatch(/version\\/(\\d+(\\.\\d+)?)/i)\n , tablet = /tablet/i.test(ua)\n , mobile = !tablet && /[^-]mobi/i.test(ua)\n , result\n\n if (/opera|opr/i.test(ua)) {\n result = {\n name: 'Opera'\n , opera: t\n , version: versionIdentifier || getFirstMatch(/(?:opera|opr)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/windows phone/i.test(ua)) {\n result = {\n name: 'Windows Phone'\n , windowsphone: t\n , msie: t\n , version: getFirstMatch(/iemobile\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/msie|trident/i.test(ua)) {\n result = {\n name: 'Internet Explorer'\n , msie: t\n , version: getFirstMatch(/(?:msie |rv:)(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/chrome|crios|crmo/i.test(ua)) {\n result = {\n name: 'Chrome'\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (iosdevice) {\n result = {\n name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'\n }\n // WTF: version is not part of user agent in web apps\n if (versionIdentifier) {\n result.version = versionIdentifier\n }\n }\n else if (/sailfish/i.test(ua)) {\n result = {\n name: 'Sailfish'\n , sailfish: t\n , version: getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/seamonkey\\//i.test(ua)) {\n result = {\n name: 'SeaMonkey'\n , seamonkey: t\n , version: getFirstMatch(/seamonkey\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/firefox|iceweasel/i.test(ua)) {\n result = {\n name: 'Firefox'\n , firefox: t\n , version: getFirstMatch(/(?:firefox|iceweasel)[ \\/](\\d+(\\.\\d+)?)/i)\n }\n if (/\\((mobile|tablet);[^\\)]*rv:[\\d\\.]+\\)/i.test(ua)) {\n result.firefoxos = t\n }\n }\n else if (/silk/i.test(ua)) {\n result = {\n name: 'Amazon Silk'\n , silk: t\n , version : getFirstMatch(/silk\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (android) {\n result = {\n name: 'Android'\n , version: versionIdentifier\n }\n }\n else if (/phantom/i.test(ua)) {\n result = {\n name: 'PhantomJS'\n , phantom: t\n , version: getFirstMatch(/phantomjs\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/blackberry|\\bbb\\d+/i.test(ua) || /rim\\stablet/i.test(ua)) {\n result = {\n name: 'BlackBerry'\n , blackberry: t\n , version: versionIdentifier || getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/(web|hpw)os/i.test(ua)) {\n result = {\n name: 'WebOS'\n , webos: t\n , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\\/(\\d+(\\.\\d+)?)/i)\n };\n /touchpad\\//i.test(ua) && (result.touchpad = t)\n }\n else if (/bada/i.test(ua)) {\n result = {\n name: 'Bada'\n , bada: t\n , version: getFirstMatch(/dolfin\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (/tizen/i.test(ua)) {\n result = {\n name: 'Tizen'\n , tizen: t\n , version: getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n };\n }\n else if (/safari/i.test(ua)) {\n result = {\n name: 'Safari'\n , safari: t\n , version: versionIdentifier\n }\n }\n else result = {}\n\n // set webkit or gecko flag for browsers based on these engines\n if (/(apple)?webkit/i.test(ua)) {\n result.name = result.name || \"Webkit\"\n result.webkit = t\n if (!result.version && versionIdentifier) {\n result.version = versionIdentifier\n }\n } else if (!result.opera && /gecko\\//i.test(ua)) {\n result.name = result.name || \"Gecko\"\n result.gecko = t\n result.version = result.version || getFirstMatch(/gecko\\/(\\d+(\\.\\d+)?)/i)\n }\n\n // set OS flags for platforms that have multiple browsers\n if (android || result.silk) {\n result.android = t\n } else if (iosdevice) {\n result[iosdevice] = t\n result.ios = t\n }\n\n // OS version extraction\n var osVersion = '';\n if (iosdevice) {\n osVersion = getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i);\n osVersion = osVersion.replace(/[_\\s]/g, '.');\n } else if (android) {\n osVersion = getFirstMatch(/android[ \\/-](\\d+(\\.\\d+)*)/i);\n } else if (result.windowsphone) {\n osVersion = getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i);\n } else if (result.webos) {\n osVersion = getFirstMatch(/(?:web|hpw)os\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.blackberry) {\n osVersion = getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i);\n } else if (result.bada) {\n osVersion = getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.tizen) {\n osVersion = getFirstMatch(/tizen[\\/\\s](\\d+(\\.\\d+)*)/i);\n }\n if (osVersion) {\n result.osversion = osVersion;\n }\n\n // device type extraction\n var osMajorVersion = osVersion.split('.')[0];\n if (tablet || iosdevice == 'ipad' || (android && (osMajorVersion == 3 || (osMajorVersion == 4 && !mobile))) || result.silk) {\n result.tablet = t\n } else if (mobile || iosdevice == 'iphone' || iosdevice == 'ipod' || android || result.blackberry || result.webos || result.bada) {\n result.mobile = t\n }\n\n // Graded Browser Support\n // http://developer.yahoo.com/yui/articles/gbs\n if ((result.msie && result.version >= 10) ||\n (result.chrome && result.version >= 20) ||\n (result.firefox && result.version >= 20.0) ||\n (result.safari && result.version >= 6) ||\n (result.opera && result.version >= 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] >= 6)\n ) {\n result.a = t;\n }\n else if ((result.msie && result.version < 10) ||\n (result.chrome && result.version < 20) ||\n (result.firefox && result.version < 20.0) ||\n (result.safari && result.version < 6) ||\n (result.opera && result.version < 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] < 6)\n ) {\n result.c = t\n } else result.x = t\n\n return result\n }\n\n var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : '')\n\n\n /*\n * Set our detect method to the main bowser object so we can\n * reuse it to test other user agents.\n * This is needed to implement future tests.\n */\n bowser._detect = detect;\n\n return bowser\n});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/browser-sniff/readme": {
"title": "$:/plugins/tiddlywiki/browser-sniff/readme",
"text": "This plugin adds a number of `$:/info/` tiddlers containing information about the current browser.\n\nIt allows you to create content that is presented in a way that is responsive to different browsers.\n\nFor example, https://tiddlywiki.com uses this plugin to present the user with the best options for getting started depending on their browser.\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/browser-sniff]]\n"
},
"$:/plugins/tiddlywiki/browser-sniff/usage": {
"title": "$:/plugins/tiddlywiki/browser-sniff/usage",
"text": "! Information Tiddlers\n\nThe following informational tiddlers are created at startup:\n\n|!Title |!Description |\n|[[$:/info/browser/is/android]] |Running on Android? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/bada]] |Running on Bada? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/blackberry]] |Running on ~BlackBerry? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/chrome]] |Running on Chrome? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/firefox]] |Running on Firefox? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/firefoxos]] |Running on Firefox OS? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/gecko]] |Running on Gecko? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/ios]] |Running on iOS (ie an iPhone, iPad or iPod)? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/ipad]] |Running on iPad? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/iphone]] |Running on iPhone? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/ipod]] |Running on iPod? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/opera]] |Running on Opera? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/phantomjs]] |Running on ~PhantomJS? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/safari]] |Running on Safari? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/sailfish]] |Running on Sailfish? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/seamonkey]] |Running on Sea Monkey? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/silk]] |Running on Amazon's Silk? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/tizen]] |Running on Tizen? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/webkit]] |Running on ~WebKit? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/webos]] |Running on ~WebOS? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/windowsphone]] |Running on Windows Phone? (\"yes\" or \"no\") |\n|[[$:/info/browser/name]] |Platform name (see below) |\n|[[$:/info/browser/version]] |Browser version |\n\nThe browser information is obtained with [[Bowser, a browser detector library from Dustin Diaz|https://github.com/ded/bowser/]]. Possible browser names include:\n\n* ''\"Amazon Silk\"''\n* ''\"Android\"''\n* ''\"Bada\"''\n* ''\"~BlackBerry\"''\n* ''\"Chrome\"''\n* ''\"Firefox\"''\n* ''\"Internet Explorer\"''\n* ''\"iOS\"''\n* ''\"Opera\"''\n* ''\"~PhantomJS\"''\n* ''\"Safari\"''\n* ''\"Sailfish\"''\n* ''\"~SeaMonkey\"''\n* ''\"~TiddlyDesktop\"''\n* ''\"Tizen\"''\n* ''\"~WebOS\"''\n* ''\"Windows Phone\"''\n\nNote that Bowser returns \"iPhone\", \"iPad\" and \"iPod\" as distinct values for the name of the current browser. TiddlyWiki converts all three distinct values into \"iOS\" before copying to [[$:/info/browser/name]].\n"
}
}
}
此插件增加大量的 `$:/info/` 条目包含有关当前浏览器的信息。
它允许您针对不同的浏览器的方式创建呈现内容。
例如,https://tiddlywiki.com 使用这个插件依据用户的浏览器来向其呈现入门教程的最佳选项。
[[原始代码|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/browser-sniff]]
! 信息条目
以下信息条目是在启动时创建的:
|!名称 |!描述 |
|[[$:/info/browser/is/android]] |运行于 Android?("yes" 或 "no") |
|[[$:/info/browser/is/bada]] |运行于 Bada?("yes" 或 "no") |
|[[$:/info/browser/is/blackberry]] |运行于 ~BlackBerry?("yes" 或 "no") |
|[[$:/info/browser/is/chrome]] |运行于 Chrome?("yes" 或 "no") |
|[[$:/info/browser/is/firefox]] |运行于 Firefox?("yes" 或 "no") |
|[[$:/info/browser/is/firefoxos]] |运行于 Firefox OS?("yes" 或 "no") |
|[[$:/info/browser/is/gecko]] |运行于 Gecko?("yes" 或 "no") |
|[[$:/info/browser/is/ios]] |运行于 iOS (iPhone、iPad 或 iPod)?("yes" 或 "no") |
|[[$:/info/browser/is/ipad]] |运行于 iPad?("yes" 或 "no") |
|[[$:/info/browser/is/iphone]] |运行于 iPhone?("yes" 或 "no") |
|[[$:/info/browser/is/ipod]] |运行于 iPod?("yes" 或 "no") |
|[[$:/info/browser/is/opera]] |运行于 Opera?("yes" 或 "no") |
|[[$:/info/browser/is/phantomjs]] |运行于 ~PhantomJS?("yes" 或 "no") |
|[[$:/info/browser/is/safari]] |运行于 Safari?("yes" 或 "no") |
|[[$:/info/browser/is/sailfish]] |运行于 Sailfish?("yes" 或 "no") |
|[[$:/info/browser/is/seamonkey]] |运行于 Sea Monkey?("yes" 或 "no") |
|[[$:/info/browser/is/silk]] |运行于 Amazon's Silk?("yes" 或 "no") |
|[[$:/info/browser/is/tizen]] |运行于 Tizen?("yes" 或 "no") |
|[[$:/info/browser/is/webkit]] |运行于 ~WebKit?("yes" 或 "no") |
|[[$:/info/browser/is/webos]] |运行于 ~WebOS?("yes" 或 "no") |
|[[$:/info/browser/is/windowsphone]] |运行于 Windows Phone?("yes" 或 "no") |
|[[$:/info/browser/name]] |浏览器名称 (见下文) |
|[[$:/info/browser/version]] |浏览器版本 |
浏览器信息系以 [[Bowser(来自 Dustin Diaz 的浏览器检测程序库)|https://github.com/ded/bowser/]]取得。可能的浏览器名称包括:
* ''"Amazon Silk"''
* ''"Android"''
* ''"Bada"''
* ''"~BlackBerry"''
* ''"Chrome"''
* ''"Firefox"''
* ''"Internet Explorer"''
* ''"iOS"''
* ''"Opera"''
* ''"~PhantomJS"''
* ''"Safari"''
* ''"Sailfish"''
* ''"~SeaMonkey"''
* ''"~TiddlyDesktop"''
* ''"Tizen"''
* ''"~WebOS"''
* ''"Windows Phone"''
请注意,当 Bowser 传回当前浏览器名称为 "iPhone"、"iPad" 和 "iPod" 时,TiddlyWiki 于复制到 [[$:/info/browser/name]] 之前将此三者转成 "iOS" 。
{
"tiddlers": {
"$:/plugins/tiddlywiki/evernote/docs": {
"title": "$:/plugins/tiddlywiki/evernote/docs",
"text": "! Introduction\n\n"
},
"$:/plugins/tiddlywiki/evernote/modules/enex-deserializer.js": {
"title": "$:/plugins/tiddlywiki/evernote/modules/enex-deserializer.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/evernote/modules/enex-deserializer.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nENEX file deserializer\n\nFor details see: https://blog.evernote.com/tech/2013/08/08/evernote-export-format-enex/\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// DOMParser = require(\"$:/plugins/tiddlywiki/xmldom/dom-parser\").DOMParser;\n\n/*\nParse an ENEX file into tiddlers\n*/\nexports[\"application/enex+xml\"] = function(text,fields) {\n\t// Collect output tiddlers in an array\n\tvar results = [];\n\t// Parse the XML document\n\tvar parser = new DOMParser(),\n\t\tdoc = parser.parseFromString(text,\"application/xml\");\n\t// Output a report tiddler with information about the import\n\tvar enex = doc.querySelector(\"en-export\");\n\tresults.push({\n\t\ttitle: \"Evernote Import Report\",\n\t\ttext: \"Evernote file imported on \" + enex.getAttribute(\"export-date\") + \" from \" + enex.getAttribute(\"application\") + \" (\" + enex.getAttribute(\"version\") + \")\"\n\t})\n\t// Get all the \"note\" nodes\n\tvar noteNodes = doc.querySelectorAll(\"note\");\n\t$tw.utils.each(noteNodes,function(noteNode) {\n\t\tvar result = {\n\t\t\ttitle: getTextContent(noteNode,\"title\"),\n\t\t\ttype: \"text/html\",\n\t\t\ttags: [],\n\t\t\ttext: getTextContent(noteNode,\"content\"),\n\t\t\tmodified: convertDate(getTextContent(noteNode,\"created\")),\n\t\t\tcreated: convertDate(getTextContent(noteNode,\"created\"))\n\n\t\t};\n\t\t$tw.utils.each(noteNode.querySelectorAll(\"tag\"),function(tagNode) {\n\t\t\tresult.tags.push(tagNode.textContent);\n\t\t});\n\t\t// If there's an update date, set modifiy date accordingly\n\t\tvar update = getTextContent(noteNode,\"updated\");\n\t\tif(update) {\n\t\t\tresult.modified = convertDate(update);\n\t\t}\n\t\t$tw.utils.each(noteNode.querySelectorAll(\"note-attributes>*\"),function(attrNode) {\n\t\t\tresult[attrNode.tagName] = attrNode.textContent;\n\t\t});\n\t\tresults.push(result);\n\t\t$tw.utils.each(noteNode.querySelectorAll(\"resource\"),function(resourceNode) {\n\t\t\tresults.push({\n\t\t\t\ttitle: getTextContent(resourceNode,\"resource-attributes>file-name\"),\n\t\t\t\ttype: getTextContent(resourceNode,\"mime\"),\n\t\t\t\twidth: getTextContent(resourceNode,\"width\"),\n\t\t\t\theight: getTextContent(resourceNode,\"height\"),\n\t\t\t\ttext: getTextContent(resourceNode,\"data\")\n\t\t\t});\n\t\t});\n\t});\n\t// Return the output tiddlers\n\treturn results;\n};\n\nfunction getTextContent(node,selector) {\n\treturn (node.querySelector(selector) || {}).textContent;\n}\n\nfunction convertDate(isoDate) {\n\treturn (isoDate || \"\").replace(\"T\",\"\").replace(\"Z\",\"\") + \"000\"\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/plugins/tiddlywiki/evernote/readme": {
"title": "$:/plugins/tiddlywiki/evernote/readme",
"text": "This plugin contains tool to assist migration of content from Evernote ENEX files.\n\n!! Instructions\n\n# Download or save your ENEX file from Evernote\n# Rename the file to have an `.enex` extension\n# Drag the file into the TiddlyWiki browser window\n## Alternatively, click the \"Import\" button in the \"Tools\" sidebar tab\n# Review and accept the converted tiddlers\n"
}
}
}
此插件包含协助迁移 Evernote ENEX 文件内容的工具。
!! 指示
# 从 Evernote 导出您的 ENEX 文件
# 确认或重命名文件的扩展名为 '.enex'
# 将该文件拖放到 TiddlyWiki 浏览器窗口
## 或者,点击侧栏的 "工具" 页签上的 "导入" 按钮
# 查看并接受转换的条目
{
"tiddlers": {
"$:/config/ExternalAttachments/Enable": {
"title": "$:/config/ExternalAttachments/Enable",
"text": "yes"
},
"$:/config/ExternalAttachments/UseAbsoluteForDescendents": {
"title": "$:/config/ExternalAttachments/UseAbsoluteForDescendents",
"text": "no"
},
"$:/config/ExternalAttachments/UseAbsoluteForNonDescendents": {
"title": "$:/config/ExternalAttachments/UseAbsoluteForNonDescendents",
"text": "no"
},
"$:/plugins/tiddlywiki/external-attachments/readme": {
"title": "$:/plugins/tiddlywiki/external-attachments/readme",
"text": "! Introduction\n\nThis plugin provides support for importing tiddlers as external attachments. That means that instead of importing binary files as self-contained tiddlers, they are imported as \"skinny\" tiddlers that reference the original file via the ''_canonical_uri'' field. This reduces the size of the wiki and thus improves performance. However, it does mean that the wiki is no longer fully self-contained.\n\n! Compatibility\n\nThis plugin only works when using TiddlyWiki with platforms such as TiddlyDesktop that support the ''path'' attribute for imported/dragged files.\n\n"
},
"$:/plugins/tiddlywiki/external-attachments/settings": {
"title": "$:/plugins/tiddlywiki/external-attachments/settings",
"text": "When used on platforms that provide the necessary support (such as ~TiddlyDesktop), you can optionally import binary files as external tiddlers that reference the original file via the ''_canonical_uri'' field.\n\nBy default, a relative path is used to reference the file. Optionally, you can specify that an absolute path is used instead. You can do this separately for \"descendent\" attachments -- files that are contained within the directory containing the wiki -- vs. \"non-descendent\" attachments.\n\n<$checkbox tiddler=\"$:/config/ExternalAttachments/Enable\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/ExternalAttachments/Enable\">Enable importing binary files as external attachments</$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/ExternalAttachments/UseAbsoluteForDescendents\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/ExternalAttachments/UseAbsoluteForDescendents\">Use absolute paths for descendent attachments</$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/ExternalAttachments/UseAbsoluteForNonDescendents\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/ExternalAttachments/UseAbsoluteForNonDescendents\">Use absolute paths for non-descendent attachments</$link> </$checkbox>\n"
},
"$:/plugins/tiddlywiki/external-attachments/startup.js": {
"title": "$:/plugins/tiddlywiki/external-attachments/startup.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/external-attachments/startup.js\ntype: application/javascript\nmodule-type: startup\n\nStartup initialisation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ENABLE_EXTERNAL_ATTACHMENTS_TITLE = \"$:/config/ExternalAttachments/Enable\",\n\tUSE_ABSOLUTE_FOR_DESCENDENTS_TITLE = \"$:/config/ExternalAttachments/UseAbsoluteForDescendents\",\n\tUSE_ABSOLUTE_FOR_NON_DESCENDENTS_TITLE = \"$:/config/ExternalAttachments/UseAbsoluteForNonDescendents\";\n\n// Export name and synchronous status\nexports.name = \"external-attachments\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\ttest_makePathRelative();\n\t$tw.hooks.addHook(\"th-importing-file\",function(info) {\n\t\tif(document.location.protocol === \"file:\" && info.isBinary && info.file.path && $tw.wiki.getTiddlerText(ENABLE_EXTERNAL_ATTACHMENTS_TITLE,\"\") === \"yes\") {\nconsole.log(\"Wiki location\",document.location.pathname)\nconsole.log(\"File location\",info.file.path)\n\t\t\tinfo.callback([\n\t\t\t\t{\n\t\t\t\t\ttitle: info.file.name,\n\t\t\t\t\ttype: info.type,\n\t\t\t\t\t\"_canonical_uri\": makePathRelative(\n\t\t\t\t\t\tinfo.file.path,\n\t\t\t\t\t\tdocument.location.pathname,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tuseAbsoluteForNonDescendents: $tw.wiki.getTiddlerText(USE_ABSOLUTE_FOR_NON_DESCENDENTS_TITLE,\"\") === \"yes\",\n\t\t\t\t\t\t\tuseAbsoluteForDescendents: $tw.wiki.getTiddlerText(USE_ABSOLUTE_FOR_DESCENDENTS_TITLE,\"\") === \"yes\"\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t]);\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t});\n};\n\n/*\nGiven a source absolute filepath and a root absolute path, returns the source filepath expressed as a relative filepath from the root path.\n\nsourcepath comes from the \"path\" property of the file object, with the following patterns:\n\t/path/to/file.png for Unix systems\n\tC:\\path\\to\\file.png for local files on Windows\n\t\\\\sharename\\path\\to\\file.png for network shares on Windows\nrootpath comes from document.location.pathname with urlencode applied with the following patterns:\n\t/path/to/file.html for Unix systems\n\t/C:/path/to/file.html for local files on Windows\n\t/sharename/path/to/file.html for network shares on Windows\n*/\nfunction makePathRelative(sourcepath,rootpath,options) {\n\toptions = options || {};\n\t// First we convert the source path from OS-dependent format to generic file:// format\n\tif(options.isWindows || $tw.platform.isWindows) {\n\t\tsourcepath = sourcepath.replace(/\\\\/g,\"/\");\n\t\t// If it's a local file like C:/path/to/file.ext then add a leading slash\n\t\tif(sourcepath.charAt(0) !== \"/\") {\n\t\t\tsourcepath = \"/\" + sourcepath;\n\t\t}\n\t\t// If it's a network share then remove one of the leading slashes\n\t\tif(sourcepath.substring(0,2) === \"//\") {\n\t\t\tsourcepath = sourcepath.substring(1);\n\t\t}\n\t}\n\t// Split the path into parts\n\tvar sourceParts = sourcepath.split(\"/\"),\n\t\trootParts = rootpath.split(\"/\"),\n\t\toutputParts = [];\n\t// urlencode the parts of the sourcepath\n\t$tw.utils.each(sourceParts,function(part,index) {\n\t\tsourceParts[index] = encodeURI(part);\n\t});\n\t// Identify any common portion from the start\n\tvar c = 0,\n\t\tp;\n\twhile(c < sourceParts.length && c < rootParts.length && sourceParts[c] === rootParts[c]) {\n\t\tc += 1;\n\t}\n\t// Use an absolute path if there's no common portion, or if specifically requested\n\tif(c === 1 || (options.useAbsoluteForNonDescendents && c < rootParts.length) || (options.useAbsoluteForDescendents && c === rootParts.length)) {\n\t\treturn sourcepath;\n\t}\n\t// Move up a directory for each directory left in the root\n\tfor(p = c; p < rootParts.length - 1; p++) {\n\t\toutputParts.push(\"..\");\n\t}\t\t\n\t// Add on the remaining parts of the source path\n\tfor(p = c; p < sourceParts.length; p++) {\n\t\toutputParts.push(sourceParts[p]);\n\t}\n\treturn outputParts.join(\"/\");\n}\n\nfunction test_makePathRelative() {\n\tvar test = function(sourcepath,rootpath,result,options) {\n\t\tvar actualResult = makePathRelative(sourcepath,rootpath,options);\n\t\tif(actualResult !== result) {\n\t\t\tconsole.log(\"makePathRelative test failed: makePathRelative(\" + sourcepath + \",\" + rootpath + \",\" + JSON.stringify(options) + \") is \" + actualResult + \" and not equal to \" + result);\t\t\t\n\t\t}\n\t};\n\ttest(\"/Users/me/something/file.png\",\"/Users/you/something/index.html\",\"../../me/something/file.png\");\n\ttest(\"/Users/me/something/file.png\",\"/Users/you/something/index.html\",\"/Users/me/something/file.png\",{useAbsoluteForNonDescendents: true});\n\ttest(\"/Users/me/something/else/file.png\",\"/Users/me/something/index.html\",\"else/file.png\");\n\ttest(\"/Users/me/something/file.png\",\"/Users/me/something/new/index.html\",\"../file.png\");\n\ttest(\"/Users/me/something/file.png\",\"/Users/me/something/new/index.html\",\"/Users/me/something/file.png\",{useAbsoluteForNonDescendents: true});\n\ttest(\"/Users/me/something/file.png\",\"/Users/me/something/index.html\",\"file.png\");\n\ttest(\"/Users/jeremyruston/Downloads/Screenshot 2020-10-18 at 15.33.40.png\",\"/Users/jeremyruston/git/Jermolene/TiddlyWiki5/editions/prerelease/output/index.html\",\"../../../../../../Downloads/Screenshot%202020-10-18%20at%2015.33.40.png\");\n\ttest(\"/Users/me/nothing/image.png\",\"/Users/me/something/a/b/c/d/e/index.html\",\"../../../../../../nothing/image.png\");\n\ttest(\"C:\\\\Users\\\\me\\\\something\\\\file.png\",\"/C:/Users/me/something/index.html\",\"file.png\",{isWindows: true});\n\ttest(\"\\\\\\\\SHARE\\\\Users\\\\me\\\\something\\\\file.png\",\"/SHARE/Users/me/somethingelse/index.html\",\"../something/file.png\",{isWindows: true});\n\ttest(\"\\\\\\\\SHARE\\\\Users\\\\me\\\\something\\\\file.png\",\"/C:/Users/me/something/index.html\",\"/SHARE/Users/me/something/file.png\",{isWindows: true});\n}\n\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/highlight/highlight.js": {
"text": "var hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n/*! highlight.js v9.18.1 | BSD3 License | git.io/hljslicense */\n!function(e){var n=\"object\"==typeof window&&window||\"object\"==typeof self&&self;\"undefined\"==typeof exports||exports.nodeType?n&&(n.hljs=e({}),\"function\"==typeof define&&define.amd&&define([],function(){return n.hljs})):e(exports)}(function(a){var f=[],i=Object.keys,_={},c={},C=!0,n=/^(no-?highlight|plain|text)$/i,l=/\\blang(?:uage)?-([\\w-]+)\\b/i,t=/((^(<[^>]+>|\\t|)+|(?:\\n)))/gm,r={case_insensitive:\"cI\",lexemes:\"l\",contains:\"c\",keywords:\"k\",subLanguage:\"sL\",className:\"cN\",begin:\"b\",beginKeywords:\"bK\",end:\"e\",endsWithParent:\"eW\",illegal:\"i\",excludeBegin:\"eB\",excludeEnd:\"eE\",returnBegin:\"rB\",returnEnd:\"rE\",variants:\"v\",IDENT_RE:\"IR\",UNDERSCORE_IDENT_RE:\"UIR\",NUMBER_RE:\"NR\",C_NUMBER_RE:\"CNR\",BINARY_NUMBER_RE:\"BNR\",RE_STARTERS_RE:\"RSR\",BACKSLASH_ESCAPE:\"BE\",APOS_STRING_MODE:\"ASM\",QUOTE_STRING_MODE:\"QSM\",PHRASAL_WORDS_MODE:\"PWM\",C_LINE_COMMENT_MODE:\"CLCM\",C_BLOCK_COMMENT_MODE:\"CBCM\",HASH_COMMENT_MODE:\"HCM\",NUMBER_MODE:\"NM\",C_NUMBER_MODE:\"CNM\",BINARY_NUMBER_MODE:\"BNM\",CSS_NUMBER_MODE:\"CSSNM\",REGEXP_MODE:\"RM\",TITLE_MODE:\"TM\",UNDERSCORE_TITLE_MODE:\"UTM\",COMMENT:\"C\",beginRe:\"bR\",endRe:\"eR\",illegalRe:\"iR\",lexemesRe:\"lR\",terminators:\"t\",terminator_end:\"tE\"},m=\"</span>\",O=\"Could not find the language '{}', did you forget to load/include a language module?\",B={classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0},o=\"of and for in not or if then\".split(\" \");function x(e){return e.replace(/&/g,\"&\").replace(/</g,\"<\").replace(/>/g,\">\")}function g(e){return e.nodeName.toLowerCase()}function u(e){return n.test(e)}function s(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function E(e){var a=[];return function e(n,t){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?t+=r.nodeValue.length:1===r.nodeType&&(a.push({event:\"start\",offset:t,node:r}),t=e(r,t),g(r).match(/br|hr|img|input/)||a.push({event:\"stop\",offset:t,node:r}));return t}(e,0),a}function d(e,n,t){var r=0,a=\"\",i=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:\"start\"===n[0].event?e:n:e.length?e:n}function c(e){a+=\"<\"+g(e)+f.map.call(e.attributes,function(e){return\" \"+e.nodeName+'=\"'+x(e.value).replace(/\"/g,\""\")+'\"'}).join(\"\")+\">\"}function l(e){a+=\"</\"+g(e)+\">\"}function u(e){(\"start\"===e.event?c:l)(e.node)}for(;e.length||n.length;){var s=o();if(a+=x(t.substring(r,s[0].offset)),r=s[0].offset,s===e){for(i.reverse().forEach(l);u(s.splice(0,1)[0]),(s=o())===e&&s.length&&s[0].offset===r;);i.reverse().forEach(c)}else\"start\"===s[0].event?i.push(s[0].node):i.pop(),u(s.splice(0,1)[0])}return a+x(t.substr(r))}function R(n){return n.v&&!n.cached_variants&&(n.cached_variants=n.v.map(function(e){return s(n,{v:null},e)})),n.cached_variants?n.cached_variants:function e(n){return!!n&&(n.eW||e(n.starts))}(n)?[s(n,{starts:n.starts?s(n.starts):null})]:Object.isFrozen(n)?[s(n)]:[n]}function p(e){if(r&&!e.langApiRestored){for(var n in e.langApiRestored=!0,r)e[n]&&(e[r[n]]=e[n]);(e.c||[]).concat(e.v||[]).forEach(p)}}function v(n,r){var a={};return\"string\"==typeof n?t(\"keyword\",n):i(n).forEach(function(e){t(e,n[e])}),a;function t(t,e){r&&(e=e.toLowerCase()),e.split(\" \").forEach(function(e){var n=e.split(\"|\");a[n[0]]=[t,function(e,n){return n?Number(n):function(e){return-1!=o.indexOf(e.toLowerCase())}(e)?0:1}(n[0],n[1])]})}}function S(r){function s(e){return e&&e.source||e}function f(e,n){return new RegExp(s(e),\"m\"+(r.cI?\"i\":\"\")+(n?\"g\":\"\"))}function a(a){var i,e,o={},c=[],l={},t=1;function n(e,n){o[t]=e,c.push([e,n]),t+=function(e){return new RegExp(e.toString()+\"|\").exec(\"\").length-1}(n)+1}for(var r=0;r<a.c.length;r++){n(e=a.c[r],e.bK?\"\\\\.?(?:\"+e.b+\")\\\\.?\":e.b)}a.tE&&n(\"end\",a.tE),a.i&&n(\"illegal\",a.i);var u=c.map(function(e){return e[1]});return i=f(function(e,n){for(var t=/\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./,r=0,a=\"\",i=0;i<e.length;i++){var o=r+=1,c=s(e[i]);for(0<i&&(a+=n),a+=\"(\";0<c.length;){var l=t.exec(c);if(null==l){a+=c;break}a+=c.substring(0,l.index),c=c.substring(l.index+l[0].length),\"\\\\\"==l[0][0]&&l[1]?a+=\"\\\\\"+String(Number(l[1])+o):(a+=l[0],\"(\"==l[0]&&r++)}a+=\")\"}return a}(u,\"|\"),!0),l.lastIndex=0,l.exec=function(e){var n;if(0===c.length)return null;i.lastIndex=l.lastIndex;var t=i.exec(e);if(!t)return null;for(var r=0;r<t.length;r++)if(null!=t[r]&&null!=o[\"\"+r]){n=o[\"\"+r];break}return\"string\"==typeof n?(t.type=n,t.extra=[a.i,a.tE]):(t.type=\"begin\",t.rule=n),t},l}if(r.c&&-1!=r.c.indexOf(\"self\")){if(!C)throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");r.c=r.c.filter(function(e){return\"self\"!=e})}!function n(t,e){t.compiled||(t.compiled=!0,t.k=t.k||t.bK,t.k&&(t.k=v(t.k,r.cI)),t.lR=f(t.l||/\\w+/,!0),e&&(t.bK&&(t.b=\"\\\\b(\"+t.bK.split(\" \").join(\"|\")+\")\\\\b\"),t.b||(t.b=/\\B|\\b/),t.bR=f(t.b),t.endSameAsBegin&&(t.e=t.b),t.e||t.eW||(t.e=/\\B|\\b/),t.e&&(t.eR=f(t.e)),t.tE=s(t.e)||\"\",t.eW&&e.tE&&(t.tE+=(t.e?\"|\":\"\")+e.tE)),t.i&&(t.iR=f(t.i)),null==t.relevance&&(t.relevance=1),t.c||(t.c=[]),t.c=Array.prototype.concat.apply([],t.c.map(function(e){return R(\"self\"===e?t:e)})),t.c.forEach(function(e){n(e,t)}),t.starts&&n(t.starts,e),t.t=a(t))}(r)}function T(n,e,a,t){var i=e;function o(e,n){if(function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}if(e.eW)return o(e.parent,n)}function c(e,n,t,r){if(!t&&\"\"===n)return\"\";if(!e)return n;var a='<span class=\"'+(r?\"\":B.classPrefix);return(a+=e+'\">')+n+(t?\"\":m)}function l(){p+=null!=d.sL?function(){var e=\"string\"==typeof d.sL;if(e&&!_[d.sL])return x(v);var n=e?T(d.sL,v,!0,R[d.sL]):w(v,d.sL.length?d.sL:void 0);return 0<d.relevance&&(M+=n.relevance),e&&(R[d.sL]=n.top),c(n.language,n.value,!1,!0)}():function(){var e,n,t,r,a,i,o;if(!d.k)return x(v);for(r=\"\",n=0,d.lR.lastIndex=0,t=d.lR.exec(v);t;)r+=x(v.substring(n,t.index)),a=d,i=t,void 0,o=g.cI?i[0].toLowerCase():i[0],(e=a.k.hasOwnProperty(o)&&a.k[o])?(M+=e[1],r+=c(e[0],x(t[0]))):r+=x(t[0]),n=d.lR.lastIndex,t=d.lR.exec(v);return r+x(v.substr(n))}(),v=\"\"}function u(e){p+=e.cN?c(e.cN,\"\",!0):\"\",d=Object.create(e,{parent:{value:d}})}function s(e){var n=e[0],t=e.rule;return t&&t.endSameAsBegin&&(t.eR=function(e){return new RegExp(e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"),\"m\")}(n)),t.skip?v+=n:(t.eB&&(v+=n),l(),t.rB||t.eB||(v=n)),u(t),t.rB?0:n.length}var f={};function r(e,n){var t=n&&n[0];if(v+=e,null==t)return l(),0;if(\"begin\"==f.type&&\"end\"==n.type&&f.index==n.index&&\"\"===t)return v+=i.slice(n.index,n.index+1),1;if(\"begin\"===(f=n).type)return s(n);if(\"illegal\"===n.type&&!a)throw new Error('Illegal lexeme \"'+t+'\" for mode \"'+(d.cN||\"<unnamed>\")+'\"');if(\"end\"===n.type){var r=function(e){var n=e[0],t=i.substr(e.index),r=o(d,t);if(r){var a=d;for(a.skip?v+=n:(a.rE||a.eE||(v+=n),l(),a.eE&&(v=n));d.cN&&(p+=m),d.skip||d.sL||(M+=d.relevance),(d=d.parent)!==r.parent;);return r.starts&&(r.endSameAsBegin&&(r.starts.eR=r.eR),u(r.starts)),a.rE?0:n.length}}(n);if(null!=r)return r}return v+=t,t.length}var g=D(n);if(!g)throw console.error(O.replace(\"{}\",n)),new Error('Unknown language: \"'+n+'\"');S(g);var E,d=t||g,R={},p=\"\";for(E=d;E!==g;E=E.parent)E.cN&&(p=c(E.cN,\"\",!0)+p);var v=\"\",M=0;try{for(var b,h,N=0;d.t.lastIndex=N,b=d.t.exec(i);)h=r(i.substring(N,b.index),b),N=b.index+h;for(r(i.substr(N)),E=d;E.parent;E=E.parent)E.cN&&(p+=m);return{relevance:M,value:p,i:!1,language:n,top:d}}catch(e){if(e.message&&-1!==e.message.indexOf(\"Illegal\"))return{i:!0,relevance:0,value:x(i)};if(C)return{relevance:0,value:x(i),language:n,top:d,errorRaised:e};throw e}}function w(t,e){e=e||B.languages||i(_);var r={relevance:0,value:x(t)},a=r;return e.filter(D).filter(L).forEach(function(e){var n=T(e,t,!1);n.language=e,n.relevance>a.relevance&&(a=n),n.relevance>r.relevance&&(a=r,r=n)}),a.language&&(r.second_best=a),r}function M(e){return B.tabReplace||B.useBR?e.replace(t,function(e,n){return B.useBR&&\"\\n\"===e?\"<br>\":B.tabReplace?n.replace(/\\t/g,B.tabReplace):\"\"}):e}function b(e){var n,t,r,a,i,o=function(e){var n,t,r,a,i=e.className+\" \";if(i+=e.parentNode?e.parentNode.className:\"\",t=l.exec(i)){var o=D(t[1]);return o||(console.warn(O.replace(\"{}\",t[1])),console.warn(\"Falling back to no-highlight mode for this block.\",e)),o?t[1]:\"no-highlight\"}for(n=0,r=(i=i.split(/\\s+/)).length;n<r;n++)if(u(a=i[n])||D(a))return a}(e);u(o)||(B.useBR?(n=document.createElement(\"div\")).innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\"):n=e,i=n.textContent,r=o?T(o,i,!0):w(i),(t=E(n)).length&&((a=document.createElement(\"div\")).innerHTML=r.value,r.value=d(t,E(a),i)),r.value=M(r.value),e.innerHTML=r.value,e.className=function(e,n,t){var r=n?c[n]:t,a=[e.trim()];return e.match(/\\bhljs\\b/)||a.push(\"hljs\"),-1===e.indexOf(r)&&a.push(r),a.join(\" \").trim()}(e.className,o,r.language),e.result={language:r.language,re:r.relevance},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.relevance}))}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll(\"pre code\");f.forEach.call(e,b)}}var N={disableAutodetect:!0};function D(e){return e=(e||\"\").toLowerCase(),_[e]||_[c[e]]}function L(e){var n=D(e);return n&&!n.disableAutodetect}return a.highlight=T,a.highlightAuto=w,a.fixMarkup=M,a.highlightBlock=b,a.configure=function(e){B=s(B,e)},a.initHighlighting=h,a.initHighlightingOnLoad=function(){window.addEventListener(\"DOMContentLoaded\",h,!1),window.addEventListener(\"load\",h,!1)},a.registerLanguage=function(n,e){var t;try{t=e(a)}catch(e){if(console.error(\"Language definition for '{}' could not be registered.\".replace(\"{}\",n)),!C)throw e;console.error(e),t=N}p(_[n]=t),t.rawDefinition=e.bind(null,a),t.aliases&&t.aliases.forEach(function(e){c[e]=n})},a.listLanguages=function(){return i(_)},a.getLanguage=D,a.requireLanguage=function(e){var n=D(e);if(n)return n;throw new Error(\"The '{}' language is required, but not loaded.\".replace(\"{}\",e))},a.autoDetection=L,a.inherit=s,a.debugMode=function(){C=!1},a.IR=a.IDENT_RE=\"[a-zA-Z]\\\\w*\",a.UIR=a.UNDERSCORE_IDENT_RE=\"[a-zA-Z_]\\\\w*\",a.NR=a.NUMBER_RE=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",a.CNR=a.C_NUMBER_RE=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",a.BNR=a.BINARY_NUMBER_RE=\"\\\\b(0b[01]+)\",a.RSR=a.RE_STARTERS_RE=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",a.BE=a.BACKSLASH_ESCAPE={b:\"\\\\\\\\[\\\\s\\\\S]\",relevance:0},a.ASM=a.APOS_STRING_MODE={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[a.BE]},a.QSM=a.QUOTE_STRING_MODE={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[a.BE]},a.PWM=a.PHRASAL_WORDS_MODE={b:/\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/},a.C=a.COMMENT=function(e,n,t){var r=a.inherit({cN:\"comment\",b:e,e:n,c:[]},t||{});return r.c.push(a.PWM),r.c.push({cN:\"doctag\",b:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",relevance:0}),r},a.CLCM=a.C_LINE_COMMENT_MODE=a.C(\"//\",\"$\"),a.CBCM=a.C_BLOCK_COMMENT_MODE=a.C(\"/\\\\*\",\"\\\\*/\"),a.HCM=a.HASH_COMMENT_MODE=a.C(\"#\",\"$\"),a.NM=a.NUMBER_MODE={cN:\"number\",b:a.NR,relevance:0},a.CNM=a.C_NUMBER_MODE={cN:\"number\",b:a.CNR,relevance:0},a.BNM=a.BINARY_NUMBER_MODE={cN:\"number\",b:a.BNR,relevance:0},a.CSSNM=a.CSS_NUMBER_MODE={cN:\"number\",b:a.NR+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",relevance:0},a.RM=a.REGEXP_MODE={cN:\"regexp\",b:/\\//,e:/\\/[gimuy]*/,i:/\\n/,c:[a.BE,{b:/\\[/,e:/\\]/,relevance:0,c:[a.BE]}]},a.TM=a.TITLE_MODE={cN:\"title\",b:a.IR,relevance:0},a.UTM=a.UNDERSCORE_TITLE_MODE={cN:\"title\",b:a.UIR,relevance:0},a.METHOD_GUARD={b:\"\\\\.\\\\s*\"+a.UIR,relevance:0},[a.BE,a.ASM,a.QSM,a.PWM,a.C,a.CLCM,a.CBCM,a.HCM,a.NM,a.CNM,a.BNM,a.CSSNM,a.RM,a.TM,a.UTM,a.METHOD_GUARD].forEach(function(e){!function n(t){Object.freeze(t);var r=\"function\"==typeof t;Object.getOwnPropertyNames(t).forEach(function(e){!t.hasOwnProperty(e)||null===t[e]||\"object\"!=typeof t[e]&&\"function\"!=typeof t[e]||r&&(\"caller\"===e||\"callee\"===e||\"arguments\"===e)||Object.isFrozen(t[e])||n(t[e])});return t}(e)}),a});hljs.registerLanguage(\"swift\",function(e){var i={keyword:\"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet\",literal:\"true false nil\",built_in:\"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip\"},t=e.C(\"/\\\\*\",\"\\\\*/\",{c:[\"self\"]}),n={cN:\"subst\",b:/\\\\\\(/,e:\"\\\\)\",k:i,c:[]},r={cN:\"string\",c:[e.BE,n],v:[{b:/\"\"\"/,e:/\"\"\"/},{b:/\"/,e:/\"/}]},a={cN:\"number\",b:\"\\\\b([\\\\d_]+(\\\\.[\\\\deE_]+)?|0x[a-fA-F0-9_]+(\\\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\\\b\",relevance:0};return n.c=[a],{k:i,c:[r,e.CLCM,t,{cN:\"type\",b:\"\\\\b[A-Z][\\\\wÀ-ʸ']*[!?]\"},{cN:\"type\",b:\"\\\\b[A-Z][\\\\wÀ-ʸ']*\",relevance:0},a,{cN:\"function\",bK:\"func\",e:\"{\",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b:/</,e:/>/},{cN:\"params\",b:/\\(/,e:/\\)/,endsParent:!0,k:i,c:[\"self\",a,r,e.CBCM,{b:\":\"}],i:/[\"']/}],i:/\\[|%/},{cN:\"class\",bK:\"struct protocol class extension enum\",k:i,e:\"\\\\{\",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][\\u00C0-\\u02B80-9A-Za-z$_]*/})]},{cN:\"meta\",b:\"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\"},{bK:\"import\",e:/$/,c:[e.CLCM,t]}]}});hljs.registerLanguage(\"less\",function(e){function r(e){return{cN:\"string\",b:\"~?\"+e+\".*?\"+e}}function t(e,r,t){return{cN:e,b:r,relevance:t}}var a=\"[\\\\w-]+\",c=\"(\"+a+\"|@{\"+a+\"})\",s=[],n=[],b={b:\"\\\\(\",e:\"\\\\)\",c:n,relevance:0};n.push(e.CLCM,e.CBCM,r(\"'\"),r('\"'),e.CSSNM,{b:\"(url|data-uri)\\\\(\",starts:{cN:\"string\",e:\"[\\\\)\\\\n]\",eE:!0}},t(\"number\",\"#[0-9A-Fa-f]+\\\\b\"),b,t(\"variable\",\"@@?\"+a,10),t(\"variable\",\"@{\"+a+\"}\"),t(\"built_in\",\"~?`[^`]*?`\"),{cN:\"attribute\",b:a+\"\\\\s*:\",e:\":\",rB:!0,eE:!0},{cN:\"meta\",b:\"!important\"});var i=n.concat({b:\"{\",e:\"}\",c:s}),l={bK:\"when\",eW:!0,c:[{bK:\"and not\"}].concat(n)},o={b:c+\"\\\\s*:\",rB:!0,e:\"[;}]\",relevance:0,c:[{cN:\"attribute\",b:c,e:\":\",eE:!0,starts:{eW:!0,i:\"[<=$]\",relevance:0,c:n}}]},u={cN:\"keyword\",b:\"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b\",starts:{e:\"[;{}]\",rE:!0,c:n,relevance:0}},v={cN:\"variable\",v:[{b:\"@\"+a+\"\\\\s*:\",relevance:15},{b:\"@\"+a}],starts:{e:\"[;}]\",rE:!0,c:i}},C={v:[{b:\"[\\\\.#:&\\\\[>]\",e:\"[;{}]\"},{b:c,e:\"{\"}],rB:!0,rE:!0,i:\"[<='$\\\"]\",relevance:0,c:[e.CLCM,e.CBCM,l,t(\"keyword\",\"all\\\\b\"),t(\"variable\",\"@{\"+a+\"}\"),t(\"selector-tag\",c+\"%?\",0),t(\"selector-id\",\"#\"+c),t(\"selector-class\",\"\\\\.\"+c,0),t(\"selector-tag\",\"&\",0),{cN:\"selector-attr\",b:\"\\\\[\",e:\"\\\\]\"},{cN:\"selector-pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/},{b:\"\\\\(\",e:\"\\\\)\",c:i},{b:\"!important\"}]};return s.push(e.CLCM,e.CBCM,u,v,o,C),{cI:!0,i:\"[=>'/<($\\\"]\",c:s}});hljs.registerLanguage(\"armasm\",function(s){return{cI:!0,aliases:[\"arm\"],l:\"\\\\.?\"+s.IR,k:{meta:\".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND \",built_in:\"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @\"},c:[{cN:\"keyword\",b:\"\\\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?\",e:\"\\\\s\"},s.C(\"[;@]\",\"$\",{relevance:0}),s.CBCM,s.QSM,{cN:\"string\",b:\"'\",e:\"[^\\\\\\\\]'\",relevance:0},{cN:\"title\",b:\"\\\\|\",e:\"\\\\|\",i:\"\\\\n\",relevance:0},{cN:\"number\",v:[{b:\"[#$=]?0x[0-9a-f]+\"},{b:\"[#$=]?0b[01]+\"},{b:\"[#$=]\\\\d+\"},{b:\"\\\\b\\\\d+\"}],relevance:0},{cN:\"symbol\",v:[{b:\"^[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+\"},{b:\"^\\\\s*[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+:\"},{b:\"[=#]\\\\w+\"}],relevance:0}]}});hljs.registerLanguage(\"ruby\",function(e){var c=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\",b={keyword:\"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor\",literal:\"true false nil\"},r={cN:\"doctag\",b:\"@[A-Za-z]+\"},a={b:\"#<\",e:\">\"},n=[e.C(\"#\",\"$\",{c:[r]}),e.C(\"^\\\\=begin\",\"^\\\\=end\",{c:[r],relevance:10}),e.C(\"^__END__\",\"\\\\n$\")],s={cN:\"subst\",b:\"#\\\\{\",e:\"}\",k:b},t={cN:\"string\",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/},{b:/`/,e:/`/},{b:\"%[qQwWx]?\\\\(\",e:\"\\\\)\"},{b:\"%[qQwWx]?\\\\[\",e:\"\\\\]\"},{b:\"%[qQwWx]?{\",e:\"}\"},{b:\"%[qQwWx]?<\",e:\">\"},{b:\"%[qQwWx]?/\",e:\"/\"},{b:\"%[qQwWx]?%\",e:\"%\"},{b:\"%[qQwWx]?-\",e:\"-\"},{b:\"%[qQwWx]?\\\\|\",e:\"\\\\|\"},{b:/\\B\\?(\\\\\\d{1,3}|\\\\x[A-Fa-f0-9]{1,2}|\\\\u[A-Fa-f0-9]{4}|\\\\?\\S)\\b/},{b:/<<[-~]?'?(\\w+)(?:.|\\n)*?\\n\\s*\\1\\b/,rB:!0,c:[{b:/<<[-~]?'?/},{b:/\\w+/,endSameAsBegin:!0,c:[e.BE,s]}]}]},i={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",endsParent:!0,k:b},l=[t,a,{cN:\"class\",bK:\"class module\",e:\"$|;\",i:/=/,c:[e.inherit(e.TM,{b:\"[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?\"}),{b:\"<\\\\s*\",c:[{b:\"(\"+e.IR+\"::)?\"+e.IR}]}].concat(n)},{cN:\"function\",bK:\"def\",e:\"$|;\",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{b:e.IR+\"::\"},{cN:\"symbol\",b:e.UIR+\"(\\\\!|\\\\?)?:\",relevance:0},{cN:\"symbol\",b:\":(?!\\\\s)\",c:[t,{b:c}],relevance:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",relevance:0},{b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{cN:\"params\",b:/\\|/,e:/\\|/,k:b},{b:\"(\"+e.RSR+\"|unless)\\\\s*\",k:\"unless\",c:[a,{cN:\"regexp\",c:[e.BE,s],i:/\\n/,v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r{\",e:\"}[a-z]*\"},{b:\"%r\\\\(\",e:\"\\\\)[a-z]*\"},{b:\"%r!\",e:\"![a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}].concat(n),relevance:0}].concat(n);s.c=l;var d=[{b:/^\\s*=>/,starts:{e:\"$\",c:i.c=l}},{cN:\"meta\",b:\"^([>?]>|[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+>|(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d(p\\\\d+)?[^>]+>)\",starts:{e:\"$\",c:l}}];return{aliases:[\"rb\",\"gemspec\",\"podspec\",\"thor\",\"irb\"],k:b,i:/\\/\\*/,c:n.concat(d).concat(l)}});hljs.registerLanguage(\"lua\",function(e){var t=\"\\\\[=*\\\\[\",a=\"\\\\]=*\\\\]\",n={b:t,e:a,c:[\"self\"]},l=[e.C(\"--(?!\"+t+\")\",\"$\"),e.C(\"--\"+t,a,{c:[n],relevance:10})];return{l:e.UIR,k:{literal:\"true false nil\",keyword:\"and break do else elseif end for goto if in local not or repeat return then until while\",built_in:\"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove\"},c:l.concat([{cN:\"function\",bK:\"function\",e:\"\\\\)\",c:[e.inherit(e.TM,{b:\"([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*\"}),{cN:\"params\",b:\"\\\\(\",eW:!0,c:l}].concat(l)},e.CNM,e.ASM,e.QSM,{cN:\"string\",b:t,e:a,c:[n],relevance:5}])}});hljs.registerLanguage(\"matlab\",function(e){var a=\"('|\\\\.')+\",s={relevance:0,c:[{b:a}]};return{k:{keyword:\"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while\",built_in:\"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun legend intersect ismember procrustes hold num2cell \"},i:'(//|\"|#|/\\\\*|\\\\s+/\\\\w+)',c:[{cN:\"function\",bK:\"function\",e:\"$\",c:[e.UTM,{cN:\"params\",v:[{b:\"\\\\(\",e:\"\\\\)\"},{b:\"\\\\[\",e:\"\\\\]\"}]}]},{cN:\"built_in\",b:/true|false/,relevance:0,starts:s},{b:\"[a-zA-Z][a-zA-Z_0-9]*\"+a,relevance:0},{cN:\"number\",b:e.CNR,relevance:0,starts:s},{cN:\"string\",b:\"'\",e:\"'\",c:[e.BE,{b:\"''\"}]},{b:/\\]|}|\\)/,relevance:0,starts:s},{cN:\"string\",b:'\"',e:'\"',c:[e.BE,{b:'\"\"'}],starts:s},e.C(\"^\\\\s*\\\\%\\\\{\\\\s*$\",\"^\\\\s*\\\\%\\\\}\\\\s*$\"),e.C(\"\\\\%\",\"$\")]}});hljs.registerLanguage(\"apache\",function(e){var r={cN:\"number\",b:\"[\\\\$%]\\\\d+\"};return{aliases:[\"apacheconf\"],cI:!0,c:[e.HCM,{cN:\"section\",b:\"</?\",e:\">\"},{cN:\"attribute\",b:/\\w+/,relevance:0,k:{nomarkup:\"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername\"},starts:{e:/$/,relevance:0,k:{literal:\"on off all\"},c:[{cN:\"meta\",b:\"\\\\s\\\\[\",e:\"\\\\]$\"},{cN:\"variable\",b:\"[\\\\$%]\\\\{\",e:\"\\\\}\",c:[\"self\",r]},r,e.QSM]}}],i:/\\S/}});hljs.registerLanguage(\"yaml\",function(e){var b=\"true false yes no null\",a={cN:\"string\",relevance:0,v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/},{b:/\\S+/}],c:[e.BE,{cN:\"template-variable\",v:[{b:\"{{\",e:\"}}\"},{b:\"%{\",e:\"}\"}]}]};return{cI:!0,aliases:[\"yml\",\"YAML\",\"yaml\"],c:[{cN:\"attr\",v:[{b:\"\\\\w[\\\\w :\\\\/.-]*:(?=[ \\t]|$)\"},{b:'\"\\\\w[\\\\w :\\\\/.-]*\":(?=[ \\t]|$)'},{b:\"'\\\\w[\\\\w :\\\\/.-]*':(?=[ \\t]|$)\"}]},{cN:\"meta\",b:\"^---s*$\",relevance:10},{cN:\"string\",b:\"[\\\\|>]([0-9]?[+-])?[ ]*\\\\n( *)[\\\\S ]+\\\\n(\\\\2[\\\\S ]+\\\\n?)*\"},{b:\"<%[%=-]?\",e:\"[%-]?%>\",sL:\"ruby\",eB:!0,eE:!0,relevance:0},{cN:\"type\",b:\"!\"+e.UIR},{cN:\"type\",b:\"!!\"+e.UIR},{cN:\"meta\",b:\"&\"+e.UIR+\"$\"},{cN:\"meta\",b:\"\\\\*\"+e.UIR+\"$\"},{cN:\"bullet\",b:\"\\\\-(?=[ ]|$)\",relevance:0},e.HCM,{bK:b,k:{literal:b}},{cN:\"number\",b:e.CNR+\"\\\\b\"},a]}});hljs.registerLanguage(\"plaintext\",function(e){return{disableAutodetect:!0}});hljs.registerLanguage(\"erlang-repl\",function(e){return{k:{built_in:\"spawn spawn_link self\",keyword:\"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor\"},c:[{cN:\"meta\",b:\"^[0-9]+> \",relevance:10},e.C(\"%\",\"$\"),{cN:\"number\",b:\"\\\\b(\\\\d+#[a-fA-F0-9]+|\\\\d+(\\\\.\\\\d+)?([eE][-+]?\\\\d+)?)\",relevance:0},e.ASM,e.QSM,{b:\"\\\\?(::)?([A-Z]\\\\w*(::)?)+\"},{b:\"->\"},{b:\"ok\"},{b:\"!\"},{b:\"(\\\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\\\b[a-z'][a-zA-Z0-9_']*)\",relevance:0},{b:\"[A-Z][a-zA-Z0-9_']*\",relevance:0}]}});hljs.registerLanguage(\"cmake\",function(e){return{aliases:[\"cmake.in\"],cI:!0,k:{keyword:\"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined\"},c:[{cN:\"variable\",b:\"\\\\${\",e:\"}\"},e.HCM,e.QSM,e.NM]}});hljs.registerLanguage(\"kotlin\",function(e){var t={keyword:\"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default\",built_in:\"Byte Short Char Int Long Boolean Float Double Void Unit Nothing\",literal:\"true false null\"},a={cN:\"symbol\",b:e.UIR+\"@\"},n={cN:\"subst\",b:\"\\\\${\",e:\"}\",c:[e.CNM]},c={cN:\"variable\",b:\"\\\\$\"+e.UIR},r={cN:\"string\",v:[{b:'\"\"\"',e:'\"\"\"(?=[^\"])',c:[c,n]},{b:\"'\",e:\"'\",i:/\\n/,c:[e.BE]},{b:'\"',e:'\"',i:/\\n/,c:[e.BE,c,n]}]};n.c.push(r);var i={cN:\"meta\",b:\"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\s*:(?:\\\\s*\"+e.UIR+\")?\"},l={cN:\"meta\",b:\"@\"+e.UIR,c:[{b:/\\(/,e:/\\)/,c:[e.inherit(r,{cN:\"meta-string\"})]}]},s={cN:\"number\",b:\"\\\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?|\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))([eE][-+]?\\\\d+)?)[lLfF]?\",relevance:0},b=e.C(\"/\\\\*\",\"\\\\*/\",{c:[e.CBCM]}),o={v:[{cN:\"type\",b:e.UIR},{b:/\\(/,e:/\\)/,c:[]}]},d=o;return d.v[1].c=[o],o.v[1].c=[d],{aliases:[\"kt\"],k:t,c:[e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{relevance:0,c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.CLCM,b,{cN:\"keyword\",b:/\\b(break|continue|return|this)\\b/,starts:{c:[{cN:\"symbol\",b:/@\\w+/}]}},a,i,l,{cN:\"function\",bK:\"fun\",e:\"[(]|$\",rB:!0,eE:!0,k:t,i:/fun\\s+(<.*>)?[^\\s\\(]+(\\s+[^\\s\\(]+)\\s*=/,relevance:5,c:[{b:e.UIR+\"\\\\s*\\\\(\",rB:!0,relevance:0,c:[e.UTM]},{cN:\"type\",b:/</,e:/>/,k:\"reified\",relevance:0},{cN:\"params\",b:/\\(/,e:/\\)/,endsParent:!0,k:t,relevance:0,c:[{b:/:/,e:/[=,\\/]/,eW:!0,c:[o,e.CLCM,b],relevance:0},e.CLCM,b,i,l,r,e.CNM]},b]},{cN:\"class\",bK:\"class interface trait\",e:/[:\\{(]|$/,eE:!0,i:\"extends implements\",c:[{bK:\"public protected internal private constructor\"},e.UTM,{cN:\"type\",b:/</,e:/>/,eB:!0,eE:!0,relevance:0},{cN:\"type\",b:/[,:]\\s*/,e:/[<\\(,]|$/,eB:!0,rE:!0},i,l]},r,{cN:\"meta\",b:\"^#!/usr/bin/env\",e:\"$\",i:\"\\n\"},s]}});hljs.registerLanguage(\"javascript\",function(e){var r=\"<>\",a=\"</>\",t={b:/<[A-Za-z0-9\\\\._:-]+/,e:/\\/[A-Za-z0-9\\\\._:-]+>|\\/>/},c=\"[A-Za-z$_][0-9A-Za-z$_]*\",n={keyword:\"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise\"},s={cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)n?\"},{b:\"\\\\b(0[oO][0-7]+)n?\"},{b:e.CNR+\"n?\"}],relevance:0},o={cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\",k:n,c:[]},i={b:\"html`\",e:\"\",starts:{e:\"`\",rE:!1,c:[e.BE,o],sL:\"xml\"}},b={b:\"css`\",e:\"\",starts:{e:\"`\",rE:!1,c:[e.BE,o],sL:\"css\"}},l={cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,o]};o.c=[e.ASM,e.QSM,i,b,l,s,e.RM];var u=o.c.concat([e.CBCM,e.CLCM]);return{aliases:[\"js\",\"jsx\",\"mjs\",\"cjs\"],k:n,c:[{cN:\"meta\",relevance:10,b:/^\\s*['\"]use (strict|asm)['\"]/},{cN:\"meta\",b:/^#!/,e:/$/},e.ASM,e.QSM,i,b,l,e.CLCM,e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{relevance:0,c:[{cN:\"doctag\",b:\"@[A-Za-z]+\",c:[{cN:\"type\",b:\"\\\\{\",e:\"\\\\}\",relevance:0},{cN:\"variable\",b:c+\"(?=\\\\s*(-)|$)\",endsParent:!0,relevance:0},{b:/(?=[^\\n])\\s/,relevance:0}]}]}),e.CBCM,s,{b:/[{,\\n]\\s*/,relevance:0,c:[{b:c+\"\\\\s*:\",rB:!0,relevance:0,c:[{cN:\"attr\",b:c,relevance:0}]}]},{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{cN:\"function\",b:\"(\\\\(.*?\\\\)|\"+c+\")\\\\s*=>\",rB:!0,e:\"\\\\s*=>\",c:[{cN:\"params\",v:[{b:c},{b:/\\(\\s*\\)/},{b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:n,c:u}]}]},{cN:\"\",b:/\\s/,e:/\\s*/,skip:!0},{v:[{b:r,e:a},{b:t.b,e:t.e}],sL:\"xml\",c:[{b:t.b,e:t.e,skip:!0,c:[\"self\"]}]}],relevance:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:!0,c:[e.inherit(e.TM,{b:c}),{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,c:u}],i:/\\[|%/},{b:/\\$[(.]/},e.METHOD_GUARD,{cN:\"class\",bK:\"class\",e:/[{;=]/,eE:!0,i:/[:\"\\[\\]]/,c:[{bK:\"extends\"},e.UTM]},{bK:\"constructor get set\",e:/\\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage(\"scss\",function(e){var t=\"@[a-z-]+\",r={cN:\"variable\",b:\"(\\\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\\\b\"},i={cN:\"number\",b:\"#[0-9A-Fa-f]+\"};e.CSSNM,e.QSM,e.ASM,e.CBCM;return{cI:!0,i:\"[=/|']\",c:[e.CLCM,e.CBCM,{cN:\"selector-id\",b:\"\\\\#[A-Za-z0-9_-]+\",relevance:0},{cN:\"selector-class\",b:\"\\\\.[A-Za-z0-9_-]+\",relevance:0},{cN:\"selector-attr\",b:\"\\\\[\",e:\"\\\\]\",i:\"$\"},{cN:\"selector-tag\",b:\"\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b\",relevance:0},{cN:\"selector-pseudo\",b:\":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)\"},{cN:\"selector-pseudo\",b:\"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)\"},r,{cN:\"attribute\",b:\"\\\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b\",i:\"[^\\\\s]\"},{b:\"\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b\"},{b:\":\",e:\";\",c:[r,i,e.CSSNM,e.QSM,e.ASM,{cN:\"meta\",b:\"!important\"}]},{b:\"@(page|font-face)\",l:t,k:\"@page @font-face\"},{b:\"@\",e:\"[{;]\",rB:!0,k:\"and or not only\",c:[{b:t,cN:\"keyword\"},r,e.QSM,e.ASM,i,e.CSSNM]}]}});hljs.registerLanguage(\"perl\",function(e){var t=\"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when\",r={cN:\"subst\",b:\"[$@]\\\\{\",e:\"\\\\}\",k:t},s={b:\"->{\",e:\"}\"},n={v:[{b:/\\$\\d/},{b:/[\\$%@](\\^\\w\\b|#\\w+(::\\w+)*|{\\w+}|\\w+(::\\w*)*)/},{b:/[\\$%@][^\\s\\w{]/,relevance:0}]},c=[e.BE,r,n],a=[n,e.HCM,e.C(\"^\\\\=\\\\w\",\"\\\\=cut\",{eW:!0}),s,{cN:\"string\",c:c,v:[{b:\"q[qwxr]?\\\\s*\\\\(\",e:\"\\\\)\",relevance:5},{b:\"q[qwxr]?\\\\s*\\\\[\",e:\"\\\\]\",relevance:5},{b:\"q[qwxr]?\\\\s*\\\\{\",e:\"\\\\}\",relevance:5},{b:\"q[qwxr]?\\\\s*\\\\|\",e:\"\\\\|\",relevance:5},{b:\"q[qwxr]?\\\\s*\\\\<\",e:\"\\\\>\",relevance:5},{b:\"qw\\\\s+q\",e:\"q\",relevance:5},{b:\"'\",e:\"'\",c:[e.BE]},{b:'\"',e:'\"'},{b:\"`\",e:\"`\",c:[e.BE]},{b:\"{\\\\w+}\",c:[],relevance:0},{b:\"-?\\\\w+\\\\s*\\\\=\\\\>\",c:[],relevance:0}]},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",relevance:0},{b:\"(\\\\/\\\\/|\"+e.RSR+\"|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*\",k:\"split return print reverse grep\",relevance:0,c:[e.HCM,{cN:\"regexp\",b:\"(s|tr|y)/(\\\\\\\\.|[^/])*/(\\\\\\\\.|[^/])*/[a-z]*\",relevance:10},{cN:\"regexp\",b:\"(m|qr)?/\",e:\"/[a-z]*\",c:[e.BE],relevance:0}]},{cN:\"function\",bK:\"sub\",e:\"(\\\\s*\\\\(.*?\\\\))?[;{]\",eE:!0,relevance:5,c:[e.TM]},{b:\"-\\\\w\\\\b\",relevance:0},{b:\"^__DATA__$\",e:\"^__END__$\",sL:\"mojolicious\",c:[{b:\"^@@.*\",e:\"$\",cN:\"comment\"}]}];return r.c=a,{aliases:[\"pl\",\"pm\"],l:/[\\w\\.]+/,k:t,c:s.c=a}});hljs.registerLanguage(\"go\",function(e){var n={keyword:\"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune\",literal:\"true false iota nil\",built_in:\"append cap close complex copy imag len make new panic print println real recover delete\"};return{aliases:[\"golang\"],k:n,i:\"</\",c:[e.CLCM,e.CBCM,{cN:\"string\",v:[e.QSM,e.ASM,{b:\"`\",e:\"`\"}]},{cN:\"number\",v:[{b:e.CNR+\"[i]\",relevance:1},e.CNM]},{b:/:=/},{cN:\"function\",bK:\"func\",e:\"\\\\s*(\\\\{|$)\",eE:!0,c:[e.TM,{cN:\"params\",b:/\\(/,e:/\\)/,k:n,i:/[\"']/}]}]}});hljs.registerLanguage(\"x86asm\",function(s){return{cI:!0,l:\"[.%]?\"+s.IR,k:{keyword:\"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63\",built_in:\"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr\",meta:\"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__\"},c:[s.C(\";\",\"$\",{relevance:0}),{cN:\"number\",v:[{b:\"\\\\b(?:([0-9][0-9_]*)?\\\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\\\b\",relevance:0},{b:\"\\\\$[0-9][0-9A-Fa-f]*\",relevance:0},{b:\"\\\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\\\b\"},{b:\"\\\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\\\b\"}]},s.QSM,{cN:\"string\",v:[{b:\"'\",e:\"[^\\\\\\\\]'\"},{b:\"`\",e:\"[^\\\\\\\\]`\"}],relevance:0},{cN:\"symbol\",v:[{b:\"^\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\s+label)\"},{b:\"^\\\\s*%%[A-Za-z0-9_$#@~.?]*:\"}],relevance:0},{cN:\"subst\",b:\"%[0-9]+\",relevance:0},{cN:\"subst\",b:\"%!S+\",relevance:0},{cN:\"meta\",b:/^\\s*\\.[\\w_-]+/}]}});hljs.registerLanguage(\"cpp\",function(e){function t(e){return\"(?:\"+e+\")?\"}var r=\"decltype\\\\(auto\\\\)\",a=\"[a-zA-Z_]\\\\w*::\",i=\"(\"+r+\"|\"+t(a)+\"[a-zA-Z_]\\\\w*\"+t(\"<.*?>\")+\")\",c={cN:\"keyword\",b:\"\\\\b[a-z\\\\d_]*_t\\\\b\"},s={cN:\"string\",v:[{b:'(u8?|U|L)?\"',e:'\"',i:\"\\\\n\",c:[e.BE]},{b:\"(u8?|U|L)?'(\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)|.)\",e:\"'\",i:\".\"},{b:/(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\((?:.|\\n)*?\\)\\1\"/}]},n={cN:\"number\",v:[{b:\"\\\\b(0b[01']+)\"},{b:\"(-?)\\\\b([\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)(u|U|l|L|ul|UL|f|F|b|B)\"},{b:\"(-?)(\\\\b0[xX][a-fA-F0-9']+|(\\\\b[\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)([eE][-+]?[\\\\d']+)?)\"}],relevance:0},o={cN:\"meta\",b:/#\\s*[a-z]+\\b/,e:/$/,k:{\"meta-keyword\":\"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include\"},c:[{b:/\\\\\\n/,relevance:0},e.inherit(s,{cN:\"meta-string\"}),{cN:\"meta-string\",b:/<.*?>/,e:/$/,i:\"\\\\n\"},e.CLCM,e.CBCM]},l={cN:\"title\",b:t(a)+e.IR,relevance:0},u=t(a)+e.IR+\"\\\\s*\\\\(\",p={keyword:\"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq\",built_in:\"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary\",literal:\"true false nullptr NULL\"},m=[c,e.CLCM,e.CBCM,n,s],d={v:[{b:/=/,e:/;/},{b:/\\(/,e:/\\)/},{bK:\"new throw return else\",e:/;/}],k:p,c:m.concat([{b:/\\(/,e:/\\)/,k:p,c:m.concat([\"self\"]),relevance:0}]),relevance:0},b={cN:\"function\",b:\"(\"+i+\"[\\\\*&\\\\s]+)+\"+u,rB:!0,e:/[{;=]/,eE:!0,k:p,i:/[^\\w\\s\\*&:<>]/,c:[{b:r,k:p,relevance:0},{b:u,rB:!0,c:[l],relevance:0},{cN:\"params\",b:/\\(/,e:/\\)/,k:p,relevance:0,c:[e.CLCM,e.CBCM,s,n,c,{b:/\\(/,e:/\\)/,k:p,relevance:0,c:[\"self\",e.CLCM,e.CBCM,s,n,c]}]},c,e.CLCM,e.CBCM,o]};return{aliases:[\"c\",\"cc\",\"h\",\"c++\",\"h++\",\"hpp\",\"hh\",\"hxx\",\"cxx\"],k:p,i:\"</\",c:[].concat(d,b,m,[o,{b:\"\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\s*<\",e:\">\",k:p,c:[\"self\",c]},{b:e.IR+\"::\",k:p},{cN:\"class\",bK:\"class struct\",e:/[{;:]/,c:[{b:/</,e:/>/,c:[\"self\"]},e.TM]}]),exports:{preprocessor:o,strings:s,k:p}}});hljs.registerLanguage(\"arduino\",function(e){var t=\"boolean byte word String\",r=\"setup loopKeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put\",i=\"DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW\",o=e.requireLanguage(\"cpp\").rawDefinition(),a=o.k;return a.keyword+=\" \"+t,a.literal+=\" \"+i,a.built_in+=\" \"+r,o});hljs.registerLanguage(\"nginx\",function(e){var r={cN:\"variable\",v:[{b:/\\$\\d+/},{b:/\\$\\{/,e:/}/},{b:\"[\\\\$\\\\@]\"+e.UIR}]},b={eW:!0,l:\"[a-z/_]+\",k:{literal:\"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll\"},relevance:0,i:\"=>\",c:[e.HCM,{cN:\"string\",c:[e.BE,r],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/}]},{b:\"([a-z]+):/\",e:\"\\\\s\",eW:!0,eE:!0,c:[r]},{cN:\"regexp\",c:[e.BE,r],v:[{b:\"\\\\s\\\\^\",e:\"\\\\s|{|;\",rE:!0},{b:\"~\\\\*?\\\\s+\",e:\"\\\\s|{|;\",rE:!0},{b:\"\\\\*(\\\\.[a-z\\\\-]+)+\"},{b:\"([a-z\\\\-]+\\\\.)+\\\\*\"}]},{cN:\"number\",b:\"\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b\"},{cN:\"number\",b:\"\\\\b\\\\d+[kKmMgGdshdwy]*\\\\b\",relevance:0},r]};return{aliases:[\"nginxconf\"],c:[e.HCM,{b:e.UIR+\"\\\\s+{\",rB:!0,e:\"{\",c:[{cN:\"section\",b:e.UIR}],relevance:0},{b:e.UIR+\"\\\\s\",e:\";|{\",rB:!0,c:[{cN:\"attribute\",b:e.UIR,starts:b}],relevance:0}],i:\"[^\\\\s\\\\}]\"}});hljs.registerLanguage(\"xml\",function(e){var c={cN:\"symbol\",b:\"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;\"},s={b:\"\\\\s\",c:[{cN:\"meta-keyword\",b:\"#?[a-z_][a-z1-9_-]+\",i:\"\\\\n\"}]},a=e.inherit(s,{b:\"\\\\(\",e:\"\\\\)\"}),t=e.inherit(e.ASM,{cN:\"meta-string\"}),l=e.inherit(e.QSM,{cN:\"meta-string\"}),r={eW:!0,i:/</,relevance:0,c:[{cN:\"attr\",b:\"[A-Za-z0-9\\\\._:-]+\",relevance:0},{b:/=\\s*/,relevance:0,c:[{cN:\"string\",endsParent:!0,v:[{b:/\"/,e:/\"/,c:[c]},{b:/'/,e:/'/,c:[c]},{b:/[^\\s\"'=<>`]+/}]}]}]};return{aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xjb\",\"xsd\",\"xsl\",\"plist\",\"wsf\",\"svg\"],cI:!0,c:[{cN:\"meta\",b:\"<![a-z]\",e:\">\",relevance:10,c:[s,l,t,a,{b:\"\\\\[\",e:\"\\\\]\",c:[{cN:\"meta\",b:\"<![a-z]\",e:\">\",c:[s,a,l,t]}]}]},e.C(\"\\x3c!--\",\"--\\x3e\",{relevance:10}),{b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",relevance:10},c,{cN:\"meta\",b:/<\\?xml/,e:/\\?>/,relevance:10},{b:/<\\?(php)?/,e:/\\?>/,sL:\"php\",c:[{b:\"/\\\\*\",e:\"\\\\*/\",skip:!0},{b:'b\"',e:'\"',skip:!0},{b:\"b'\",e:\"'\",skip:!0},e.inherit(e.ASM,{i:null,cN:null,c:null,skip:!0}),e.inherit(e.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:\"tag\",b:\"<style(?=\\\\s|>)\",e:\">\",k:{name:\"style\"},c:[r],starts:{e:\"</style>\",rE:!0,sL:[\"css\",\"xml\"]}},{cN:\"tag\",b:\"<script(?=\\\\s|>)\",e:\">\",k:{name:\"script\"},c:[r],starts:{e:\"<\\/script>\",rE:!0,sL:[\"actionscript\",\"javascript\",\"handlebars\",\"xml\"]}},{cN:\"tag\",b:\"</?\",e:\"/?>\",c:[{cN:\"name\",b:/[^\\/><\\s]+/,relevance:0},r]}]}});hljs.registerLanguage(\"markdown\",function(e){return{aliases:[\"md\",\"mkdown\",\"mkd\"],c:[{cN:\"section\",v:[{b:\"^#{1,6}\",e:\"$\"},{b:\"^.+?\\\\n[=-]{2,}$\"}]},{b:\"<\",e:\">\",sL:\"xml\",relevance:0},{cN:\"bullet\",b:\"^\\\\s*([*+-]|(\\\\d+\\\\.))\\\\s+\"},{cN:\"strong\",b:\"[*_]{2}.+?[*_]{2}\"},{cN:\"emphasis\",v:[{b:\"\\\\*.+?\\\\*\"},{b:\"_.+?_\",relevance:0}]},{cN:\"quote\",b:\"^>\\\\s+\",e:\"$\"},{cN:\"code\",v:[{b:\"^```\\\\w*\\\\s*$\",e:\"^```[ ]*$\"},{b:\"`.+?`\"},{b:\"^( {4}|\\\\t)\",e:\"$\",relevance:0}]},{b:\"^[-\\\\*]{3,}\",e:\"$\"},{b:\"\\\\[.+?\\\\][\\\\(\\\\[].*?[\\\\)\\\\]]\",rB:!0,c:[{cN:\"string\",b:\"\\\\[\",e:\"\\\\]\",eB:!0,rE:!0,relevance:0},{cN:\"link\",b:\"\\\\]\\\\(\",e:\"\\\\)\",eB:!0,eE:!0},{cN:\"symbol\",b:\"\\\\]\\\\[\",e:\"\\\\]\",eB:!0,eE:!0}],relevance:10},{b:/^\\[[^\\n]+\\]:/,rB:!0,c:[{cN:\"symbol\",b:/\\[/,e:/\\]/,eB:!0,eE:!0},{cN:\"link\",b:/:\\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage(\"properties\",function(e){var r=\"[ \\\\t\\\\f]*\",t=\"(\"+r+\"[:=]\"+r+\"|[ \\\\t\\\\f]+)\",n=\"([^\\\\\\\\\\\\W:= \\\\t\\\\f\\\\n]|\\\\\\\\.)+\",a=\"([^\\\\\\\\:= \\\\t\\\\f\\\\n]|\\\\\\\\.)+\",c={e:t,relevance:0,starts:{cN:\"string\",e:/$/,relevance:0,c:[{b:\"\\\\\\\\\\\\n\"}]}};return{cI:!0,i:/\\S/,c:[e.C(\"^\\\\s*[!#]\",\"$\"),{b:n+t,rB:!0,c:[{cN:\"attr\",b:n,endsParent:!0,relevance:0}],starts:c},{b:a+t,rB:!0,relevance:0,c:[{cN:\"meta\",b:a,endsParent:!0,relevance:0}],starts:c},{cN:\"attr\",relevance:0,b:a+r+\"$\"}]}});hljs.registerLanguage(\"bash\",function(e){var t={cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},a={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,t,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]}]};return{aliases:[\"sh\",\"zsh\"],l:/\\b-?[a-z\\._]+\\b/,k:{keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\",_:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"meta\",b:/^#![^\\n]+sh\\s*$/,relevance:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:!0,c:[e.inherit(e.TM,{b:/\\w[\\w\\d_]*/})],relevance:0},e.HCM,a,{cN:\"\",b:/\\\\\"/},{cN:\"string\",b:/'/,e:/'/},t]}});hljs.registerLanguage(\"dockerfile\",function(e){return{aliases:[\"docker\"],cI:!0,k:\"from maintainer expose env arg user onbuild stopsignal\",c:[e.HCM,e.ASM,e.QSM,e.NM,{bK:\"run cmd entrypoint volume add copy workdir label healthcheck shell\",starts:{e:/[^\\\\]$/,sL:\"bash\"}}],i:\"</\"}});hljs.registerLanguage(\"python\",function(e){var r={keyword:\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10\",built_in:\"Ellipsis NotImplemented\",literal:\"False None True\"},b={cN:\"meta\",b:/^(>>>|\\.\\.\\.) /},c={cN:\"subst\",b:/\\{/,e:/\\}/,k:r,i:/#/},a={b:/\\{\\{/,relevance:0},l={cN:\"string\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,b],relevance:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,c:[e.BE,b],relevance:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,b,a,c]},{b:/(fr|rf|f)\"\"\"/,e:/\"\"\"/,c:[e.BE,b,a,c]},{b:/(u|r|ur)'/,e:/'/,relevance:10},{b:/(u|r|ur)\"/,e:/\"/,relevance:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,a,c]},{b:/(fr|rf|f)\"/,e:/\"/,c:[e.BE,a,c]},e.ASM,e.QSM]},n={cN:\"number\",relevance:0,v:[{b:e.BNR+\"[lLjJ]?\"},{b:\"\\\\b(0o[0-7]+)[lLjJ]?\"},{b:e.CNR+\"[lLjJ]?\"}]},i={cN:\"params\",b:/\\(/,e:/\\)/,c:[\"self\",b,n,l,e.HCM]};return c.c=[l,n,b],{aliases:[\"py\",\"gyp\",\"ipython\"],k:r,i:/(<\\/|->|\\?)|=>/,c:[b,n,{bK:\"if\",relevance:0},l,e.HCM,{v:[{cN:\"function\",bK:\"def\"},{cN:\"class\",bK:\"class\"}],e:/:/,i:/[${=;\\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:\"None\"}]},{cN:\"meta\",b:/^[\\t ]*@/,e:/$/},{b:/\\b(print|exec)\\(/}]}});hljs.registerLanguage(\"ini\",function(e){var b={cN:\"number\",relevance:0,v:[{b:/([\\+\\-]+)?[\\d]+_[\\d_]+/},{b:e.NR}]},a=e.C();a.v=[{b:/;/,e:/$/},{b:/#/,e:/$/}];var c={cN:\"variable\",v:[{b:/\\$[\\w\\d\"][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},r={cN:\"literal\",b:/\\bon|off|true|false|yes|no\\b/},n={cN:\"string\",c:[e.BE],v:[{b:\"'''\",e:\"'''\",relevance:10},{b:'\"\"\"',e:'\"\"\"',relevance:10},{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]};return{aliases:[\"toml\"],cI:!0,i:/\\S/,c:[a,{cN:\"section\",b:/\\[+/,e:/\\]+/},{b:/^[a-z0-9\\[\\]_\\.-]+(?=\\s*=\\s*)/,cN:\"attr\",starts:{e:/$/,c:[a,{b:/\\[/,e:/\\]/,c:[a,r,c,n,b,\"self\"],relevance:0},r,c,n,b]}}]}});hljs.registerLanguage(\"diff\",function(e){return{aliases:[\"patch\"],c:[{cN:\"meta\",relevance:10,v:[{b:/^@@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +@@$/},{b:/^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/},{b:/^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$/}]},{cN:\"comment\",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\\-{3}/,e:/$/},{b:/^\\*{3} /,e:/$/},{b:/^\\+{3}/,e:/$/},{b:/^\\*{15}$/}]},{cN:\"addition\",b:\"^\\\\+\",e:\"$\"},{cN:\"deletion\",b:\"^\\\\-\",e:\"$\"},{cN:\"addition\",b:\"^\\\\!\",e:\"$\"}]}});hljs.registerLanguage(\"http\",function(e){var t=\"HTTP/[0-9\\\\.]+\";return{aliases:[\"https\"],i:\"\\\\S\",c:[{b:\"^\"+t,e:\"$\",c:[{cN:\"number\",b:\"\\\\b\\\\d{3}\\\\b\"}]},{b:\"^[A-Z]+ (.*?) \"+t+\"$\",rB:!0,e:\"$\",c:[{cN:\"string\",b:\" \",e:\" \",eB:!0,eE:!0},{b:t},{cN:\"keyword\",b:\"[A-Z]+\"}]},{cN:\"attribute\",b:\"^\\\\w\",e:\": \",eE:!0,i:\"\\\\n|\\\\s|=\",starts:{e:\"$\",relevance:0}},{b:\"\\\\n\\\\n\",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage(\"sql\",function(e){var t=e.C(\"--\",\"$\");return{cI:!0,i:/[<>{}*]/,c:[{bK:\"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with\",e:/;/,eW:!0,l:/[\\w\\.]+/,k:{keyword:\"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek\",literal:\"true false null unknown\",built_in:\"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void\"},c:[{cN:\"string\",b:\"'\",e:\"'\",c:[{b:\"''\"}]},{cN:\"string\",b:'\"',e:'\"',c:[{b:'\"\"'}]},{cN:\"string\",b:\"`\",e:\"`\"},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}});hljs.registerLanguage(\"vala\",function(e){return{k:{keyword:\"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var\",built_in:\"DBus GLib CCode Gee Object Gtk Posix\",literal:\"false true null\"},c:[{cN:\"class\",bK:\"class interface namespace\",e:\"{\",eE:!0,i:\"[^,:\\\\n\\\\s\\\\.]\",c:[e.UTM]},e.CLCM,e.CBCM,{cN:\"string\",b:'\"\"\"',e:'\"\"\"',relevance:5},e.ASM,e.QSM,e.CNM,{cN:\"meta\",b:\"^#\",e:\"$\",relevance:2}]}});hljs.registerLanguage(\"asciidoc\",function(e){return{aliases:[\"adoc\"],c:[e.C(\"^/{4,}\\\\n\",\"\\\\n/{4,}$\",{relevance:10}),e.C(\"^//\",\"$\",{relevance:0}),{cN:\"title\",b:\"^\\\\.\\\\w.*$\"},{b:\"^[=\\\\*]{4,}\\\\n\",e:\"\\\\n^[=\\\\*]{4,}$\",relevance:10},{cN:\"section\",relevance:10,v:[{b:\"^(={1,5}) .+?( \\\\1)?$\"},{b:\"^[^\\\\[\\\\]\\\\n]+?\\\\n[=\\\\-~\\\\^\\\\+]{2,}$\"}]},{cN:\"meta\",b:\"^:.+?:\",e:\"\\\\s\",eE:!0,relevance:10},{cN:\"meta\",b:\"^\\\\[.+?\\\\]$\",relevance:0},{cN:\"quote\",b:\"^_{4,}\\\\n\",e:\"\\\\n_{4,}$\",relevance:10},{cN:\"code\",b:\"^[\\\\-\\\\.]{4,}\\\\n\",e:\"\\\\n[\\\\-\\\\.]{4,}$\",relevance:10},{b:\"^\\\\+{4,}\\\\n\",e:\"\\\\n\\\\+{4,}$\",c:[{b:\"<\",e:\">\",sL:\"xml\",relevance:0}],relevance:10},{cN:\"bullet\",b:\"^(\\\\*+|\\\\-+|\\\\.+|[^\\\\n]+?::)\\\\s+\"},{cN:\"symbol\",b:\"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\\\s+\",relevance:10},{cN:\"strong\",b:\"\\\\B\\\\*(?![\\\\*\\\\s])\",e:\"(\\\\n{2}|\\\\*)\",c:[{b:\"\\\\\\\\*\\\\w\",relevance:0}]},{cN:\"emphasis\",b:\"\\\\B'(?!['\\\\s])\",e:\"(\\\\n{2}|')\",c:[{b:\"\\\\\\\\'\\\\w\",relevance:0}],relevance:0},{cN:\"emphasis\",b:\"_(?![_\\\\s])\",e:\"(\\\\n{2}|_)\",relevance:0},{cN:\"string\",v:[{b:\"``.+?''\"},{b:\"`.+?'\"}]},{cN:\"code\",b:\"(`.+?`|\\\\+.+?\\\\+)\",relevance:0},{cN:\"code\",b:\"^[ \\\\t]\",e:\"$\",relevance:0},{b:\"^'{3,}[ \\\\t]*$\",relevance:10},{b:\"(link:)?(http|https|ftp|file|irc|image:?):\\\\S+\\\\[.*?\\\\]\",rB:!0,c:[{b:\"(link|image:?):\",relevance:0},{cN:\"link\",b:\"\\\\w\",e:\"[^\\\\[]+\",relevance:0},{cN:\"string\",b:\"\\\\[\",e:\"\\\\]\",eB:!0,eE:!0,relevance:0}],relevance:10}]}});hljs.registerLanguage(\"json\",function(e){var i={literal:\"true false null\"},n=[e.CLCM,e.CBCM],c=[e.QSM,e.CNM],r={e:\",\",eW:!0,eE:!0,c:c,k:i},t={b:\"{\",e:\"}\",c:[{cN:\"attr\",b:/\"/,e:/\"/,c:[e.BE],i:\"\\\\n\"},e.inherit(r,{b:/:/})].concat(n),i:\"\\\\S\"},a={b:\"\\\\[\",e:\"\\\\]\",c:[e.inherit(r)],i:\"\\\\S\"};return c.push(t,a),n.forEach(function(e){c.push(e)}),{c:c,k:i,i:\"\\\\S\"}});hljs.registerLanguage(\"rust\",function(e){var t=\"([ui](8|16|32|64|128|size)|f(32|64))?\",r=\"drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!\";return{aliases:[\"rs\"],k:{keyword:\"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield\",literal:\"true false Some None Ok Err\",built_in:r},l:e.IR+\"!?\",i:\"</\",c:[e.CLCM,e.C(\"/\\\\*\",\"\\\\*/\",{c:[\"self\"]}),e.inherit(e.QSM,{b:/b?\"/,i:null}),{cN:\"string\",v:[{b:/r(#*)\"(.|\\n)*?\"\\1(?!#)/},{b:/b?'\\\\?(x\\w{2}|u\\w{4}|U\\w{8}|.)'/}]},{cN:\"symbol\",b:/'[a-zA-Z_][a-zA-Z0-9_]*/},{cN:\"number\",v:[{b:\"\\\\b0b([01_]+)\"+t},{b:\"\\\\b0o([0-7_]+)\"+t},{b:\"\\\\b0x([A-Fa-f0-9_]+)\"+t},{b:\"\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)\"+t}],relevance:0},{cN:\"function\",bK:\"fn\",e:\"(\\\\(|<)\",eE:!0,c:[e.UTM]},{cN:\"meta\",b:\"#\\\\!?\\\\[\",e:\"\\\\]\",c:[{cN:\"meta-string\",b:/\"/,e:/\"/}]},{cN:\"class\",bK:\"type\",e:\";\",c:[e.inherit(e.UTM,{endsParent:!0})],i:\"\\\\S\"},{cN:\"class\",bK:\"trait enum struct union\",e:\"{\",c:[e.inherit(e.UTM,{endsParent:!0})],i:\"[\\\\w\\\\d]\"},{b:e.IR+\"::\",k:{built_in:r}},{b:\"->\"}]}});hljs.registerLanguage(\"awk\",function(e){return{k:{keyword:\"BEGIN END if else while do for in break continue delete next nextfile function func exit|10\"},c:[{cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},{cN:\"string\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,relevance:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,relevance:10},{b:/(u|r|ur)'/,e:/'/,relevance:10},{b:/(u|r|ur)\"/,e:/\"/,relevance:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},e.ASM,e.QSM]},e.RM,e.HCM,e.NM]}});hljs.registerLanguage(\"java\",function(e){var a=\"false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do\",t={cN:\"number\",b:\"\\\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?|\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))([eE][-+]?\\\\d+)?)[lLfF]?\",relevance:0};return{aliases:[\"jsp\"],k:a,i:/<\\/|#/,c:[e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{relevance:0,c:[{b:/\\w+@/,relevance:0},{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:\"class\",bK:\"class interface\",e:/[{;=]/,eE:!0,k:\"class interface\",i:/[:\"\\[\\]]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"new throw return else\",relevance:0},{cN:\"function\",b:\"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\\\s*,\\\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\\\s+)+\"+e.UIR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+\"\\\\s*\\\\(\",rB:!0,relevance:0,c:[e.UTM]},{cN:\"params\",b:/\\(/,e:/\\)/,k:a,relevance:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},t,{cN:\"meta\",b:\"@[A-Za-z]+\"}]}});hljs.registerLanguage(\"cs\",function(e){var a={keyword:\"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield\",literal:\"null false true\"},i={cN:\"number\",v:[{b:\"\\\\b(0b[01']+)\"},{b:\"(-?)\\\\b([\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)(u|U|l|L|ul|UL|f|F|b|B)\"},{b:\"(-?)(\\\\b0[xX][a-fA-F0-9']+|(\\\\b[\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)([eE][-+]?[\\\\d']+)?)\"}],relevance:0},c={cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},r=e.inherit(c,{i:/\\n/}),n={cN:\"subst\",b:\"{\",e:\"}\",k:a},t=e.inherit(n,{i:/\\n/}),s={cN:\"string\",b:/\\$\"/,e:'\"',i:/\\n/,c:[{b:\"{{\"},{b:\"}}\"},e.BE,t]},l={cN:\"string\",b:/\\$@\"/,e:'\"',c:[{b:\"{{\"},{b:\"}}\"},{b:'\"\"'},n]},b=e.inherit(l,{i:/\\n/,c:[{b:\"{{\"},{b:\"}}\"},{b:'\"\"'},t]});n.c=[l,s,c,e.ASM,e.QSM,i,e.CBCM],t.c=[b,s,r,e.ASM,e.QSM,i,e.inherit(e.CBCM,{i:/\\n/})];var o={v:[l,s,c,e.ASM,e.QSM]},d=e.IR+\"(<\"+e.IR+\"(\\\\s*,\\\\s*\"+e.IR+\")*>)?(\\\\[\\\\])?\";return{aliases:[\"csharp\",\"c#\"],k:a,i:/::/,c:[e.C(\"///\",\"$\",{rB:!0,c:[{cN:\"doctag\",v:[{b:\"///\",relevance:0},{b:\"\\x3c!--|--\\x3e\"},{b:\"</?\",e:\">\"}]}]}),e.CLCM,e.CBCM,{cN:\"meta\",b:\"#\",e:\"$\",k:{\"meta-keyword\":\"if else elif endif define undef warning error line region endregion pragma checksum\"}},o,i,{bK:\"class interface\",e:/[{;=]/,i:/[^\\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:\"namespace\",e:/[{;=]/,i:/[^\\s:]/,c:[e.inherit(e.TM,{b:\"[a-zA-Z](\\\\.?\\\\w)*\"}),e.CLCM,e.CBCM]},{cN:\"meta\",b:\"^\\\\s*\\\\[\",eB:!0,e:\"\\\\]\",eE:!0,c:[{cN:\"meta-string\",b:/\"/,e:/\"/}]},{bK:\"new return throw await else\",relevance:0},{cN:\"function\",b:\"(\"+d+\"\\\\s+)+\"+e.IR+\"\\\\s*\\\\(\",rB:!0,e:/\\s*[{;=]/,eE:!0,k:a,c:[{b:e.IR+\"\\\\s*\\\\(\",rB:!0,c:[e.TM],relevance:0},{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:a,relevance:0,c:[o,i,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage(\"mathematica\",function(e){return{aliases:[\"mma\",\"wl\"],l:\"(\\\\$|\\\\b)\"+e.IR+\"\\\\b\",k:\"AASTriangle AbelianGroup Abort AbortKernels AbortProtect AbortScheduledTask Above Abs AbsArg AbsArgPlot Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AcceptanceThreshold AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Activate Active ActiveClassification ActiveClassificationObject ActiveItem ActivePrediction ActivePredictionObject ActiveStyle AcyclicGraphQ AddOnHelpPath AddSides AddTo AddToSearchIndex AddUsers AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AdministrativeDivisionData AffineHalfSpace AffineSpace AffineStateSpaceModel AffineTransform After AggregatedEntityClass AggregationLayer AircraftData AirportData AirPressureData AirTemperatureData AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowAdultContent AllowedCloudExtraParameters AllowedCloudParameterExtensions AllowedDimensions AllowedFrequencyRange AllowedHeads AllowGroupClose AllowIncomplete AllowInlineCells AllowKernelInitialization AllowLooseGrammar AllowReverseGroupClose AllowScriptLevelChange AllTrue Alphabet AlphabeticOrder AlphabeticSort AlphaChannel AlternateImage AlternatingFactorial AlternatingGroup AlternativeHypothesis Alternatives AltitudeMethod AmbientLight AmbiguityFunction AmbiguityList Analytic AnatomyData AnatomyForm AnatomyPlot3D AnatomySkinStyle AnatomyStyling AnchoredSearch And AndersonDarlingTest AngerJ AngleBisector AngleBracket AnglePath AnglePath3D AngleVector AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning AnimationRunTime AnimationTimeIndex Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotate Annotation AnnotationDelete AnnotationNames AnnotationRules AnnotationValue Annuity AnnuityDue Annulus AnomalyDetection AnomalyDetectorFunction Anonymous Antialiasing AntihermitianMatrixQ Antisymmetric AntisymmetricMatrixQ Antonyms AnyOrder AnySubset AnyTrue Apart ApartSquareFree APIFunction Appearance AppearanceElements AppearanceRules AppellF1 Append AppendCheck AppendLayer AppendTo ApplicationIdentificationKey Apply ApplySides ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcCurvature ARCHProcess ArcLength ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Area Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess Around AroundReplace ARProcess Array ArrayComponents ArrayDepth ArrayFilter ArrayFlatten ArrayMesh ArrayPad ArrayPlot ArrayQ ArrayResample ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads ASATriangle Ask AskAppend AskConfirm AskDisplay AskedQ AskedValue AskFunction AskState AskTemplateDisplay AspectRatio AspectRatioFixed Assert AssociateTo Association AssociationFormat AssociationMap AssociationQ AssociationThread AssumeDeterministic Assuming Assumptions AstronomicalData AsymptoticDSolveValue AsymptoticEqual AsymptoticEquivalent AsymptoticGreater AsymptoticGreaterEqual AsymptoticIntegrate AsymptoticLess AsymptoticLessEqual AsymptoticOutputTracker AsymptoticRSolveValue AsymptoticSolve AsymptoticSum Asynchronous AsynchronousTaskObject AsynchronousTasks Atom AtomCoordinates AtomCount AtomDiagramCoordinates AtomList AtomQ AttentionLayer Attributes Audio AudioAmplify AudioAnnotate AudioAnnotationLookup AudioBlockMap AudioCapture AudioChannelAssignment AudioChannelCombine AudioChannelMix AudioChannels AudioChannelSeparate AudioData AudioDelay AudioDelete AudioDevice AudioDistance AudioFade AudioFrequencyShift AudioGenerator AudioIdentify AudioInputDevice AudioInsert AudioIntervals AudioJoin AudioLabel AudioLength AudioLocalMeasurements AudioLooping AudioLoudness AudioMeasurements AudioNormalize AudioOutputDevice AudioOverlay AudioPad AudioPan AudioPartition AudioPause AudioPitchShift AudioPlay AudioPlot AudioQ AudioRecord AudioReplace AudioResample AudioReverb AudioSampleRate AudioSpectralMap AudioSpectralTransformation AudioSplit AudioStop AudioStream AudioStreams AudioTimeStretch AudioTrim AudioType AugmentedPolyhedron AugmentedSymmetricPolynomial Authenticate Authentication AuthenticationDialog AutoAction Autocomplete AutocompletionFunction AutoCopy AutocorrelationTest AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutoQuoteCharacters AutoRefreshed AutoRemove AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords AutoSubmitting Axes AxesEdge AxesLabel AxesOrigin AxesStyle AxiomaticTheory AxisBabyMonsterGroupB Back Background BackgroundAppearance BackgroundTasksSettings Backslash Backsubstitution Backward Ball Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarcodeImage BarcodeRecognize BaringhausHenzeTest BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseDecode BaseEncode BaseForm Baseline BaselinePosition BaseStyle BasicRecurrentLayer BatchNormalizationLayer BatchSize BatesDistribution BattleLemarieWavelet BayesianMaximization BayesianMaximizationObject BayesianMinimization BayesianMinimizationObject Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized Between BetweennessCentrality BeveledPolyhedron BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryDeserialize BinaryDistance BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinarySerialize BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BiquadraticFilterModel BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor BiweightLocation BiweightMidvariance Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockchainAddressData BlockchainBase BlockchainBlockData BlockchainContractValue BlockchainData BlockchainGet BlockchainKeyEncode BlockchainPut BlockchainTokenData BlockchainTransaction BlockchainTransactionData BlockchainTransactionSign BlockchainTransactionSubmit BlockMap BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bond BondCount BondList BondQ Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms BooleanQ BooleanRegion Booleans BooleanStrings BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryDiscretizeGraphics BoundaryDiscretizeRegion BoundaryMesh BoundaryMeshRegion BoundaryMeshRegionQ BoundaryStyle BoundedRegionQ BoundingRegion Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxObject BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break BridgeData BrightnessEqualize BroadcastStationData Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurve3DBoxOptions BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BSplineSurface3DBoxOptions BubbleChart BubbleChart3D BubbleScale BubbleSizes BuildingData BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteArray ByteArrayFormat ByteArrayQ ByteArrayToString ByteCount ByteOrderingC CachedValue CacheGraphics CachePersistence CalendarConvert CalendarData CalendarType Callout CalloutMarker CalloutStyle CallPacket CanberraDistance Cancel CancelButton CandlestickChart CanonicalGraph CanonicalizePolygon CanonicalizePolyhedron CanonicalName CanonicalWarpingCorrespondence CanonicalWarpingDistance CantorMesh CantorStaircase Cap CapForm CapitalDifferentialD Capitalize CapsuleShape CaptureRunning CardinalBSplineBasis CarlemanLinearize CarmichaelLambda CaseOrdering Cases CaseSensitive Cashflow Casoratian Catalan CatalanNumber Catch Catenate CatenateLayer CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling CelestialSystem Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEvaluationLanguage CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellLabelStyle CellLabelTemplate CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterArray CenterDot CentralFeature CentralMoment CentralMomentGeneratingFunction Cepstrogram CepstrogramArray CepstrumArray CForm ChampernowneNumber ChangeOptions ChannelBase ChannelBrokerAction ChannelDatabin ChannelHistoryLength ChannelListen ChannelListener ChannelListeners ChannelListenerWait ChannelObject ChannelPreSendFunction ChannelReceiverFunction ChannelSend ChannelSubscribers ChanVeseBinarize Character CharacterCounts CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterName CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop ChromaticityPlot ChromaticityPlot3D ChromaticPolynomial Circle CircleBox CircleDot CircleMinus CirclePlus CirclePoints CircleThrough CircleTimes CirculantGraph CircularOrthogonalMatrixDistribution CircularQuaternionMatrixDistribution CircularRealMatrixDistribution CircularSymplecticMatrixDistribution CircularUnitaryMatrixDistribution Circumsphere CityData ClassifierFunction ClassifierInformation ClassifierMeasurements ClassifierMeasurementsObject Classify ClassPriors Clear ClearAll ClearAttributes ClearCookies ClearPermissions ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipPlanesStyle ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent CloudAccountData CloudBase CloudConnect CloudDeploy CloudDirectory CloudDisconnect CloudEvaluate CloudExport CloudExpression CloudExpressions CloudFunction CloudGet CloudImport CloudLoggingData CloudObject CloudObjectInformation CloudObjectInformationData CloudObjectNameFormat CloudObjects CloudObjectURLType CloudPublish CloudPut CloudRenderingMethod CloudSave CloudShare CloudSubmit CloudSymbol CloudUnshare ClusterClassify ClusterDissimilarityFunction ClusteringComponents ClusteringTree CMYKColor Coarse CodeAssistOptions Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorBalance ColorCombine ColorConvert ColorCoverage ColorData ColorDataFunction ColorDetect ColorDistance ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQ ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorsNear ColorSpace ColorToneMapping Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CombinedEntityClass CombinerFunction CometData CommonDefaultFormatTypes Commonest CommonestFilter CommonName CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompanyData CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledCodeFunction CompiledFunction CompilerOptions Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComplexListPlot ComplexPlot ComplexPlot3D ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries CompositeQ Composition CompoundElement CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData ComputeUncertainty Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath ConformAudio ConformImages Congruent ConicHullRegion ConicHullRegion3DBox ConicHullRegionBox ConicOptimization Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphComponents ConnectedGraphQ ConnectedMeshComponents ConnectedMoleculeComponents ConnectedMoleculeQ ConnectionSettings ConnectLibraryCallbackFunction ConnectSystemModelComponents ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray ConstantArrayLayer ConstantImage ConstantPlusLayer ConstantRegionQ Constants ConstantTimesLayer ConstellationData ConstrainedMax ConstrainedMin Construct Containing ContainsAll ContainsAny ContainsExactly ContainsNone ContainsOnly ContentFieldOptions ContentLocationFunction ContentObject ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTask ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean ContrastiveLossLayer Control ControlActive ControlAlignment ControlGroupContentsBox ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket ConvexHullMesh ConvexPolygonQ ConvexPolyhedronQ ConvolutionLayer Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CookieFunction Cookies CoordinateBoundingBox CoordinateBoundingBoxArray CoordinateBounds CoordinateBoundsArray CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDatabin CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CountDistinct CountDistinctBy CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Counts CountsBy Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateCellID CreateChannel CreateCloudExpression CreateDatabin CreateDataSystemModel CreateDialog CreateDirectory CreateDocument CreateFile CreateIntermediateDirectories CreateManagedLibraryExpression CreateNotebook CreatePalette CreatePalettePacket CreatePermissionsGroup CreateScheduledTask CreateSearchIndex CreateSystemModel CreateTemporary CreateUUID CreateWindow CriterionFunction CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossEntropyLossLayer CrossingCount CrossingDetect CrossingPolygon CrossMatrix Csc Csch CTCLossLayer Cube CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrencyConvert CurrentDate CurrentImage CurrentlySpeakingPacket CurrentNotebookImage CurrentScreenImage CurrentValue Curry CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecompositionD DagumDistribution DamData DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DatabaseConnect DatabaseDisconnect DatabaseReference Databin DatabinAdd DatabinRemove Databins DatabinUpload DataCompression DataDistribution DataRange DataReversed Dataset Date DateBounds Dated DateDelimiters DateDifference DatedUnit DateFormat DateFunction DateHistogram DateList DateListLogPlot DateListPlot DateListStepPlot DateObject DateObjectQ DateOverlapsQ DatePattern DatePlus DateRange DateReduction DateString DateTicksFormat DateValue DateWithinQ DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayHemisphere DaylightQ DayMatchQ DayName DayNightTerminator DayPlus DayRange DayRound DeBruijnGraph DeBruijnSequence Debug DebugTag Decapitalize Decimal DecimalForm DeclareKnownSymbols DeclarePackage Decompose DeconvolutionLayer Decrement Decrypt DecryptFile DedekindEta DeepSpaceProbeData Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultPrintPrecision DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValue DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod DefineResourceFunction Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic DEigensystem DEigenvalues Deinitialization Del DelaunayMesh Delayed Deletable Delete DeleteAnomalies DeleteBorderComponents DeleteCases DeleteChannel DeleteCloudExpression DeleteContents DeleteDirectory DeleteDuplicates DeleteDuplicatesBy DeleteFile DeleteMissing DeleteObject DeletePermissionsKey DeleteSearchIndex DeleteSmallComponents DeleteStopwords DeleteWithContents DeletionWarning DelimitedArray DelimitedSequence Delimiter DelimiterFlashTime DelimiterMatching Delimiters DeliveryFunction Dendrogram Denominator DensityGraphics DensityHistogram DensityPlot DensityPlot3D DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DerivedKey DescriptorStateSpace DesignMatrix DestroyAfterEvaluation Det DeviceClose DeviceConfigure DeviceExecute DeviceExecuteAsynchronous DeviceObject DeviceOpen DeviceOpenQ DeviceRead DeviceReadBuffer DeviceReadLatest DeviceReadList DeviceReadTimeSeries Devices DeviceStreams DeviceWrite DeviceWriteBuffer DGaussianWavelet DiacriticalPositioning Diagonal DiagonalizableMatrixQ DiagonalMatrix DiagonalMatrixQ Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DictionaryWordQ DifferenceDelta DifferenceOrder DifferenceQuotient DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitalSignature DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralAngle DihedralGroup Dilation DimensionalCombinations DimensionalMeshComponents DimensionReduce DimensionReducerFunction DimensionReduction Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletBeta DirichletCharacter DirichletCondition DirichletConvolve DirichletDistribution DirichletEta DirichletL DirichletLambda DirichletTransform DirichletWindow DisableConsolePrintPacket DisableFormatting DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLimit DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscreteMaxLimit DiscreteMinLimit DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform DiscretizeGraphics DiscretizeRegion Discriminant DisjointQ Disjunction Disk DiskBox DiskMatrix DiskSegment Dispatch DispatchQ DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceMatrix DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers DivideSides Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentGenerator DocumentGeneratorInformation DocumentGeneratorInformationData DocumentGenerators DocumentNotebook DocumentWeightingRules Dodecahedron DomainRegistrationInformation DominantColors DOSTextFormat Dot DotDashed DotEqual DotLayer DotPlusLayer Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DropoutLayer DSolve DSolveValue Dt DualLinearProgramming DualPolyhedron DualSystemsModel DumpGet DumpSave DuplicateFreeQ Duration Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicGeoGraphics DynamicImage DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptionsE EarthImpactData EarthquakeData EccentricityCentrality Echo EchoFunction EclipseType EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeContract EdgeCost EdgeCount EdgeCoverQ EdgeCycleMatrix EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight EdgeWeightedGraphQ Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData ElementwiseLayer ElidedForms Eliminate EliminationOrder Ellipsoid EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmbedCode EmbeddedHTML EmbeddedService EmbeddingLayer EmbeddingObject EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EmptyRegion EnableConsolePrintPacket Enabled Encode Encrypt EncryptedObject EncryptFile End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfBuffer EndOfFile EndOfLine EndOfString EndPackage EngineEnvironment EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entity EntityClass EntityClassList EntityCopies EntityFunction EntityGroup EntityInstance EntityList EntityPrefetch EntityProperties EntityProperty EntityPropertyClass EntityRegister EntityStore EntityStores EntityTypeName EntityUnregister EntityValue Entropy EntropyFilter Environment Epilog EpilogFunction Equal EqualColumns EqualRows EqualTilde EqualTo EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EscapeRadius EstimatedBackground EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerAngles EulerCharacteristic EulerE EulerGamma EulerianGraphQ EulerMatrix EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluateScheduledTask EvaluationBox EvaluationCell EvaluationCompletionAction EvaluationData EvaluationElements EvaluationEnvironment EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels EventSeries ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludedLines ExcludedPhysicalQuantities ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog ExoplanetData Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi ExpirationDate Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportByteArray ExportForm ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpressionUUID ExpToTrig ExtendedEntityClass ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalBundle ExternalCall ExternalDataCharacterEncoding ExternalEvaluate ExternalFunction ExternalFunctionName ExternalObject ExternalOptions ExternalSessionObject ExternalSessions ExternalTypeSignature ExternalValue Extract ExtractArchive ExtractLayer ExtremeValueDistributionFaceForm FaceGrids FaceGridsStyle FacialFeatures Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail Failure FailureAction FailureDistribution FailureQ False FareySequence FARIMAProcess FeatureDistance FeatureExtract FeatureExtraction FeatureExtractor FeatureExtractorFunction FeatureNames FeatureNearest FeatureSpacePlot FeatureSpacePlot3D FeatureTypes FEDisableConsolePrintPacket FeedbackLinearize FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket FetalGrowthData Fibonacci Fibonorial FieldCompletionFunction FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileConvert FileDate FileExistsQ FileExtension FileFormat FileHandler FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameForms FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileSize FileSystemMap FileSystemScan FileTemplate FileTemplateApply FileType FilledCurve FilledCurveBox FilledCurveBoxOptions Filling FillingStyle FillingTransform FilteredEntityClass FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindAnomalies FindArgMax FindArgMin FindChannels FindClique FindClusters FindCookies FindCurvePath FindCycle FindDevices FindDistribution FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEdgeIndependentPaths FindEquationalProof FindEulerianCycle FindExternalEvaluators FindFaces FindFile FindFit FindFormula FindFundamentalCycles FindGeneratingFunction FindGeoLocation FindGeometricConjectures FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindHamiltonianPath FindHiddenMarkovStates FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMatchingColor FindMaximum FindMaximumFlow FindMaxValue FindMeshDefects FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindMoleculeSubstructure FindPath FindPeaks FindPermutation FindPostmanTour FindProcessParameters FindRepeat FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindSpanningTree FindSystemModelEquilibrium FindTextualAnswer FindThreshold FindTransientRepeat FindVertexCover FindVertexCut FindVertexIndependentPaths Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstCase FirstPassageTimeDistribution FirstPosition FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FitRegularization FittedModel FixedOrder FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlattenLayer FlatTopWindow FlipView Floor FlowPolynomial FlushPrintOutputPacket Fold FoldList FoldPair FoldPairList FollowRedirects Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FormControl FormFunction FormLayoutFunction FormObject FormPage FormTheme FormulaData FormulaLookup FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalGaussianNoiseProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameRate FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrenetSerretSystem FrequencySamplingFilterKernel FresnelC FresnelF FresnelG FresnelS Friday FrobeniusNumber FrobeniusSolve FromAbsoluteTime FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS FromEntity FromJulianDate FromLetterNumber FromPolarCoordinates FromRomanNumeral FromSphericalCoordinates FromUnixTime Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullInformationOutputRegulator FullOptions FullRegion FullSimplify Function FunctionCompile FunctionCompileExport FunctionCompileExportByteArray FunctionCompileExportLibrary FunctionCompileExportString FunctionDomain FunctionExpand FunctionInterpolation FunctionPeriod FunctionRange FunctionSpace FussellVeselyImportanceGaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins GalaxyData GalleryView Gamma GammaDistribution GammaRegularized GapPenalty GARCHProcess GatedRecurrentLayer Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianOrthogonalMatrixDistribution GaussianSymplecticMatrixDistribution GaussianUnitaryMatrixDistribution GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateAsymmetricKeyPair GenerateConditions GeneratedCell GeneratedDocumentBinding GenerateDerivedKey GenerateDigitalSignature GenerateDocument GeneratedParameters GeneratedQuantityMagnitudes GenerateHTTPResponse GenerateSecuredAuthenticationKey GenerateSymmetricKey GeneratingFunction GeneratorDescription GeneratorHistoryLength GeneratorOutputType Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeoAntipode GeoArea GeoArraySize GeoBackground GeoBoundingBox GeoBounds GeoBoundsRegion GeoBubbleChart GeoCenter GeoCircle GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDisk GeoDisplacement GeoDistance GeoDistanceList GeoElevationData GeoEntities GeoGraphics GeogravityModelData GeoGridDirectionDifference GeoGridLines GeoGridLinesStyle GeoGridPosition GeoGridRange GeoGridRangePadding GeoGridUnitArea GeoGridUnitDistance GeoGridVector GeoGroup GeoHemisphere GeoHemisphereBoundary GeoHistogram GeoIdentify GeoImage GeoLabels GeoLength GeoListPlot GeoLocation GeologicalPeriodData GeomagneticModelData GeoMarker GeometricAssertion GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricScene GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoModel GeoNearest GeoPath GeoPosition GeoPositionENU GeoPositionXYZ GeoProjection GeoProjectionData GeoRange GeoRangePadding GeoRegionValuePlot GeoResolution GeoScaleBar GeoServer GeoSmoothHistogram GeoStreamPlot GeoStyling GeoStylingImageFunction GeoVariant GeoVector GeoVectorENU GeoVectorPlot GeoVectorXYZ GeoVisibleRegion GeoVisibleRegionBoundary GeoWithinQ GeoZoomLevel GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenAngle GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter GrammarApply GrammarRules GrammarToken Graph Graph3D GraphAssortativity GraphAutomorphismGroup GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel Greater GreaterEqual GreaterEqualLess GreaterEqualThan GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterThan GreaterTilde Green GreenFunction Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupBy GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators Groupings GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain GroupTogetherGrouping GroupTogetherNestedGrouping GrowCutComponents Gudermannian GuidedFilter GumbelDistributionHaarWavelet HadamardMatrix HalfLine HalfNormalDistribution HalfPlane HalfSpace HamiltonianGraphQ HammingDistance HammingWindow HandlerFunctions HandlerFunctionsKeys HankelH1 HankelH2 HankelMatrix HankelTransform HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash Haversine HazardFunction Head HeadCompose HeaderLines Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings Here HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenMarkovProcess HiddenSurface Highlighted HighlightGraph HighlightImage HighlightMesh HighpassFilter HigmanSimsGroupHS HilbertCurve HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HistoricalPeriodData HitMissTransform HITSCentrality HjorthDistribution HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HostLookup HotellingTSquareDistribution HoytDistribution HTMLSave HTTPErrorResponse HTTPRedirect HTTPRequest HTTPRequestData HTTPResponse Hue HumanGrowthData HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyperplane Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestDataI IconData Iconize IconizedObject IconRules Icosahedron Identity IdentityMatrix If IgnoreCase IgnoreDiacritics IgnorePunctuation IgnoreSpellCheck IgnoringInactive Im Image Image3D Image3DProjection Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageApplyIndexed ImageAspectRatio ImageAssemble ImageAugmentationLayer ImageBoundingBoxes ImageCache ImageCacheValid ImageCapture ImageCaptureFunction ImageCases ImageChannels ImageClip ImageCollage ImageColorSpace ImageCompose ImageContainsQ ImageContents ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDisplacements ImageDistance ImageEffect ImageExposureCombine ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageFocusCombine ImageForestingComponents ImageFormattingWidth ImageForwardTransformation ImageGraphics ImageHistogram ImageIdentify ImageInstanceQ ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarker ImageMarkers ImageMeasurements ImageMesh ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImagePosition ImagePreviewFunction ImagePyramid ImagePyramidApply ImageQ ImageRangeCache ImageRecolor ImageReflect ImageRegion ImageResize ImageResolution ImageRestyle ImageRotate ImageRotated ImageSaliencyFilter ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions ImagingDevice ImplicitRegion Implies Import ImportAutoReplacements ImportByteArray ImportOptions ImportString ImprovementImportance In Inactivate Inactive IncidenceGraph IncidenceList IncidenceMatrix IncludeAromaticBonds IncludeConstantBasis IncludeDefinitions IncludeDirectories IncludeFileExtension IncludeGeneratorTasks IncludeHydrogens IncludeInflections IncludeMetaInformation IncludePods IncludeQuantities IncludeRelatedTables IncludeSingularTerm IncludeWindowTimes Increment IndefiniteMatrixQ Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentPhysicalQuantity IndependentUnit IndependentUnitDimension IndependentVertexSetQ Indeterminate IndeterminateThreshold IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers InfiniteLine InfinitePlane Infinity Infix InflationAdjust InflationMethod Information InformationData InformationDataGrid Inherited InheritScope InhomogeneousPoissonProcess InitialEvaluationHistory Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InitializationObjects InitializationValue Initialize InitialSeeding InlineCounterAssignments InlineCounterIncrements InlineRules Inner InnerPolygon InnerPolyhedron Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionFunction InsertionPointObject InsertLinebreaks InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Insphere Install InstallService InstanceNormalizationLayer InString Integer IntegerDigits IntegerExponent IntegerLength IntegerName IntegerPart IntegerPartitions IntegerQ IntegerReverse Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction Interpreter InterpretTemplate InterquartileRange Interrupt InterruptSettings IntersectingQ Intersection Interval IntervalIntersection IntervalMarkers IntervalMarkersStyle IntervalMemberQ IntervalSlider IntervalUnion Into Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHankelTransform InverseHaversine InverseImagePyramid InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InverseMellinTransform InversePermutation InverseRadon InverseRadonTransform InverseSeries InverseShortTimeFourier InverseSpectrogram InverseSurvivalFunction InverseTransformedRegion InverseWaveletTransform InverseWeierstrassP InverseWishartMatrixDistribution InverseZTransform Invisible InvisibleApplication InvisibleTimes IPAddress IrreduciblePolynomialQ IslandData IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemAspectRatio ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcessJaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join JoinAcross Joined JoinedCurve JoinedCurveBox JoinedCurveBoxOptions JoinForm JordanDecomposition JordanModelDecomposition JulianDate JuliaSetBoettcher JuliaSetIterationCount JuliaSetPlot JuliaSetPointsK KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KEdgeConnectedComponents KEdgeConnectedGraphQ KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelFunction KernelMixtureDistribution Kernels Ket Key KeyCollisionFunction KeyComplement KeyDrop KeyDropFrom KeyExistsQ KeyFreeQ KeyIntersection KeyMap KeyMemberQ KeypointStrength Keys KeySelect KeySort KeySortBy KeyTake KeyUnion KeyValueMap KeyValuePattern Khinchin KillProcess KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnapsackSolve KnightTourGraph KnotData KnownUnitQ KochCurve KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter KVertexConnectedComponents KVertexConnectedGraphQLABColor Label Labeled LabeledSlider LabelingFunction LabelingSize LabelStyle LabelVisibility LaguerreL LakeData LambdaComponents LambertW LaminaData LanczosWindow LandauDistribution Language LanguageCategory LanguageData LanguageIdentify LanguageOptions LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCHColor LCM LeaderSize LeafCount LeapYearQ LearnDistribution LearnedDistribution LearningRate LearningRateMultipliers LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessEqualThan LessFullEqual LessGreater LessLess LessSlantEqual LessThan LessTilde LetterCharacter LetterCounts LetterNumber LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryDataType LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox Line3DBoxOptions LinearFilter LinearFractionalOptimization LinearFractionalTransform LinearGradientImage LinearizingTransformationData LinearLayer LinearModelFit LinearOffsetFunction LinearOptimization LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBoxOptions LineBreak LinebreakAdjustments LineBreakChart LinebreakSemicolonWeighting LineBreakWithin LineColor LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRankCentrality LinkRead LinkReadHeld LinkReadyQ Links LinkService LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot ListDensityPlot3D Listen ListFormat ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListSliceContourPlot3D ListSliceDensityPlot3D ListSliceVectorPlot3D ListStepPlot ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalAdaptiveBinarize LocalCache LocalClusteringCoefficient LocalizeDefinitions LocalizeVariables LocalObject LocalObjects LocalResponseNormalizationLayer LocalSubmit LocalSymbol LocalTime LocalTimeZone LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogisticSigmoid LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongestOrderedSequence LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow LongShortTermMemoryLayer Lookup Loopback LoopFreeGraphQ LossFunction LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowerTriangularMatrixQ LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LunarEclipse LUVColor LyapunovSolve LyonsGroupLyMachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MailAddressValidation MailExecute MailFolder MailItem MailReceiverFunction MailResponseFunction MailSearch MailServerConnect MailServerConnection MailSettings MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules ManagedLibraryExpressionID ManagedLibraryExpressionQ MandelbrotSetBoettcher MandelbrotSetDistance MandelbrotSetIterationCount MandelbrotSetMemberQ MandelbrotSetPlot MangoldtLambda ManhattanDistance Manipulate Manipulator MannedSpaceMissionData MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarchenkoPasturDistribution MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicalFunctionData MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixNormalDistribution MatrixPlot MatrixPower MatrixPropertyDistribution MatrixQ MatrixRank MatrixTDistribution Max MaxBend MaxCellMeasure MaxColorDistance MaxDetect MaxDuration MaxExtraBandwidths MaxExtraConditions MaxFeatureDisplacement MaxFeatures MaxFilter MaximalBy Maximize MaxItems MaxIterations MaxLimit MaxMemoryUsed MaxMixtureKernels MaxOverlapFraction MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxTrainingRounds MaxValue MaxwellDistribution MaxWordGap McLaughlinGroupMcL Mean MeanAbsoluteLossLayer MeanAround MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter MeanSquaredLossLayer Median MedianDeviation MedianFilter MedicalTestData Medium MeijerG MeijerGReduce MeixnerDistribution MellinConvolve MellinTransform MemberQ MemoryAvailable MemoryConstrained MemoryConstraint MemoryInUse MengerMesh Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuList MenuPacket MenuSortingValue MenuStyle MenuView Merge MergeDifferences MergingFunction MersennePrimeExponent MersennePrimeExponentQ Mesh MeshCellCentroid MeshCellCount MeshCellHighlight MeshCellIndex MeshCellLabel MeshCellMarker MeshCellMeasure MeshCellQuality MeshCells MeshCellShapeFunction MeshCellStyle MeshCoordinates MeshFunctions MeshPrimitives MeshQualityGoal MeshRange MeshRefinementFunction MeshRegion MeshRegionQ MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageObject MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation MeteorShowerData Method MethodOptions MexicanHatWavelet MeyerWavelet Midpoint Min MinColorDistance MinDetect MineralData MinFilter MinimalBy MinimalPolynomial MinimalStateSpaceModel Minimize MinimumTimeIncrement MinIntervalSize MinkowskiQuestionMark MinLimit MinMax MinorPlanetData Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingBehavior MissingDataMethod MissingDataRules MissingQ MissingString MissingStyle MissingValuePattern MittagLefflerE MixedFractionParts MixedGraphQ MixedMagnitude MixedRadix MixedRadixQuantity MixedUnit MixtureDistribution Mod Modal Mode Modular ModularInverse ModularLambda Module Modulus MoebiusMu Molecule MoleculeContainsQ MoleculeEquivalentQ MoleculeGraph MoleculeModify MoleculePattern MoleculePlot MoleculePlot3D MoleculeProperty MoleculeQ MoleculeValue Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction MomentOfInertia Monday Monitor MonomialList MonomialOrder MonsterGroupM MoonPhase MoonPosition MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform MortalityData Most MountainData MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovieData MovingAverage MovingMap MovingMedian MoyalDistribution Multicolumn MultiedgeStyle MultigraphQ MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity MultiplySides Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistributionN NakagamiDistribution NameQ Names NamespaceBox NamespaceBoxOptions Nand NArgMax NArgMin NBernoulliB NBodySimulation NBodySimulationData NCache NDEigensystem NDEigenvalues NDSolve NDSolveValue Nearest NearestFunction NearestNeighborGraph NearestTo NebulaData NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeDefiniteMatrixQ NegativeIntegers NegativeMultinomialDistribution NegativeRationals NegativeReals NegativeSemidefiniteMatrixQ NeighborhoodData NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestGraph NestList NestWhile NestWhileList NetAppend NetBidirectionalOperator NetChain NetDecoder NetDelete NetDrop NetEncoder NetEvaluationMode NetExtract NetFlatten NetFoldOperator NetGraph NetInformation NetInitialize NetInsert NetInsertSharedArrays NetJoin NetMapOperator NetMapThreadOperator NetMeasurements NetModel NetNestOperator NetPairEmbeddingOperator NetPort NetPortGradient NetPrepend NetRename NetReplace NetReplacePart NetSharedArray NetStateObject NetTake NetTrain NetTrainResultsObject NetworkPacketCapture NetworkPacketRecording NetworkPacketRecordingDuring NetworkPacketTrace NeumannValue NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextCell NextDate NextPrime NextScheduledTaskTime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NightHemisphere NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants NondimensionalizationTransform None NoneTrue NonlinearModelFit NonlinearStateSpaceModel NonlocalMeansFilter NonNegative NonNegativeIntegers NonNegativeRationals NonNegativeReals NonPositive NonPositiveIntegers NonPositiveRationals NonPositiveReals Nor NorlundB Norm Normal NormalDistribution NormalGrouping NormalizationLayer Normalize Normalized NormalizedSquaredEuclideanDistance NormalMatrixQ NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookImport NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookTemplate NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde Nothing NotHumpDownHump NotHumpEqual NotificationFunction NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar Now NoWhitespace NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms NuclearExplosionData NuclearReactorData Null NullRecords NullSpace NullWords Number NumberCompose NumberDecompose NumberExpand NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberLinePlot NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumeratorDenominator NumericalOrder NumericalSort NumericArray NumericArrayQ NumericArrayType NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlotO ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OceanData Octahedron OddQ Off Offset OLEData On ONanGroupON Once OneIdentity Opacity OpacityFunction OpacityFunctionScaling Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionalElement OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering OrderingBy OrderingLayer Orderless OrderlessPatternSequence OrnsteinUhlenbeckProcess Orthogonalize OrthogonalMatrixQ Out Outer OuterPolygon OuterPolyhedron OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OverwriteTarget OwenT OwnValuesPackage PackingMethod PaddedForm Padding PaddingLayer PaddingSize PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageTheme PageWidth Pagination PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath PalindromeQ Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo Parallelepiped ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds Parallelogram ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParametricRegion ParentBox ParentCell ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParentNotebook ParetoDistribution ParetoPickandsDistribution ParkData Part PartBehavior PartialCorrelationFunction PartialD ParticleAcceleratorData ParticleData Partition PartitionGranularity PartitionsP PartitionsQ PartLayer PartOfSpeech PartProtection ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteAutoQuoteCharacters PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PeakDetect PeanoCurve PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PercentForm PerfectNumber PerfectNumberQ PerformanceGoal Perimeter PeriodicBoundaryCondition PeriodicInterpolation Periodogram PeriodogramArray Permanent Permissions PermissionsGroup PermissionsGroupMemberQ PermissionsGroups PermissionsKey PermissionsKeys PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PerpendicularBisector PersistenceLocation PersistenceTime PersistentObject PersistentObjects PersistentValue PersonData PERTDistribution PetersenGraph PhaseMargins PhaseRange PhysicalSystemData Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest PingTime Pink PitchRecognize Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarAngle PlanarGraph PlanarGraphQ PlanckRadiationLaw PlaneCurveData PlanetaryMoonData PlanetData PlantData Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLabels PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangeClipPlanesStyle PlotRangePadding PlotRegion PlotStyle PlotTheme Pluralize Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox Point3DBoxOptions PointBox PointBoxOptions PointFigureChart PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonalNumber PolygonAngle PolygonBox PolygonBoxOptions PolygonCoordinates PolygonDecomposition PolygonHoleScale PolygonIntersections PolygonScale Polyhedron PolyhedronAngle PolyhedronCoordinates PolyhedronData PolyhedronDecomposition PolyhedronGenus PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PoolingLayer PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position PositionIndex Positive PositiveDefiniteMatrixQ PositiveIntegers PositiveRationals PositiveReals PositiveSemidefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerRange PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement Predict PredictionRoot PredictorFunction PredictorInformation PredictorMeasurements PredictorMeasurementsObject PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependLayer PrependTo PreprocessingRules PreserveColor PreserveImageOptions Previous PreviousCell PreviousDate PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitivePolynomialQ PrimitiveRoot PrimitiveRootList PrincipalComponents PrincipalValue Print PrintableASCIIQ PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment Printout3D Printout3DPreviewer PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateKey PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessConnection ProcessDirectory ProcessEnvironment Processes ProcessEstimator ProcessInformation ProcessObject ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessStatus ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm ProofObject Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse PsychrometricPropertyData PublicKey PublisherID PulsarData PunctuationCharacter Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptionsQBinomial QFactorial QGamma QHypergeometricPFQ QnDispersion QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ QuadraticOptimization Quantile QuantilePlot Quantity QuantityArray QuantityDistribution QuantityForm QuantityMagnitude QuantityQ QuantityUnit QuantityVariable QuantityVariableCanonicalUnit QuantityVariableDimensions QuantityVariableIdentifier QuantityVariablePhysicalQuantity Quartics QuartileDeviation Quartiles QuartileSkewness Query QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainderRadialGradientImage RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RadonTransform RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Ramp Random RandomChoice RandomColor RandomComplex RandomEntity RandomFunction RandomGeoPosition RandomGraph RandomImage RandomInstance RandomInteger RandomPermutation RandomPoint RandomPolygon RandomPolyhedron RandomPrime RandomReal RandomSample RandomSeed RandomSeeding RandomVariate RandomWalkProcess RandomWord Range RangeFilter RangeSpecification RankedMax RankedMin RarerProbability Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadByteArray ReadLine ReadList ReadProtected ReadString Real RealAbs RealBlockDiagonalForm RealDigits RealExponent Reals RealSign Reap RecognitionPrior RecognitionThreshold Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RectangularRepeatingElement RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate Region RegionBinarize RegionBoundary RegionBounds RegionCentroid RegionDifference RegionDimension RegionDisjoint RegionDistance RegionDistanceFunction RegionEmbeddingDimension RegionEqual RegionFunction RegionImage RegionIntersection RegionMeasure RegionMember RegionMemberFunction RegionMoment RegionNearest RegionNearestFunction RegionPlot RegionPlot3D RegionProduct RegionQ RegionResize RegionSize RegionSymmetricDifference RegionUnion RegionWithin RegisterExternalEvaluator RegularExpression Regularization RegularlySampledQ RegularPolygon ReIm ReImLabels ReImPlot ReImStyle Reinstall RelationalDatabase RelationGraph Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot RemoteAuthorizationCaching RemoteConnect RemoteConnectionObject RemoteFile RemoteRun RemoteRunProcess Remove RemoveAlphaChannel RemoveAsynchronousTask RemoveAudioStream RemoveBackground RemoveChannelListener RemoveChannelSubscribers Removed RemoveDiacritics RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RemoveUsers RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart RepairMesh Repeated RepeatedNull RepeatedString RepeatedTiming RepeatingElement Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated ReplicateLayer RequiredPhysicalQuantities Resampling ResamplingAlgorithmData ResamplingMethod Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask ReshapeLayer Residue ResizeLayer Resolve ResourceAcquire ResourceData ResourceFunction ResourceObject ResourceRegister ResourceRemove ResourceSearch ResourceSubmissionObject ResourceSubmit ResourceSystemBase ResourceUpdate ResponseForm Rest RestartInterval Restricted Resultant ResumePacket Return ReturnEntersInput ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnReceiptFunction ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseSort ReverseSortBy ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ RiemannXi Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightComposition RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity RollPitchYawAngles RollPitchYawMatrix RomanNumeral Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RSolveValue RudinShapiro RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulePlot RulerUnits Run RunProcess RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilaritySameQ SameTest SampledEntityClass SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SASTriangle SatelliteData SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveConnection SaveDefinitions SavitzkyGolayMatrix SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTask ScheduledTaskActiveQ ScheduledTaskInformation ScheduledTaskInformationData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScientificNotationThreshold ScorerGi ScorerGiPrime ScorerHi ScorerHiPrime ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptForm ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition SearchAdjustment SearchIndexObject SearchIndices SearchQueryString SearchResultObject Sec Sech SechDistribution SecondOrderConeOptimization SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SecuredAuthenticationKey SecuredAuthenticationKeys SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook SelectFirst Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemanticImport SemanticImportString SemanticInterpretation SemialgebraicComponentInstances SemidefiniteOptimization SendMail SendMessage Sequence SequenceAlignment SequenceAttentionLayer SequenceCases SequenceCount SequenceFold SequenceFoldList SequenceForm SequenceHold SequenceLastLayer SequenceMostLayer SequencePosition SequencePredict SequencePredictorFunction SequenceReplace SequenceRestLayer SequenceReverseLayer SequenceSplit Series SeriesCoefficient SeriesData ServiceConnect ServiceDisconnect ServiceExecute ServiceObject ServiceRequest ServiceResponse ServiceSubmit SessionSubmit SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetCloudDirectory SetCookies SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPermissions SetPrecision SetProperty SetSecuredAuthenticationKey SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemModel SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetUsers SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share SharingList Sharpen ShearingMatrix ShearingTransform ShellRegion ShenCastanMatrix ShiftedGompertzDistribution ShiftRegisterSequence Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortTimeFourier ShortTimeFourierData ShortUpArrow Show ShowAutoConvert ShowAutoSpellCheck ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowCodeAssist ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiderealTime SiegelTheta SiegelTukeyTest SierpinskiCurve SierpinskiMesh Sign Signature SignedRankTest SignedRegionDistance SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ SimplePolygonQ SimplePolyhedronQ Simplex Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution SkinStyle Skip SliceContourPlot3D SliceDensityPlot3D SliceDistribution SliceVectorPlot3D Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDecomposition SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SnDispersion Snippet SnubPolyhedron SocialMediaData Socket SocketConnect SocketListen SocketListener SocketObject SocketOpen SocketReadMessage SocketReadyQ Sockets SocketWaitAll SocketWaitNext SoftmaxLayer SokalSneathDissimilarity SolarEclipse SolarSystemFeatureData SolidAngle SolidData SolidRegionQ Solve SolveAlways SolveDelayed Sort SortBy SortedBy SortedEntityClass Sound SoundAndGraphics SoundNote SoundVolume SourceLink Sow Space SpaceCurveData SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution SpatialMedian SpatialTransformationLayer Speak SpeakTextPacket SpearmanRankTest SpearmanRho SpeciesData SpecificityGoal SpectralLineData Spectrogram SpectrogramArray Specularity SpeechRecognize SpeechSynthesize SpellingCorrection SpellingCorrectionList SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SpherePoints SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SphericalShell SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquareMatrixQ SquareRepeatingElement SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave SSSTriangle StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackedDateListPlot StackedListPlot StackInhibit StadiumShape StandardAtmosphereData StandardDeviation StandardDeviationFilter StandardForm Standardize Standardized StandardOceanData StandbyDistribution Star StarClusterData StarData StarGraph StartAsynchronousTask StartExternalSession StartingStepSize StartOfLine StartOfString StartProcess StartScheduledTask StartupSound StartWebSession StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StateTransformationLinearize StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StereochemistryElements StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StoppingPowerData StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamMarkers StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringContainsQ StringCount StringDelete StringDrop StringEndsQ StringExpression StringExtract StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPadLeft StringPadRight StringPart StringPartition StringPosition StringQ StringRepeat StringReplace StringReplaceList StringReplacePart StringReverse StringRiffle StringRotateLeft StringRotateRight StringSkeleton StringSplit StringStartsQ StringTake StringTemplate StringToByteArray StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleData StyleDefinitions StyleForm StyleHints StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subdivide Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subsequences Subset SubsetEqual SubsetMap SubsetQ Subsets SubStar SubstitutionSystem Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubtractSides SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde Success SuchThat Sum SumConvergence SummationLayer Sunday SunPosition Sunrise Sunset SuperDagger SuperMinus SupernovaData SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceArea SurfaceColor SurfaceData SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricKey SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Synonyms Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SynthesizeMissingValues SystemDialogInput SystemException SystemGet SystemHelpPath SystemInformation SystemInformationData SystemInstall SystemModel SystemModeler SystemModelExamples SystemModelLinearize SystemModelParametricSimulate SystemModelPlot SystemModelProgressReporting SystemModelReliability SystemModels SystemModelSimulate SystemModelSimulateSensitivity SystemModelSimulationData SystemOpen SystemOptions SystemProcessData SystemProcesses SystemsConnectionsModel SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelLinearity SystemsModelMerge SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemsModelVectorRelativeOrders SystemStub SystemTestTab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TableViewBoxBackground TableViewBoxOptions TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeDrop TakeLargest TakeLargestBy TakeList TakeSmallest TakeSmallestBy TakeWhile Tally Tan Tanh TargetDevice TargetFunctions TargetSystem TargetUnits TaskAbort TaskExecute TaskObject TaskRemove TaskResume Tasks TaskSuspend TaskWait TautologyQ TelegraphProcess TemplateApply TemplateArgBox TemplateBox TemplateBoxOptions TemplateEvaluate TemplateExpression TemplateIf TemplateObject TemplateSequence TemplateSlot TemplateSlotSequence TemplateUnevaluated TemplateVerbatim TemplateWith TemporalData TemporalRegularity Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge TestID TestReport TestReportObject TestResultObject Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCases TextCell TextClipboardType TextContents TextData TextElement TextForm TextGrid TextJustification TextLine TextPacket TextParagraph TextPosition TextRecognize TextSearch TextSearchReport TextSentences TextString TextStructure TextStyle TextTranslation Texture TextureCoordinateFunction TextureCoordinateScaling TextWords Therefore ThermodynamicData ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreadingLayer ThreeJSymbol Threshold Through Throw ThueMorse Thumbnail Thursday Ticks TicksStyle TideData Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint TimeDirection TimeFormat TimeGoal TimelinePlot TimeObject TimeObjectQ Times TimesBy TimeSeries TimeSeriesAggregate TimeSeriesForecast TimeSeriesInsert TimeSeriesInvertibility TimeSeriesMap TimeSeriesMapThread TimeSeriesModel TimeSeriesModelFit TimeSeriesResample TimeSeriesRescale TimeSeriesShift TimeSeriesThread TimeSeriesWindow TimeUsed TimeValue TimeWarpingCorrespondence TimeWarpingDistance TimeZone TimeZoneConvert TimeZoneOffset Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate Today ToDiscreteTimeModel ToEntity ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase Tomorrow ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform ToPolarCoordinates TopologicalSort ToRadicals ToRules ToSphericalCoordinates ToString Total TotalHeight TotalLayer TotalVariationFilter TotalWidth TouchPosition TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TrackingFunction TracyWidomDistribution TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TrainingProgressCheckpointing TrainingProgressFunction TrainingProgressMeasurements TrainingProgressReporting TrainingStoppingCriterion TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationClass TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField TransformedProcess TransformedRegion TransitionDirection TransitionDuration TransitionEffect TransitiveClosureGraph TransitiveReductionGraph Translate TranslationOptions TranslationTransform Transliterate Transparent TransparentColor Transpose TransposeLayer TrapSelection TravelDirections TravelDirectionsData TravelDistance TravelDistanceList TravelMethod TravelTime TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle Triangle TriangleCenter TriangleConstruct TriangleMeasurement TriangleWave TriangularDistribution TriangulateMesh Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean TrimmedVariance TropicalStormData True TrueQ TruncatedDistribution TruncatedPolyhedron TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBoxOptions TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow TunnelData Tuples TuranGraph TuringMachine TuttePolynomial TwoWayRule Typed TypeSpecifierUnateQ Uncompress UnconstrainedParameters Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UnderseaFeatureData UndirectedEdge UndirectedGraph UndirectedGraphQ UndoOptions UndoTrackedVariables Unequal UnequalTo Unevaluated UniformDistribution UniformGraphDistribution UniformPolyhedron UniformSumDistribution Uninstall Union UnionPlus Unique UnitaryMatrixQ UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitSystem UnitTriangle UnitVector UnitVectorLayer UnityDimensions UniverseModelData UniversityData UnixTime Unprotect UnregisterExternalEvaluator UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpdateSearchIndex UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize UpperTriangularMatrixQ Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpTo UpValues URL URLBuild URLDecode URLDispatcher URLDownload URLDownloadSubmit URLEncode URLExecute URLExpand URLFetch URLFetchAsynchronous URLParse URLQueryDecode URLQueryEncode URLRead URLResponseTime URLSave URLSaveAsynchronous URLShorten URLSubmit UseGraphicsRange UserDefinedWavelet Using UsingFrontEnd UtilityFunctionV2Get ValenceErrorHandling ValidationLength ValidationSet Value ValueBox ValueBoxOptions ValueDimensions ValueForm ValuePreprocessingFunction ValueQ Values ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorAround VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorGreater VectorGreaterEqual VectorLess VectorLessEqual VectorMarkers VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerificationTest VerifyConvergence VerifyDerivedKey VerifyDigitalSignature VerifyInterpretation VerifySecurityCertificates VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexContract VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight VertexWeightedGraphQ Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewProjection ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoiceStyleData VoigtDistribution VolcanoData Volume VonMisesDistribution VoronoiMeshWaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WarpingCorrespondence WarpingDistance WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeatherForecastData WebAudioSearch WebElementObject WeberE WebExecute WebImage WebImageSearch WebSearch WebSessionObject WebSessions WebWindowObject Wedge Wednesday WeibullDistribution WeierstrassE1 WeierstrassE2 WeierstrassE3 WeierstrassEta1 WeierstrassEta2 WeierstrassEta3 WeierstrassHalfPeriods WeierstrassHalfPeriodW1 WeierstrassHalfPeriodW2 WeierstrassHalfPeriodW3 WeierstrassInvariantG2 WeierstrassInvariantG3 WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White WhiteNoiseProcess WhitePoint Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WikipediaData WikipediaSearch WilksW WilksWTest WindDirectionData WindingCount WindingPolygon WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowPersistentStyles WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth WindSpeedData WindVectorData WinsorizedMean WinsorizedVariance WishartMatrixDistribution With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult WolframLanguageData Word WordBoundary WordCharacter WordCloud WordCount WordCounts WordData WordDefinition WordFrequency WordFrequencyData WordList WordOrientation WordSearch WordSelectionFunction WordSeparators WordSpacings WordStem WordTranslation WorkingPrecision WrapAround Write WriteLine WriteString WronskianXMLElement XMLObject XMLTemplate Xnor Xor XYZColorYellow Yesterday YuleDissimilarityZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZIPCodeData ZipfDistribution ZoomCenter ZoomFactor ZTest ZTransform$Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AllowExternalChannelFunctions $AssertFunction $Assumptions $AsynchronousTask $AudioInputDevices $AudioOutputDevices $BaseDirectory $BatchInput $BatchOutput $BlockchainBase $BoxForms $ByteOrdering $CacheBaseDirectory $Canceled $ChannelBase $CharacterEncoding $CharacterEncodings $CloudBase $CloudConnected $CloudCreditsAvailable $CloudEvaluation $CloudExpressionBase $CloudObjectNameFormat $CloudObjectURLType $CloudRootDirectory $CloudSymbolBase $CloudUserID $CloudUserUUID $CloudVersion $CloudVersionNumber $CloudWolframEngineVersionNumber $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $Cookies $CookieStore $CreationDate $CurrentLink $CurrentTask $CurrentWebSession $DateStringFormat $DefaultAudioInputDevice $DefaultAudioOutputDevice $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultLocalBase $DefaultMailbox $DefaultNetworkInterface $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $EmbedCodeEnvironments $EmbeddableServices $EntityStores $Epilog $EvaluationCloudBase $EvaluationCloudObject $EvaluationEnvironment $ExportFormats $Failed $FinancialDataSource $FontFamilies $FormatType $FrontEnd $FrontEndSession $GeoEntityTypes $GeoLocation $GeoLocationCity $GeoLocationCountry $GeoLocationPrecision $GeoLocationSource $HistoryLength $HomeDirectory $HTMLExportRules $HTTPCookies $HTTPRequest $IgnoreEOF $ImageFormattingWidth $ImagingDevice $ImagingDevices $ImportFormats $IncomingMailSettings $InitialDirectory $Initialization $InitializationContexts $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $InterpreterTypes $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $LocalBase $LocalSymbolBase $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $MobilePhone $ModuleNumber $NetworkConnected $NetworkInterfaces $NetworkLicense $NewMessage $NewSymbol $Notebooks $NoValue $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $Permissions $PermissionsGroupBase $PersistenceBase $PersistencePath $PipeSupported $PlotTheme $Post $Pre $PreferencesDirectory $PreInitialization $PrePrint $PreRead $PrintForms $PrintLiteral $Printout3DPreviewer $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $PublisherID $RandomState $RecursionLimit $RegisteredDeviceClasses $RegisteredUserName $ReleaseNumber $RequesterAddress $RequesterWolframID $RequesterWolframUUID $ResourceSystemBase $RootDirectory $ScheduledTask $ScriptCommandLine $ScriptInputString $SecuredAuthenticationKeyTokens $ServiceCreditsAvailable $Services $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SourceLink $SSHAuthentication $SummaryBoxDataSizeLimit $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemMemory $SystemShell $SystemTimeZone $SystemWordLength $TemplatePath $TemporaryDirectory $TemporaryPrefix $TestFileName $TextStyle $TimedOut $TimeUnit $TimeZone $TimeZoneEntity $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $UnitSystem $Urgent $UserAddOnsDirectory $UserAgentLanguages $UserAgentMachine $UserAgentName $UserAgentOperatingSystem $UserAgentString $UserAgentVersion $UserBaseDirectory $UserDocumentsDirectory $Username $UserName $UserURLBase $Version $VersionNumber $VoiceStyles $WolframID $WolframUUID\",c:[e.C(\"\\\\(\\\\*\",\"\\\\*\\\\)\",{c:[\"self\"]}),e.QSM,e.CNM]}});hljs.registerLanguage(\"vim\",function(e){return{l:/[!#@\\w]+/,k:{keyword:\"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank\",built_in:\"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp\"},i:/;/,c:[e.NM,{cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\"},{cN:\"string\",b:/\"(\\\\\"|\\n\\\\|[^\"\\n])*\"/},e.C('\"',\"$\"),{cN:\"variable\",b:/[bwtglsav]:[\\w\\d_]*/},{cN:\"function\",bK:\"function function!\",e:\"$\",relevance:0,c:[e.TM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\"}]},{cN:\"symbol\",b:/<[\\w-]+>/}]}});hljs.registerLanguage(\"makefile\",function(e){var i={cN:\"variable\",v:[{b:\"\\\\$\\\\(\"+e.UIR+\"\\\\)\",c:[e.BE]},{b:/\\$[@%<?\\^\\+\\*]/}]},r={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,i]},a={cN:\"variable\",b:/\\$\\([\\w-]+\\s/,e:/\\)/,k:{built_in:\"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value\"},c:[i]},n={b:\"^\"+e.UIR+\"\\\\s*(?=[:+?]?=)\"},t={cN:\"section\",b:/^[^\\s]+:/,e:/$/,c:[i]};return{aliases:[\"mk\",\"mak\"],k:\"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath\",l:/[\\w-]+/,c:[e.HCM,i,r,a,n,{cN:\"meta\",b:/^\\.PHONY:/,e:/$/,k:{\"meta-keyword\":\".PHONY\"},l:/[\\.\\w]+/},t]}});hljs.registerLanguage(\"objectivec\",function(e){var t=/[a-zA-Z@][a-zA-Z0-9_]*/,i=\"@interface @class @protocol @implementation\";return{aliases:[\"mm\",\"objc\",\"obj-c\"],k:{keyword:\"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN\",literal:\"false true FALSE TRUE nil YES NO NULL\",built_in:\"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once\"},l:t,i:\"</\",c:[{cN:\"built_in\",b:\"\\\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\\\w+\"},e.CLCM,e.CBCM,e.CNM,e.QSM,e.ASM,{cN:\"string\",v:[{b:'@\"',e:'\"',i:\"\\\\n\",c:[e.BE]}]},{cN:\"meta\",b:/#\\s*[a-z]+\\b/,e:/$/,k:{\"meta-keyword\":\"if else elif endif define undef warning error line pragma ifdef ifndef include\"},c:[{b:/\\\\\\n/,relevance:0},e.inherit(e.QSM,{cN:\"meta-string\"}),{cN:\"meta-string\",b:/<.*?>/,e:/$/,i:\"\\\\n\"},e.CLCM,e.CBCM]},{cN:\"class\",b:\"(\"+i.split(\" \").join(\"|\")+\")\\\\b\",e:\"({|$)\",eE:!0,k:i,l:t,c:[e.UTM]},{b:\"\\\\.\"+e.UIR,relevance:0}]}});hljs.registerLanguage(\"shell\",function(s){return{aliases:[\"console\"],c:[{cN:\"meta\",b:\"^\\\\s{0,3}[/\\\\w\\\\d\\\\[\\\\]()@-]*[>%$#]\",starts:{e:\"$\",sL:\"bash\"}}]}});hljs.registerLanguage(\"erlang\",function(e){var r=\"[a-z'][a-zA-Z0-9_']*\",c=\"(\"+r+\":\"+r+\"|\"+r+\")\",n={keyword:\"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor\",literal:\"false true\"},a=e.C(\"%\",\"$\"),b={cN:\"number\",b:\"\\\\b(\\\\d+#[a-fA-F0-9]+|\\\\d+(\\\\.\\\\d+)?([eE][-+]?\\\\d+)?)\",relevance:0},i={b:\"fun\\\\s+\"+r+\"/\\\\d+\"},l={b:c+\"\\\\(\",e:\"\\\\)\",rB:!0,relevance:0,c:[{b:c,relevance:0},{b:\"\\\\(\",e:\"\\\\)\",eW:!0,rE:!0,relevance:0}]},d={b:\"{\",e:\"}\",relevance:0},o={b:\"\\\\b_([A-Z][A-Za-z0-9_]*)?\",relevance:0},t={b:\"[A-Z][a-zA-Z0-9_]*\",relevance:0},v={b:\"#\"+e.UIR,relevance:0,rB:!0,c:[{b:\"#\"+e.UIR,relevance:0},{b:\"{\",e:\"}\",relevance:0}]},f={bK:\"fun receive if try case\",e:\"end\",k:n};f.c=[a,i,e.inherit(e.ASM,{cN:\"\"}),f,l,e.QSM,b,d,o,t,v];var s=[a,i,f,l,e.QSM,b,d,o,t,v];l.c[1].c=s,d.c=s;var u={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:v.c[1].c=s};return{aliases:[\"erl\"],k:n,i:\"(</|\\\\*=|\\\\+=|-=|/\\\\*|\\\\*/|\\\\(\\\\*|\\\\*\\\\))\",c:[{cN:\"function\",b:\"^\"+r+\"\\\\s*\\\\(\",e:\"->\",rB:!0,i:\"\\\\(|#|//|/\\\\*|\\\\\\\\|:|;\",c:[u,e.inherit(e.TM,{b:r})],starts:{e:\";|\\\\.\",k:n,c:s}},a,{b:\"^-\",e:\"\\\\.\",relevance:0,eE:!0,rB:!0,l:\"-\"+e.IR,k:\"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec\",c:[u]},b,e.QSM,v,o,t,d,{b:/\\.$/}]}});hljs.registerLanguage(\"powershell\",function(e){var t={keyword:\"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter\"},n={b:\"`[\\\\s\\\\S]\",relevance:0},c={cN:\"variable\",v:[{b:/\\$\\B/},{cN:\"keyword\",b:/\\$this/},{b:/\\$[\\w\\d][\\w\\d_:]*/}]},i={cN:\"string\",v:[{b:/\"/,e:/\"/},{b:/@\"/,e:/^\"@/}],c:[n,c,{cN:\"variable\",b:/\\$[A-z]/,e:/[^A-z]/}]},a={cN:\"string\",v:[{b:/'/,e:/'/},{b:/@'/,e:/^'@/}]},r=e.inherit(e.C(null,null),{v:[{b:/#/,e:/$/},{b:/<#/,e:/#>/}],c:[{cN:\"doctag\",v:[{b:/\\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{b:/\\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\\s+\\S+/}]}]}),o={cN:\"built_in\",v:[{b:\"(\".concat(\"Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where\",\")+(-)[\\\\w\\\\d]+\")}]},l={cN:\"class\",bK:\"class enum\",e:/\\s*[{]/,eE:!0,relevance:0,c:[e.TM]},s={cN:\"function\",b:/function\\s+/,e:/\\s*\\{|$/,eE:!0,rB:!0,relevance:0,c:[{b:\"function\",relevance:0,cN:\"keyword\"},{cN:\"title\",b:/\\w[\\w\\d]*((-)[\\w\\d]+)*/,relevance:0},{b:/\\(/,e:/\\)/,cN:\"params\",relevance:0,c:[c]}]},p={b:/using\\s/,e:/$/,rB:!0,c:[i,a,{cN:\"keyword\",b:/(using|assembly|command|module|namespace|type)/}]},b={v:[{cN:\"operator\",b:\"(\".concat(\"-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor\",\")\\\\b\")},{cN:\"literal\",b:/(-)[\\w\\d]+/,relevance:0}]},d={cN:\"function\",b:/\\[.*\\]\\s*[\\w]+[ ]??\\(/,e:/$/,rB:!0,relevance:0,c:[{cN:\"keyword\",b:\"(\".concat(t.keyword.toString().replace(/\\s/g,\"|\"),\")\\\\b\"),endsParent:!0,relevance:0},e.inherit(e.TM,{endsParent:!0})]},u=[d,r,n,e.NM,i,a,o,c,{cN:\"literal\",b:/\\$(null|true|false)\\b/},{cN:\"selector-tag\",b:/\\@\\B/,relevance:0}],m={b:/\\[/,e:/\\]/,eB:!0,eE:!0,relevance:0,c:[].concat(\"self\",u,{b:\"(\"+[\"string\",\"char\",\"byte\",\"int\",\"long\",\"bool\",\"decimal\",\"single\",\"double\",\"DateTime\",\"xml\",\"array\",\"hashtable\",\"void\"].join(\"|\")+\")\",cN:\"built_in\",relevance:0},{cN:\"type\",b:/[\\.\\w\\d]+/,relevance:0})};return d.c.unshift(m),{aliases:[\"ps\",\"ps1\"],l:/-?[A-z\\.\\-]+/,cI:!0,k:t,c:u.concat(l,s,p,b,m)}});hljs.registerLanguage(\"typescript\",function(e){var r=\"[A-Za-z$_][0-9A-Za-z$_]*\",t={keyword:\"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise\"},n={cN:\"meta\",b:\"@\"+r},a={b:\"\\\\(\",e:/\\)/,k:t,c:[\"self\",e.QSM,e.ASM,e.NM]},c={cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:t,c:[e.CLCM,e.CBCM,n,a]},s={cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)n?\"},{b:\"\\\\b(0[oO][0-7]+)n?\"},{b:e.CNR+\"n?\"}],relevance:0},o={cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\",k:t,c:[]},i={b:\"html`\",e:\"\",starts:{e:\"`\",rE:!1,c:[e.BE,o],sL:\"xml\"}},l={b:\"css`\",e:\"\",starts:{e:\"`\",rE:!1,c:[e.BE,o],sL:\"css\"}},b={cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,o]};return o.c=[e.ASM,e.QSM,i,l,b,s,e.RM],{aliases:[\"ts\"],k:t,c:[{cN:\"meta\",b:/^\\s*['\"]use strict['\"]/},e.ASM,e.QSM,i,l,b,e.CLCM,e.CBCM,s,{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{cN:\"function\",b:\"(\\\\(.*?\\\\)|\"+e.IR+\")\\\\s*=>\",rB:!0,e:\"\\\\s*=>\",c:[{cN:\"params\",v:[{b:e.IR},{b:/\\(\\s*\\)/},{b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:t,c:[\"self\",e.CLCM,e.CBCM]}]}]}],relevance:0},{cN:\"function\",bK:\"function\",e:/[\\{;]/,eE:!0,k:t,c:[\"self\",e.inherit(e.TM,{b:r}),c],i:/%/,relevance:0},{bK:\"constructor\",e:/[\\{;]/,eE:!0,c:[\"self\",c]},{b:/module\\./,k:{built_in:\"module\"},relevance:0},{bK:\"module\",e:/\\{/,eE:!0},{bK:\"interface\",e:/\\{/,eE:!0,k:\"interface extends\"},{b:/\\$[(.]/},{b:\"\\\\.\"+e.IR,relevance:0},n,a]}});hljs.registerLanguage(\"fortran\",function(e){return{cI:!0,aliases:[\"f90\",\"f95\"],k:{literal:\".False. .True.\",keyword:\"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then block endblock public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data\",built_in:\"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image\"},i:/\\/\\*/,c:[e.inherit(e.ASM,{cN:\"string\",relevance:0}),e.inherit(e.QSM,{cN:\"string\",relevance:0}),{cN:\"function\",bK:\"subroutine function program\",i:\"[${=\\\\n]\",c:[e.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\"}]},e.C(\"!\",\"$\",{relevance:0}),{cN:\"number\",b:\"(?=\\\\b|\\\\+|\\\\-|\\\\.)(?=\\\\.\\\\d|\\\\d)(?:\\\\d+)?(?:\\\\.?\\\\d*)(?:[de][+-]?\\\\d+)?\\\\b\\\\.?\",relevance:0}]}});hljs.registerLanguage(\"php\",function(e){var c={b:\"\\\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*\"},i={cN:\"meta\",b:/<\\?(php)?|\\?>/},t={cN:\"string\",c:[e.BE,i],v:[{b:'b\"',e:'\"'},{b:\"b'\",e:\"'\"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:[\"php\",\"php3\",\"php4\",\"php5\",\"php6\",\"php7\"],cI:!0,k:\"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally\",c:[e.HCM,e.C(\"//\",\"$\",{c:[i]}),e.C(\"/\\\\*\",\"\\\\*/\",{c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.C(\"__halt_compiler.+?;\",!1,{eW:!0,k:\"__halt_compiler\",l:e.UIR}),{cN:\"string\",b:/<<<['\"]?\\w+['\"]?$/,e:/^\\w+;?$/,c:[e.BE,{cN:\"subst\",v:[{b:/\\$\\w+/},{b:/\\{\\$/,e:/\\}/}]}]},i,{cN:\"keyword\",b:/\\$this\\b/},c,{b:/(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/},{cN:\"function\",bK:\"function\",e:/[;{]/,eE:!0,i:\"\\\\$|\\\\[|%\",c:[e.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",c,e.CBCM,t,a]}]},{cN:\"class\",bK:\"class interface\",e:\"{\",eE:!0,i:/[:\\(\\$\"]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"namespace\",e:\";\",i:/[\\.']/,c:[e.UTM]},{bK:\"use\",e:\";\",c:[e.UTM]},{b:\"=>\"},t,a]}});hljs.registerLanguage(\"haskell\",function(e){var i={v:[e.C(\"--\",\"$\"),e.C(\"{-\",\"-}\",{c:[\"self\"]})]},a={cN:\"meta\",b:\"{-#\",e:\"#-}\"},l={cN:\"meta\",b:\"^#\",e:\"$\"},c={cN:\"type\",b:\"\\\\b[A-Z][\\\\w']*\",relevance:0},n={b:\"\\\\(\",e:\"\\\\)\",i:'\"',c:[a,l,{cN:\"type\",b:\"\\\\b[A-Z][\\\\w]*(\\\\((\\\\.\\\\.|,|\\\\w+)\\\\))?\"},e.inherit(e.TM,{b:\"[_a-z][\\\\w']*\"}),i]};return{aliases:[\"hs\"],k:\"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec\",c:[{bK:\"module\",e:\"where\",k:\"module where\",c:[n,i],i:\"\\\\W\\\\.|;\"},{b:\"\\\\bimport\\\\b\",e:\"$\",k:\"import qualified as hiding\",c:[n,i],i:\"\\\\W\\\\.|;\"},{cN:\"class\",b:\"^(\\\\s*)?(class|instance)\\\\b\",e:\"where\",k:\"class family instance where\",c:[c,n,i]},{cN:\"class\",b:\"\\\\b(data|(new)?type)\\\\b\",e:\"$\",k:\"data family type newtype deriving\",c:[a,c,n,{b:\"{\",e:\"}\",c:n.c},i]},{bK:\"default\",e:\"$\",c:[c,n,i]},{bK:\"infix infixl infixr\",e:\"$\",c:[e.CNM,i]},{b:\"\\\\bforeign\\\\b\",e:\"$\",k:\"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe\",c:[c,e.QSM,i]},{cN:\"meta\",b:\"#!\\\\/usr\\\\/bin\\\\/env runhaskell\",e:\"$\"},a,l,e.QSM,e.CNM,c,e.inherit(e.TM,{b:\"^[_a-z][\\\\w']*\"}),i,{b:\"->|<-\"}]}});hljs.registerLanguage(\"coffeescript\",function(e){var c={keyword:\"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not\",literal:\"true false null undefined yes no on off\",built_in:\"npm require console print module global window document\"},n=\"[A-Za-z$_][0-9A-Za-z$_]*\",r={cN:\"subst\",b:/#\\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:\"(\\\\s*/)?\",relevance:0}}),{cN:\"string\",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/\"\"\"/,e:/\"\"\"/,c:[e.BE,r]},{b:/\"/,e:/\"/,c:[e.BE,r]}]},{cN:\"regexp\",v:[{b:\"///\",e:\"///\",c:[r,e.HCM]},{b:\"//[gim]{0,3}(?=\\\\W)\",relevance:0},{b:/\\/(?![ *]).*?(?![\\\\]).\\/[gim]{0,3}(?=\\W)/}]},{b:\"@\"+n},{sL:\"javascript\",eB:!0,eE:!0,v:[{b:\"```\",e:\"```\"},{b:\"`\",e:\"`\"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t=\"(\\\\(.*\\\\))?\\\\s*\\\\B[-=]>\",a={cN:\"params\",b:\"\\\\([^\\\\(]\",rB:!0,c:[{b:/\\(/,e:/\\)/,k:c,c:[\"self\"].concat(i)}]};return{aliases:[\"coffee\",\"cson\",\"iced\"],k:c,i:/\\/\\*/,c:i.concat([e.C(\"###\",\"###\"),e.HCM,{cN:\"function\",b:\"^\\\\s*\"+n+\"\\\\s*=\\\\s*\"+t,e:\"[-=]>\",rB:!0,c:[s,a]},{b:/[:\\(,=]\\s*/,relevance:0,c:[{cN:\"function\",b:t,e:\"[-=]>\",rB:!0,c:[a]}]},{cN:\"class\",bK:\"class\",e:\"$\",i:/[:=\"\\[\\]]/,c:[{bK:\"extends\",eW:!0,i:/[:=\"\\[\\]]/,c:[s]},s]},{b:n+\":\",e:\":\",rB:!0,rE:!0,relevance:0}])}});hljs.registerLanguage(\"r\",function(e){var r=\"([a-zA-Z]|\\\\.[a-zA-Z.])[a-zA-Z0-9._]*\";return{c:[e.HCM,{b:r,l:r,k:{keyword:\"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...\",literal:\"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10\"},relevance:0},{cN:\"number\",b:\"0[xX][0-9a-fA-F]+[Li]?\\\\b\",relevance:0},{cN:\"number\",b:\"\\\\d+(?:[eE][+\\\\-]?\\\\d*)?L\\\\b\",relevance:0},{cN:\"number\",b:\"\\\\d+\\\\.(?!\\\\d)(?:i\\\\b)?\",relevance:0},{cN:\"number\",b:\"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\",relevance:0},{cN:\"number\",b:\"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\",relevance:0},{b:\"`\",e:\"`\",relevance:0},{cN:\"string\",c:[e.BE],v:[{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]}]}});hljs.registerLanguage(\"autohotkey\",function(e){var a={b:\"`[\\\\s\\\\S]\"};return{cI:!0,aliases:[\"ahk\"],k:{keyword:\"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group\",literal:\"true false NOT AND OR\",built_in:\"ComSpec Clipboard ClipboardAll ErrorLevel\"},c:[a,e.inherit(e.QSM,{c:[a]}),e.C(\";\",\"$\",{relevance:0}),e.CBCM,{cN:\"number\",b:e.NR,relevance:0},{cN:\"variable\",b:\"%[a-zA-Z0-9#_$@]+%\"},{cN:\"built_in\",b:\"^\\\\s*\\\\w+\\\\s*(,|%)\"},{cN:\"title\",v:[{b:'^[^\\\\n\";]+::(?!=)'},{b:'^[^\\\\n\";]+:(?!=)',relevance:0}]},{cN:\"meta\",b:\"^\\\\s*#\\\\w+\",e:\"$\",relevance:0},{cN:\"built_in\",b:\"A_[a-zA-Z0-9]+\"},{b:\",\\\\s*,\"}]}});hljs.registerLanguage(\"elixir\",function(e){var b=\"[a-zA-Z_][a-zA-Z0-9_.]*(\\\\!|\\\\?)?\",c=\"and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote require import with|0\",n={cN:\"subst\",b:\"#\\\\{\",e:\"}\",l:b,k:c},r=\"[/|([{<\\\"']\",a={cN:\"string\",b:\"~[a-z](?=\"+r+\")\",c:[{endsParent:!0,c:[{c:[e.BE,n],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/\\//,e:/\\//},{b:/\\|/,e:/\\|/},{b:/\\(/,e:/\\)/},{b:/\\[/,e:/\\]/},{b:/\\{/,e:/\\}/},{b:/</,e:/>/}]}]}]},i={cN:\"string\",b:\"~[A-Z](?=\"+r+\")\",c:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/\\//,e:/\\//},{b:/\\|/,e:/\\|/},{b:/\\(/,e:/\\)/},{b:/\\[/,e:/\\]/},{b:/\\{/,e:/\\}/},{b:/\\</,e:/\\>/}]},l={cN:\"string\",c:[e.BE,n],v:[{b:/\"\"\"/,e:/\"\"\"/},{b:/'''/,e:/'''/},{b:/~S\"\"\"/,e:/\"\"\"/,c:[]},{b:/~S\"/,e:/\"/,c:[]},{b:/~S'''/,e:/'''/,c:[]},{b:/~S'/,e:/'/,c:[]},{b:/'/,e:/'/},{b:/\"/,e:/\"/}]},s={cN:\"function\",bK:\"def defp defmacro\",e:/\\B\\b/,c:[e.inherit(e.TM,{b:b,endsParent:!0})]},t=e.inherit(s,{cN:\"class\",bK:\"defimpl defmodule defprotocol defrecord\",e:/\\bdo\\b|$|;/}),d=[l,i,a,e.HCM,t,s,{b:\"::\"},{cN:\"symbol\",b:\":(?![\\\\s:])\",c:[l,{b:\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\"}],relevance:0},{cN:\"symbol\",b:b+\":(?!:)\",relevance:0},{cN:\"number\",b:\"(\\\\b0o[0-7_]+)|(\\\\b0b[01_]+)|(\\\\b0x[0-9a-fA-F_]+)|(-?\\\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)\",relevance:0},{cN:\"variable\",b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"->\"},{b:\"(\"+e.RSR+\")\\\\s*\",c:[e.HCM,{cN:\"regexp\",i:\"\\\\n\",c:[e.BE,n],v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}],relevance:0}];return{l:b,k:c,c:n.c=d}});hljs.registerLanguage(\"gradle\",function(e){return{cI:!0,k:{keyword:\"task project allprojects subprojects artifacts buildscript configurations dependencies repositories sourceSets description delete from into include exclude source classpath destinationDir includes options sourceCompatibility targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant def abstract break case catch continue default do else extends final finally for if implements instanceof native new private protected public return static switch synchronized throw throws transient try volatile while strictfp package import false null super this true antlrtask checkstyle codenarc copy boolean byte char class double float int interface long short void compile runTime file fileTree abs any append asList asWritable call collect compareTo count div dump each eachByte eachFile eachLine every find findAll flatten getAt getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter newReader newWriter next plus pop power previous print println push putAt read readBytes readLines reverse reverseEach round size sort splitEachLine step subMap times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader withStream withWriter withWriterAppend write writeLine\"},c:[e.CLCM,e.CBCM,e.ASM,e.QSM,e.NM,e.RM]}});hljs.registerLanguage(\"css\",function(e){var c={b:/(?:[A-Z\\_\\.\\-]+|--[a-zA-Z0-9_-]+)\\s*:/,rB:!0,e:\";\",eW:!0,c:[{cN:\"attribute\",b:/\\S/,e:\":\",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\\w-]+\\(/,rB:!0,c:[{cN:\"built_in\",b:/[\\w-]+/},{b:/\\(/,e:/\\)/,c:[e.ASM,e.QSM,e.CSSNM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"number\",b:\"#[0-9A-Fa-f]+\"},{cN:\"meta\",b:\"!important\"}]}}]};return{cI:!0,i:/[=\\/|'\\$]/,c:[e.CBCM,{cN:\"selector-id\",b:/#[A-Za-z0-9_-]+/},{cN:\"selector-class\",b:/\\.[A-Za-z0-9_-]+/},{cN:\"selector-attr\",b:/\\[/,e:/\\]/,i:\"$\",c:[e.ASM,e.QSM]},{cN:\"selector-pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/},{b:\"@(page|font-face)\",l:\"@[a-z-]+\",k:\"@page @font-face\"},{b:\"@\",e:\"[{;]\",i:/:/,rB:!0,c:[{cN:\"keyword\",b:/@\\-?\\w[\\w]*(\\-\\w+)*/},{b:/\\s/,eW:!0,eE:!0,relevance:0,k:\"and or not only\",c:[{b:/[a-z-]+:/,cN:\"attribute\"},e.ASM,e.QSM,e.CSSNM]}]},{cN:\"selector-tag\",b:\"[a-zA-Z-][a-zA-Z0-9_-]*\",relevance:0},{b:\"{\",e:\"}\",i:/\\S/,c:[e.CBCM,c]}]}});\n\nexports.hljs = hljs;\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/highlight/highlight.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/highlight/highlight.css": {
"text": "/*\n\nOriginal highlight.js style (c) Ivan Sagalaev <maniac@softwaremaniacs.org>\n\n*/\n\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n background: #F0F0F0;\n}\n\n\n/* Base color: saturation 0; */\n\n.hljs,\n.hljs-subst {\n color: #444;\n}\n\n.hljs-comment {\n color: #888888;\n}\n\n.hljs-keyword,\n.hljs-attribute,\n.hljs-selector-tag,\n.hljs-meta-keyword,\n.hljs-doctag,\n.hljs-name {\n font-weight: bold;\n}\n\n\n/* User color: hue: 0 */\n\n.hljs-type,\n.hljs-string,\n.hljs-number,\n.hljs-selector-id,\n.hljs-selector-class,\n.hljs-quote,\n.hljs-template-tag,\n.hljs-deletion {\n color: #880000;\n}\n\n.hljs-title,\n.hljs-section {\n color: #880000;\n font-weight: bold;\n}\n\n.hljs-regexp,\n.hljs-symbol,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-link,\n.hljs-selector-attr,\n.hljs-selector-pseudo {\n color: #BC6060;\n}\n\n\n/* Language color: hue: 90; */\n\n.hljs-literal {\n color: #78A960;\n}\n\n.hljs-built_in,\n.hljs-bullet,\n.hljs-code,\n.hljs-addition {\n color: #397300;\n}\n\n\n/* Meta color: hue: 200 */\n\n.hljs-meta {\n color: #1f7199;\n}\n\n.hljs-meta-string {\n color: #4d99bf;\n}\n\n\n/* Misc effects */\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n",
"type": "text/css",
"title": "$:/plugins/tiddlywiki/highlight/highlight.css",
"tags": "[[$:/tags/Stylesheet]]"
},
"$:/plugins/tiddlywiki/highlight/highlightblock.js": {
"title": "$:/plugins/tiddlywiki/highlight/highlightblock.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/highlight/highlightblock.js\ntype: application/javascript\nmodule-type: widget\n\nWraps up the fenced code blocks parser for highlight and use in TiddlyWiki5\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TYPE_MAPPINGS_BASE = \"$:/config/HighlightPlugin/TypeMappings/\";\n\nvar CodeBlockWidget = require(\"$:/core/modules/widgets/codeblock.js\").codeblock;\n\nvar hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n\nhljs.configure({tabReplace: \" \"});\t\n\nCodeBlockWidget.prototype.postRender = function() {\n\tvar domNode = this.domNodes[0],\n\t\tlanguage = this.language,\n\t\ttiddler = this.wiki.getTiddler(TYPE_MAPPINGS_BASE + language);\n\tif(tiddler) {\n\t\tlanguage = tiddler.fields.text || \"\";\n\t}\n\tif(language && hljs.getLanguage(language)) {\n\t\tdomNode.className = language.toLowerCase() + \" hljs\";\n\t\tif($tw.browser && !domNode.isTiddlyWikiFakeDom) {\n\t\t\thljs.highlightBlock(domNode);\t\t\t\n\t\t} else {\n\t\t\tvar text = domNode.textContent;\n\t\t\tdomNode.children[0].innerHTML = hljs.fixMarkup(hljs.highlight(language,text).value);\n\t\t\t// If we're using the fakedom then specially save the original raw text\n\t\t\tif(domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tdomNode.children[0].textInnerHTML = text;\n\t\t\t}\n\t\t}\n\t}\t\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/tiddlywiki/highlight/howto": {
"title": "$:/plugins/tiddlywiki/highlight/howto",
"text": "! Supporting Additional Languages\n \nThe [[highlight.js|https://github.com/highlightjs/highlight.js]] project supports many languages. Only a subset of these languages are supported by the plugin. It is possible for users to change the set of languages supported by the plugin by following these steps:\n \n# Go to the highlight.js project [[download page|https://highlightjs.org/download/]], select the language definitions to include, and press the Download button to download a zip archive containing customised support files for a highlight.js syntax highlighting server.\n# Locate the `highlight.pack.js` file in the highlight plugin -- on a stock Debian 8 system running Tiddlywiki5 under node-js it is located at `/usr/local/lib/node_modules/tiddlywiki/plugins/tiddlywiki/highlight/files/highlight.pack.js`.\n# Replace the plugin `highlight.pack.js` file located in step 2 with the one from the downloaded archive obtained in step 1.\n# Restart the Tiddlywiki server.\n"
},
"$:/plugins/tiddlywiki/highlight/license": {
"title": "$:/plugins/tiddlywiki/highlight/license",
"type": "text/plain",
"text": "Copyright (c) 2006, Ivan Sagalaev\nAll rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of highlight.js nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
},
"$:/plugins/tiddlywiki/highlight/readme": {
"title": "$:/plugins/tiddlywiki/highlight/readme",
"text": "This plugin provides syntax highlighting of code blocks using v9.18.1 of [[highlight.js|https://github.com/isagalaev/highlight.js]] from Ivan Sagalaev.\n\n! Usage\n\nWhen the plugin is installed it automatically applies highlighting to all codeblocks defined with triple backticks or with the CodeBlockWidget.\n\nThe language can optionally be specified after the opening triple braces:\n\n<$codeblock code=\"\"\"```css\n * { margin: 0; padding: 0; } /* micro reset */\n\nhtml { font-size: 62.5%; }\nbody { font-size: 14px; font-size: 1.4rem; } /* =14px */\nh1 { font-size: 24px; font-size: 2.4rem; } /* =24px */\n```\"\"\"/>\n\nIf no language is specified highlight.js will attempt to automatically detect the language.\n\n! Built-in Language Brushes\n\nThe plugin includes support for the following languages (referred to as \"brushes\" by highlight.js):\n\n* apache\n* arduino\n* arm assembly\n* asciidoc\n* autohotkey\n* awk\n* bash\n* cmake\n* coffeescript\n* cpp\n* cs\n* css\n* diff\n* dockerfile\n* erlang\n* elixir\n* fortran\n* go\n* gradle\n* haskell\n* html\n* http\n* ini\n* intel x86 assembly\n* java\n* javascript\n* json\n* kotlin\n* less\n* lua\n* makefile\n* markdown\n* mathematica\n* matlab\n* nginx\n* objectivec\n* perl\n* php\n* plaintext\n* powershell\n* properties\n* python\n* R\n* ruby\n* rust\n* scss\n* shell session\n* sql\n* swift\n* toml\n* typescript\n* vala\n* vim script\n* xml\n* yaml\n\nYou can also specify the language as a MIME content type (eg `text/html` or `text/css`). The mapping is accomplished via mapping tiddlers whose titles start with `$:/config/HighlightPlugin/TypeMappings/`.\n"
},
"$:/plugins/tiddlywiki/highlight/styles": {
"title": "$:/plugins/tiddlywiki/highlight/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": ".hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n background: <<colour tiddler-editor-background>>;\n color: <<colour foreground>>;\n -webkit-text-size-adjust:none\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #93a1a1;\n}\n\n/* Solarized Green */\n.hljs-keyword,\n.hljs-selector-tag,\n.hljs-addition {\n color: #859900;\n}\n\n/* Solarized Cyan */\n.hljs-number,\n.hljs-string,\n.hljs-meta .hljs-meta-string,\n.hljs-literal,\n.hljs-doctag,\n.hljs-regexp {\n color: #2aa198;\n}\n\n/* Solarized Blue */\n.hljs-title,\n.hljs-section,\n.hljs-name,\n.hljs-selector-id,\n.hljs-selector-class {\n color: #268bd2;\n}\n\n/* Solarized Yellow */\n.hljs-attribute,\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-class .hljs-title,\n.hljs-type {\n color: #b58900;\n}\n\n/* Solarized Orange */\n.hljs-symbol,\n.hljs-bullet,\n.hljs-subst,\n.hljs-meta,\n.hljs-meta .hljs-keyword,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-link {\n color: #cb4b16;\n}\n\n/* Solarized Red */\n.hljs-built_in,\n.hljs-deletion {\n color: #dc322f;\n}\n\n.hljs-formula {\n background: #eee8d5;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n"
},
"$:/config/HighlightPlugin/TypeMappings/application/javascript": {
"title": "$:/config/HighlightPlugin/TypeMappings/application/javascript",
"text": "javascript"
},
"$:/config/HighlightPlugin/TypeMappings/application/json": {
"title": "$:/config/HighlightPlugin/TypeMappings/application/json",
"text": "json"
},
"$:/config/HighlightPlugin/TypeMappings/text/css": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/css",
"text": "css"
},
"$:/config/HighlightPlugin/TypeMappings/text/html": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/html",
"text": "html"
},
"$:/config/HighlightPlugin/TypeMappings/image/svg+xml": {
"title": "$:/config/HighlightPlugin/TypeMappings/image/svg+xml",
"text": "xml"
},
"$:/config/HighlightPlugin/TypeMappings/text/x-markdown": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/x-markdown",
"text": "markdown"
},
"$:/plugins/tiddlywiki/highlight/usage": {
"title": "$:/plugins/tiddlywiki/highlight/usage",
"text": "! Usage\n\nFenced code blocks can have a language specifier added to trigger highlighting in a specific language. Otherwise heuristics are used to detect the language.\n\n```\n ```js\n var a = b + c; // Highlighted as JavaScript\n ```\n```\n! Adding Themes\n\nYou can add themes from highlight.js by copying the CSS to a new tiddler and tagging it with [[$:/tags/Stylesheet]]. The available themes can be found on GitHub:\n\nhttps://github.com/isagalaev/highlight.js/tree/master/src/styles\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/innerwiki/crosshairs.svg": {
"title": "$:/plugins/tiddlywiki/innerwiki/crosshairs.svg",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"128px\" height=\"128px\" viewBox=\"0 0 128 128\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <defs>\n <path d=\"M104.938091,68 L64,64 L68,103.85205 L68,108 C68,110.209139 66.209139,112 64,112 C61.790861,112 60,110.209139 60,108 L60,103.159803 L63.9305182,64 L22.9924274,68 L20,68 C17.790861,68 16,66.209139 16,64 C16,61.790861 17.790861,60 20,60 L22.9924274,60 L63.9305182,64 L60,24.8401973 L60,20 C60,17.790861 61.790861,16 64,16 C66.209139,16 68,17.790861 68,20 L68,24.1479497 L64,64 L104.938091,60 L108,60 C110.209139,60 112,61.790861 112,64 C112,66.209139 110.209139,68 108,68 L104.938091,68 Z\" id=\"path-1\"></path>\n <filter x=\"-15.6%\" y=\"-15.6%\" width=\"131.2%\" height=\"131.2%\" filterUnits=\"objectBoundingBox\" id=\"filter-2\">\n <feMorphology radius=\"2.5\" operator=\"dilate\" in=\"SourceAlpha\" result=\"shadowSpreadOuter1\"></feMorphology>\n <feOffset dx=\"0\" dy=\"0\" in=\"shadowSpreadOuter1\" result=\"shadowOffsetOuter1\"></feOffset>\n <feGaussianBlur stdDeviation=\"2.5\" in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\"></feGaussianBlur>\n <feColorMatrix values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\" type=\"matrix\" in=\"shadowBlurOuter1\"></feColorMatrix>\n </filter>\n </defs>\n <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"Combined-Shape\">\n <use fill=\"black\" fill-opacity=\"1\" filter=\"url(#filter-2)\" xlink:href=\"#path-1\"></use>\n <use fill=\"#FF0000\" fill-rule=\"evenodd\" xlink:href=\"#path-1\"></use>\n </g>\n </g>\n</svg>"
},
"$:/plugins/tiddlywiki/innerwiki/data.js": {
"title": "$:/plugins/tiddlywiki/innerwiki/data.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/innerwiki/data.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to represent a single item of data\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DataWidget = function(parseTreeNode,options) {\n\tthis.dataWidgetTag = parseTreeNode.type;\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDataWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDataWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nDataWidget.prototype.execute = function() {\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDataWidget.prototype.refresh = function(changedTiddlers) {\n\t// Refresh our attributes\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh our children\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.data = DataWidget;\nexports.anchor = DataWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/tiddlywiki/innerwiki/docs": {
"title": "$:/plugins/tiddlywiki/innerwiki/docs",
"text": "! `<$innerwiki>` widget\n\nThe `<$innerwiki>` widget encapsulates an embedded wiki. It starts as a blank copy of the current wiki and can have additional payload tiddlers added via embedded `<$data>` widgets (see below).\n\nIt supports the following attributes:\n\n|!Attribute |!Description |\n|template |Specifies the template to be used to generate the base wiki (defaults to $:/plugins/tiddlywiki/innerwiki/template) |\n|width |Width in pixels of the virtual screen for rendering the embedded wiki |\n|height |Height in pixels of the virtual screen for rendering the embedded wiki |\n|style |CSS style definitions to be added to the DIV wrapper around the IFRAME containing the embedded wiki |\n|class |CSS classes to be added to the DIV wrapper around the IFRAME containing the embedded wiki |\n|filename |Base filename for saving a screenshot of the embedded wiki under Node.js (excludes file extension) |\n|clipLeft |Position in pixels of the left edge of the clip rectangle (optional) |\n|clipTop |Position in pixels of the top edge of the clip rectangle (optional) |\n|clipWidth |Width in pixels of the clip rectangle (optional) |\n|clipHeight |Height in pixels of the clip rectangle (optional) |\n\n! `<$data>` widget\n\nThe `<$data>` widget is used within the `<$innerwiki>` widget to specify payload tiddlers to be added to the innerwiki.\n\nIt supports the following attributes:\n\n|!Attribute |!Description |\n|$tiddler |The title of a tiddler to be used as a payload tiddler (optional) |\n|$filter |A filter string identifying tiddlers to be used as payload tiddlers (optional) |\n|//any attribute<br>not starting<br>with $// |Field values to be assigned to the payload tiddler(s) |\n\nIt can be used in three different ways:\n\n* Without the `$tiddler` or `$filter` attributes, the remaining attributes provide the fields for a single payload tiddler\n* With the `$tiddler` attribute present, the payload tiddler takes its fields from that tiddler with the remaining attributes overriding those fields\n* With the `$filter` attribute present, the payload is a copy of all of the tiddlers identified by the filter, with the remaining attributes overriding those fields of each one\n\nThis example injects a copy of the \"HelloThere\" tiddler with the addition of the field \"custom\" set to \"Alpha\":\n\n```\n<$data $tiddler=\"HelloThere\" custom=\"Alpha\"/>\n```\n\nThis example injects all image tiddlers with the addition of the field \"custom\" set to \"Beta\":\n\n```\n<$data $filter=\"[is[image]]\" custom=\"Beta\"/>\n```\n\n! `<$anchor>` widget\n\nThe `<$anchor>` widget is used within the `<$innerwiki>` widget to specify draggable anchors to be overlaid on the innerwiki.\n\nIt supports the following attributes:\n\n|!Attribute |!Description |\n|x |The title of the tiddler containing the X coordinate of the anchor |\n|y |The title of the tiddler containing the Y coordinate of the anchor |\n\nThis example declares an anchor whose coordinates are contained in the tiddlers [[my-anchor-x]] and [[my-anchor-y]]:\n\n```\n<$anchor x=\"my-anchor-x\" y=\"my-anchor-y\"/>\n```\n\n! `screenshot` command\n\nSaves PNG screenshots of the `<$innerwiki>` widgets rendered by a set of tiddlers identified by a filter.\n\n```\n--screenshot <filter> <deviceScaleFactor>\n```\n\n* ''filter'': a filter identifying the tiddlers to be rendered, from which the individual `<$innerwiki>` widgets are screenshotted\n* ''deviceScaleFactor'': a scale factor for the screenshot (optional; defaults to 1)\n\nA deviceScaleFactor of 4 or 5 gives high quality screenshots suitable for print use.\n"
},
"$:/plugins/tiddlywiki/innerwiki/example-data": {
"title": "$:/plugins/tiddlywiki/innerwiki/example-data",
"text": "<$data title=\"$:/SiteTitle\" text=\"Innerwiki Demo\"/>\n<$data title=\"$:/SiteSubtitle\" text=\"Wikis spawning wikis\"/>\n\n"
},
"$:/plugins/tiddlywiki/innerwiki/examples": {
"title": "$:/plugins/tiddlywiki/innerwiki/examples",
"text": "\\define big-arrow(x,y,colour:\"#ff0000\",border:\"#000000\")\n\t<g transform=\"translate($x$,$y$)\">\n\t\t<path d=\"m-81.43106,34.99315l40.25737,-49.78116l40.25737,49.78116l-20.12869,0l0,50.02069l-40.25737,0l0,-50.02069l-20.12869,0l0,0z\" fill=\"$colour$\" stroke=\"$border$\" stroke-dasharray=\"null\" stroke-linecap=\"null\" stroke-linejoin=\"null\" stroke-width=\"5\" transform=\"rotate(49.3775 -41.1737 35.1129)\"/>\n\t</g>\n\\end\n\n\\define example(text)\n<$codeblock code=<<__text__>>/>\n\nRenders as:\n\n$text$\n\\end\n\n!! Browser\n\nThe innerwiki widget specifies the dimensions of the virtual screen used to render the wiki (in pixels) and CSS styles to apply to it. Nested `<$data>` widgets are used to specify individual payload tiddlers to be loaded into the wiki. In this example, we initialise the innerwiki with two tiddlers \"HelloThere\" and \"$:/DefaultTiddlers\":\n\n<$macrocall $name=\"example\" text=\"\"\"<$innerwiki width=\"1200\" height=\"400\" style=\"width:100%;\" filename=\"screenshot-1.png\">\n\t<$data title=\"HelloThere\" text=\"This tiddler is inside a wiki\"/>\n\t<$data title=\"$:/DefaultTiddlers\" text=\"HelloThere\"/>\n</$innerwiki>\"\"\"/>\n\nNote that the \"screenshot\" is a shrunken but fully interactive TiddlyWiki.\n\n!! Node.js\n\nTo render these examples as a PNG bitmap under Node.js, execute the following at the command prompt:\n\n```\ntiddlywiki editions/innerwikidemo --screenshot $:/plugins/tiddlywiki/innerwiki/examples\n```\n\nThe screenshots will be saved as `screenshot-1.png` etc in the `./output` folder of the wiki.\n\nTo render this example tiddler as a static HTML file that embeds the screenshot images and includes the SVG overlays:\n\n```\ntiddlywiki editions/innerwikidemo --render '[[$:/plugins/tiddlywiki/innerwiki/examples]]' \"examples.html\" --build index\n```\n\n!! SVG overlays\n\nAny displayable content within innerwiki widget is displayed within an automatically created SVG element. This allows overlays to be added:\n\n<$macrocall $name=\"example\" text=\"\"\"<$innerwiki width=\"1200\" height=\"400\" style=\"width:100%;\" filename=\"screenshot-2.png\">\n\t<$data title=\"HelloThere\" text=\"This tiddler is inside a wiki\"/>\n\t<$data title=\"$:/DefaultTiddlers\" text=\"HelloThere\"/>\n\t<circle cx=\"600\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"green\" />\n\t<<big-arrow 600 50>>\n</$innerwiki>\"\"\"/>\n\nNotice how macros can be used to encapsulate SVG fragments ([[see the source of this tiddler|$:/plugins/tiddlywiki/innerwiki/examples]]).\n\n!! Clipping\n\nA clipping rectangle can be applied to limit the area of the wiki that is displayed. For example:\n\n<$macrocall $name=\"example\" text=\"\"\"<$innerwiki width=\"1200\" height=\"400\" style=\"width:100%;\" clipLeft=\"500\" clipTop=\"100\" clipWidth=\"600\" clipHeight=\"300\" filename=\"screenshot-3.png\">\n\t<$data title=\"HelloThere\" text=\"! This tiddler is inside a wiki that is inside a wiki\"/>\n\t<$data title=\"$:/DefaultTiddlers\" text=\"HelloThere\"/>\n</$innerwiki>\"\"\"/>\n\n!! Transcluding payload tiddlers\n\nThis example shows how the `<$data>` widget can be transcluded from other tiddlers (see $:/plugins/tiddlywiki/innerwiki/example-data):\n\n<$macrocall $name=\"example\" text=\"\"\"<$innerwiki width=\"600\" height=\"400\" style=\"width:100%;\" filename=\"screenshot-4.png\">\n\t{{$:/plugins/tiddlywiki/innerwiki/example-data}}\n\t<$data title=\"HelloThere\" text=\"! This tiddler is inside a wiki that is inside a wiki\"/>\n\t<$data title=\"$:/DefaultTiddlers\" text=\"HelloThere\"/>\n</$innerwiki>\"\"\"/>\n\n!! Customising the wiki state\n\nBy injecting the right payload tiddlers, the innerwiki can be initialised to any desired state. In this example we inject a configuration tiddler to make the \"more\" page control button visible, and a state tiddler to cause the dropdown to appear:\n\n<$macrocall $name=\"example\" text=\"\"\"<$innerwiki template=\"$:/plugins/tiddlywiki/innerwiki/template\" filename=\"screenshot-5.png\" width=\"1200\" height=\"400\" style=\"width:100%;\">\n\t<$data title=\"HelloThere\" text=\"! This tiddler is inside a wiki that is inside a wiki\"/>\n\t<$data title=\"$:/DefaultTiddlers\" text=\"HelloThere\"/>\n\t<$data title=\"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions\" text=\"show\"/>\n\t<$data title=\"$:/state/popup/more--1600698846\" text=\"(151,144,21,25)\"/>\n</$innerwiki>\"\"\"/>\n\n<$macrocall $name=\"example\" text=\"\"\"<$innerwiki template=\"$:/plugins/tiddlywiki/innerwiki/template\" filename=\"screenshot-6.png\" width=\"1200\" height=\"400\" style=\"width:100%;\">\n\t<$data title=\"HelloThere\" text=\"! This tiddler is inside a wiki that is inside a wiki\"/>\n\t<$data title=\"Draft of 'HelloThere'\" text=\"This tiddler is inside a wiki that is inside a wiki\" draft.of=\"HelloThere\" draft.title=\"HelloThere\"/>\n\t<$data title=\"$:/DefaultTiddlers\" text=\"[[Draft of 'HelloThere']]\"/>\n\t<$data title=\"$:/state/sidebar\" text=\"no\"/>\n\t<$data title=\"$:/state/showeditpreview\" text=\"yes\"/>\n</$innerwiki>\"\"\"/>\n\n!! Draggable anchors\n\nThis example shows how the `<$anchor>` widget is used to display draggable anchors overlaid on the innerwiki. The `<$anchor>` widget is used to declare the tiddlers containing the coordinates of each anchor. These tiddlers can then be transcluded by SVG graphic primitives to position them according to the anchor locations.\n\n<$macrocall $name=\"example\" text=\"\"\"screenshot-7-anchor-1-x: <$edit-text tag=\"input\" tiddler=\"screenshot-7-anchor-1-x\"/>\n\nscreenshot-7-anchor-1-y: <$edit-text tag=\"input\" tiddler=\"screenshot-7-anchor-1-y\"/>\n\nscreenshot-7-anchor-2-x: <$edit-text tag=\"input\" tiddler=\"screenshot-7-anchor-2-x\"/>\n\nscreenshot-7-anchor-2-y: <$edit-text tag=\"input\" tiddler=\"screenshot-7-anchor-2-y\"/>\n\n<$innerwiki template=\"$:/plugins/tiddlywiki/innerwiki/template\" filename=\"screenshot-7.png\" width=\"1200\" height=\"400\" style=\"width:100%;\">\n\t<$anchor x=\"screenshot-7-anchor-1-x\" y=\"screenshot-7-anchor-1-y\"/>\n\t<$anchor x=\"screenshot-7-anchor-2-x\" y=\"screenshot-7-anchor-2-y\"/>\n\t<$data title=\"HelloThere\" text=\"! This tiddler is inside a wiki that is inside a wiki\"/>\n\t<$data title=\"$:/DefaultTiddlers\" text=\"HelloThere\"/>\n\t<$macrocall $name=\"big-arrow\" x={{screenshot-7-anchor-1-x}} y={{screenshot-7-anchor-1-y}}/>\n\t<circle cx={{screenshot-7-anchor-2-x}} cy={{screenshot-7-anchor-2-y}} r=\"50\" stroke=\"blue\" stroke-width=\"2\" fill=\"green\" />\n</$innerwiki>\"\"\"/>\n\n!! Inception\n\nAn innerwiki can itself contain an inner-innerwiki:\n\n<$macrocall $name=\"example\" text=\"\"\"<$innerwiki width=\"1200\" height=\"600\" style=\"width:100%;\" filename=\"screenshot-8.png\">\n\t<$data title=\"HelloThere\" text=\"! This tiddler is inside a wiki that is inside a wiki\"/>\n\t<$data title=\"$:/DefaultTiddlers\" text=\"HelloThere $:/plugins/tiddlywiki/innerwiki/inner-example\"/>\n\t<$data $tiddler=\"$:/plugins/tiddlywiki/innerwiki\"/>\n\t<<big-arrow 100 50 colour:#00ff00>>\n</$innerwiki>\"\"\"/>\n\n(You can see the innerwiki here: $:/plugins/tiddlywiki/innerwiki/inner-example)\n\nNote the way that the innerwiki plugin has to be explicitly added to the innerwiki.\n"
},
"$:/plugins/tiddlywiki/innerwiki/inner-example": {
"title": "$:/plugins/tiddlywiki/innerwiki/inner-example",
"text": "<$innerwiki width=\"1200\" height=\"400\" style=\"width:100%;\">\n\t<$anchor x=\"screenshot-inner-anchor-1-x\" y=\"screenshot-inner-anchor-1-y\"/>\n\t<circle cx={{screenshot-inner-anchor-1-x}} cy={{screenshot-inner-anchor-1-y}} r=\"50\" stroke=\"blue\" stroke-width=\"2\" fill=\"green\" />\n\t<$data title=\"HelloThere\" text=\"! This tiddler is inside a wiki that is inside a wiki that is inside a wiki\"/>\n\t<$data title=\"$:/DefaultTiddlers\" text=\"HelloThere\"/>\n\t<$data title=\"$:/palette\" text=\"$:/palettes/SolarFlare\"/>\n</$innerwiki>"
},
"$:/plugins/tiddlywiki/innerwiki/readme": {
"title": "$:/plugins/tiddlywiki/innerwiki/readme",
"text": "!! Introduction\n\nThis plugin enables TiddlyWiki to embed a modified copy of itself (an \"innerwiki\") with overlaid graphics. The primary motivation is to be able to produce screenshot illustrations that are automatically up-to-date with the appearance of TiddlyWiki as it changes over time, or to produce the same screenshot in different languages.\n\nIn the browser, innerwikis are displayed as an embedded iframe. Under Node.js [[Google's Puppeteer|https://pptr.dev/]] is used to load the innerwikis as off-screen web pages and then snapshot them as a PNG image.\n\n!! Warnings\n\nThe `<$innerwiki>` widget is relatively slow and resource intensive: each time it is refreshed it will entirely rebuild the iframe containing the innerwiki.\n\nThe `<$innerwiki>` widget does not automatically resize with its container (for example, try hiding the sidebar in this wiki).\n\n!! Prequisites\n\nIn order to take screenshots under Node.js, Google Puppeteer must first be installed from [[npm|https://npmjs.org//]]. For most situations, it should be installed at the root of the TiddlyWiki 5 repo:\n\n```\ncd Jermolene/TiddlyWiki5\nnpm install puppeteer\n```\n\nHowever, if you're working in a different repo that uses npm to install TiddlyWiki 5 then you should install Puppeteer into the same repo. The general rule is that the `node_modules` folder containing Puppeteer should be contained within an ancestor of the folder containing TiddlyWiki's `tiddlywiki.js` file.\n\n"
},
"$:/plugins/tiddlywiki/innerwiki/innerwiki.js": {
"title": "$:/plugins/tiddlywiki/innerwiki/innerwiki.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/innerwiki/innerwiki.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an innerwiki in an iframe\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_INNERWIKI_TEMPLATE = \"$:/plugins/tiddlywiki/innerwiki/template\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget,\n\tDataWidget = require(\"$:/plugins/tiddlywiki/innerwiki/data.js\").data,\n\tdm = $tw.utils.domMaker;\n\nvar InnerWikiWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nInnerWikiWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nInnerWikiWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create wrapper\n\tthis.domWrapper = dm(\"div\",{\n\t\tdocument: this.document,\n\t\t\"class\": (this.innerWikiClass || \"\").split(\" \").concat([\"tc-innerwiki-wrapper\"]).join(\" \"),\n\t\tstyle: {\n\t\t\toverflow: \"hidden\",\n\t\t\tposition: \"relative\",\n\t\t\tboxSizing: \"content-box\"\n\t\t}\n\t});\n\t// Set up the SVG container\n\tthis.domSVG = dm(\"svg\",{\n\t\tnamespace: \"http://www.w3.org/2000/svg\",\n\t\tdocument: this.document,\n\t\tstyle: {\n\t\t\twidth: \"100%\",\n\t\t\tposition: \"absolute\",\n\t\t\tzIndex: \"1\",\n\t\t\tpointerEvents: \"none\"\n\t\t},\n\t\tattributes: {\n\t\t\t\"viewBox\": \"0 0 \" + this.innerWikiClipWidth + \" \" + this.innerWikiClipHeight\n\t\t}\n\t});\n\tthis.domWrapper.appendChild(this.domSVG);\n\tthis.setVariable(\"namespace\",\"http://www.w3.org/2000/svg\");\n\t// Create the iframe for the browser or image for Node.js\n\tif(!this.document.isTiddlyWikiFakeDom) {\n\t\t// Create iframe\n\t\tthis.domIFrame = dm(\"iframe\",{\n\t\t\tdocument: this.document,\n\t\t\t\"class\": \"tc-innerwiki-iframe\",\n\t\t\tstyle: {\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tmaxWidth: \"none\",\n\t\t\t\tborder: \"none\"\n\t\t\t},\n\t\t\tattributes: {\n\t\t\t\twidth: this.innerWikiWidth,\n\t\t\t\theight: this.innerWikiHeight\n\t\t\t}\n\t\t});\n\t\tthis.domWrapper.appendChild(this.domIFrame);\n\t} else {\n\t\t// Create image placeholder\n\t\tthis.domImage = dm(\"img\",{\n\t\t\tdocument: this.document,\n\t\t\tstyle: {\n\t\t\t\twidth: \"100%\"\n\t\t\t},\n\t\t\tattributes: {\n\t\t\t\tsrc: this.innerWikiFilename\n\t\t\t}\n\t\t});\n\t\tthis.domWrapper.appendChild(this.domImage);\n\t}\n\t// Insert wrapper into the DOM\n\tparent.insertBefore(this.domWrapper,nextSibling);\n\tthis.renderChildren(this.domSVG,null);\n\tthis.domNodes.push(this.domWrapper);\n\t// If we're on the real DOM, finish the initialisation that needs us to be in the DOM\n\tif(!this.document.isTiddlyWikiFakeDom) {\n\t\t// Write the HTML\n\t\tthis.domIFrame.contentDocument.open();\n\t\tthis.domIFrame.contentDocument.write(this.createInnerHTML());\n\t\tthis.domIFrame.contentDocument.close();\n\t}\n\t// Scale the iframe and adjust the height of the wrapper\n\tthis.clipLeft = this.innerWikiClipLeft;\n\tthis.clipTop = this.innerWikiClipTop;\n\tthis.clipWidth = this.innerWikiClipWidth;\n\tthis.clipHeight = this.innerWikiClipHeight;\n\tthis.scale = this.domWrapper.clientWidth / this.clipWidth;\n\t// Display the anchors\n\tif(!this.document.isTiddlyWikiFakeDom) {\n\t\tthis.domAnchorContainer = dm(\"div\",{\n\t\t\tdocument: this.document,\n\t\t\tstyle: {\n\t\t\t\tposition: \"relative\",\n\t\t\t\tzIndex: \"2\",\n\t\t\t\ttransformOrigin: \"0 0\",\n\t\t\t\ttransform: \"scale(\" + this.scale + \")\"\n\t\t\t}\n\t\t});\n\t\tthis.domAnchorBackdrop = dm(\"div\",{\n\t\t\tdocument: this.document,\n\t\t\tstyle: {\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tdisplay: \"none\"\n\t\t\t}\n\t\t});\n\t\tthis.domAnchorContainer.appendChild(this.domAnchorBackdrop);\n\t\tthis.domWrapper.insertBefore(this.domAnchorContainer,this.domWrapper.firstChild);\n\t\tself.createAnchors();\n\t}\n\t// Scale the iframe and adjust the height of the wrapper\n\tif(!this.document.isTiddlyWikiFakeDom) {\n\t\tthis.domIFrame.style.transformOrigin = this.clipLeft + \"px \" + this.clipTop + \"px\";\n\t\tthis.domIFrame.style.transform = \"translate(\" + (-this.clipLeft) + \"px,\" + (-this.clipTop) + \"px) scale(\" + this.scale + \")\";\n\t\tthis.domWrapper.style.height = (this.clipHeight * this.scale) + \"px\";\n\t}\n};\n\n/*\nCreate the anchors\n*/\nInnerWikiWidget.prototype.createAnchors = function() {\n\tvar self = this;\n\tthis.findDataWidgets(this.children,\"anchor\",function(widget) {\n\t\tvar anchorWidth = 40,\n\t\t\tanchorHeight = 40,\n\t\t\tgetAnchorCoordinate = function(name) {\n\t\t\t\treturn parseInt(self.wiki.getTiddlerText(widget.getAttribute(name)),10) || 0;\n\t\t\t},\n\t\t\tsetAnchorCoordinate = function(name,value) {\n\t\t\t\tself.wiki.addTiddler({\n\t\t\t\t\ttitle: widget.getAttribute(name),\n\t\t\t\t\ttext: value + \"\"\n\t\t\t\t});\n\t\t\t},\n\t\t\tdomAnchor = dm(\"img\",{\n\t\t\t\tdocument: self.document,\n\t\t\t\tstyle: {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: anchorWidth + \"px\",\n\t\t\t\t\theight: anchorHeight + \"px\",\n\t\t\t\t\ttransformOrigin: \"50% 50%\",\n\t\t\t\t\ttransform: \"scale(\" + (1 / self.scale) + \")\",\n\t\t\t\t\tleft: (getAnchorCoordinate(\"x\") - anchorWidth / 2) + \"px\",\n\t\t\t\t\ttop: (getAnchorCoordinate(\"y\") - anchorHeight / 2) + \"px\"\n\t\t\t\t},\n\t\t\t\tattributes: {\n\t\t\t\t\tdraggable: false,\n\t\t\t\t\tsrc: \"data:image/svg+xml,\" + encodeURIComponent(self.wiki.getTiddlerText(\"$:/plugins/tiddlywiki/innerwiki/crosshairs.svg\"))\n\t\t\t\t}\n\t\t\t});\n\t\tself.domAnchorContainer.appendChild(domAnchor);\n\t\tvar posX,posY,dragStartX,dragStartY,deltaX,deltaY,\n\t\t\tfnMouseDown = function(event) {\n\t\t\t\tself.domAnchorBackdrop.style.width = self.clipWidth + \"px\";\n\t\t\t\tself.domAnchorBackdrop.style.height = self.clipHeight + \"px\";\n\t\t\t\tself.domAnchorBackdrop.style.display = \"block\";\n\t\t\t\tposX = domAnchor.offsetLeft;\n\t\t\t\tposY = domAnchor.offsetTop;\n\t\t\t\tdragStartX = event.clientX;\n\t\t\t\tdragStartY = event.clientY;\n\t\t\t\tdeltaX = 0;\n\t\t\t\tdeltaY = 0;\n\t\t\t\tself.document.addEventListener(\"mousemove\",fnMouseMove,false);\n\t\t\t\tself.document.addEventListener(\"mouseup\",fnMouseUp,false);\n\t\t\t},\n\t\t\tfnMouseMove = function(event) {\n\t\t\t\tdeltaX = (event.clientX - dragStartX) / self.scale;\n\t\t\t\tdeltaY = (event.clientY - dragStartY) / self.scale;\n\t\t\t\tdomAnchor.style.left = (posX + deltaX) + \"px\";\n\t\t\t\tdomAnchor.style.top = (posY + deltaY) + \"px\";\n\t\t\t},\n\t\t\tfnMouseUp = function(event) {\n\t\t\t\tvar x = getAnchorCoordinate(\"x\") + deltaX,\n\t\t\t\t\ty = getAnchorCoordinate(\"y\") + deltaY;\n\t\t\t\tif(x >= 0 && x < self.clipWidth && y >= 0 && y < self.clipHeight) {\n\t\t\t\t\tsetAnchorCoordinate(\"x\",x);\n\t\t\t\t\tsetAnchorCoordinate(\"y\",y);\n\t\t\t\t} else {\n\t\t\t\t\tdomAnchor.style.left = posX + \"px\";\n\t\t\t\t\tdomAnchor.style.top = posY + \"px\";\n\t\t\t\t}\n\t\t\t\tself.domAnchorBackdrop.style.display = \"none\";\n\t\t\t\tself.document.removeEventListener(\"mousemove\",fnMouseMove,false);\n\t\t\t\tself.document.removeEventListener(\"mouseup\",fnMouseUp,false);\n\t\t\t};\n\t\tdomAnchor.addEventListener(\"mousedown\",fnMouseDown,false);\n\t});\n};\n\n/*\nDelete the anchors\n*/\nInnerWikiWidget.prototype.deleteAnchors = function() {\n\tfor(var index=this.domAnchorContainer.childNodes.length-1; index>=0; index--) {\n\t\tvar node = this.domAnchorContainer.childNodes[index];\n\t\tif(node.tagName === \"IMG\") {\n\t\t\tnode.parentNode.removeChild(node);\n\t\t}\n\t}\n};\n\n/*\nCreate the HTML of the innerwiki\n*/\nInnerWikiWidget.prototype.createInnerHTML = function() {\n\t// Get the HTML of the iframe\n\tvar html = this.wiki.renderTiddler(\"text/plain\",this.innerWikiTemplate);\n\t// Insert the overlay tiddlers\n\tvar SPLIT_MARKER = \"<!--~~ Boot\" + \" kernel ~~-->\\n\",\n\t\tIMPLANT_PREFIX = \"<\" + \"script>\\n$tw.preloadTiddlerArray(\",\n\t\tIMPLANT_SUFFIX = \");\\n</\" + \"script>\\n\",\n\t\tparts = html.split(SPLIT_MARKER),\n\t\ttiddlers = this.readTiddlerDataWidgets(this.children);\n\tif(parts.length === 2) {\n\t\thtml = parts[0] + IMPLANT_PREFIX + JSON.stringify(tiddlers) + IMPLANT_SUFFIX + SPLIT_MARKER + parts[1];\n\t}\n\treturn html;\n};\n\n/*\nFind child data widgets\n*/\nInnerWikiWidget.prototype.findDataWidgets = function(children,tag,callback) {\n\tvar self = this;\n\t$tw.utils.each(children,function(child) {\n\t\tif(child.dataWidgetTag === tag) {\n\t\t\tcallback(child);\n\t\t}\n\t\tif(child.children) {\n\t\t\tself.findDataWidgets(child.children,tag,callback);\n\t\t}\n\t});\n};\n\n/*\nFind the child data widgets\n*/\nInnerWikiWidget.prototype.readTiddlerDataWidgets = function(children) {\n\tvar self = this,\n\t\tresults = [];\n\tthis.findDataWidgets(children,\"data\",function(widget) {\n\t\tArray.prototype.push.apply(results,self.readTiddlerDataWidget(widget));\n\t});\n\treturn results;\n};\n\n/*\nRead the value(s) from a data widget\n*/\nInnerWikiWidget.prototype.readTiddlerDataWidget = function(dataWidget) {\n\t// Start with a blank object\n\tvar item = Object.create(null);\n\t// Read any attributes not prefixed with $\n\t$tw.utils.each(dataWidget.attributes,function(value,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\titem[name] = value;\t\t\t\n\t\t}\n\t});\n\t// Deal with $tiddler or $filter attributes\n\tvar titles;\n\tif(dataWidget.hasAttribute(\"$tiddler\")) {\n\t\ttitles = [dataWidget.getAttribute(\"$tiddler\")];\n\t} else if(dataWidget.hasAttribute(\"$filter\")) {\n\t\ttitles = this.wiki.filterTiddlers(dataWidget.getAttribute(\"$filter\"));\n\t}\n\tif(titles) {\n\t\tvar self = this;\n\t\tvar results = [];\n\t\t$tw.utils.each(titles,function(title,index) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\t\tfields;\n\t\t\tif(tiddler) {\n\t\t\t\tfields = tiddler.getFieldStrings();\n\t\t\t}\n\t\t\tresults.push($tw.utils.extend({},item,fields));\n\t\t})\n\t\treturn results;\n\t} else {\n\t\treturn [item];\t\t\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nInnerWikiWidget.prototype.execute = function() {\n\tvar parseStringAsNumber = function(num,defaultValue) {\n\t\tnum = parseInt(num + \"\",10);\n\t\tif(!isNaN(num)) {\n\t\t\treturn num;\n\t\t} else {\n\t\t\treturn parseInt(defaultValue + \"\",10);\n\t\t}\n\t};\n\t// Get our parameters\n\tthis.innerWikiTemplate = this.getAttribute(\"template\",DEFAULT_INNERWIKI_TEMPLATE);\n\tthis.innerWikiWidth = parseStringAsNumber(this.getAttribute(\"width\"),800);\n\tthis.innerWikiHeight = parseStringAsNumber(this.getAttribute(\"height\"),600);\n\tthis.innerWikiStyle = this.getAttribute(\"style\");\n\tthis.innerWikiClass = this.getAttribute(\"class\");\n\tthis.innerWikiFilename = this.getAttribute(\"filename\");\n\tthis.innerWikiClipLeft = parseStringAsNumber(this.getAttribute(\"clipLeft\"),0);\n\tthis.innerWikiClipTop = parseStringAsNumber(this.getAttribute(\"clipTop\"),0);\n\tthis.innerWikiClipWidth = parseStringAsNumber(this.getAttribute(\"clipWidth\"),this.innerWikiWidth);\n\tthis.innerWikiClipHeight = parseStringAsNumber(this.getAttribute(\"clipHeight\"),this.innerWikiHeight);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nInnerWikiWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.template || changedAttributes.width || changedAttributes.height || changedAttributes.style || changedAttributes.class) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(childrenRefreshed) {\n\t\t\tthis.deleteAnchors();\n\t\t\tthis.createAnchors();\n\t\t}\n\t\treturn childrenRefreshed\n\t}\n};\n\n/*\nUse Puppeteer to save a screenshot to a file\n*/\nInnerWikiWidget.prototype.saveScreenshot = function(options,callback) {\n\tvar self = this,\n\t\tbasepath = options.basepath || \".\",\n\t\tdeviceScaleFactor = options.deviceScaleFactor || 1;\n\t// Don't do anything if we don't have a filename\n\tif(!this.innerWikiFilename) {\n\t\treturn callback(null);\n\t}\n\tvar path = require(\"path\"),\n\t\tfilepath = path.resolve(basepath,this.innerWikiFilename);\n\t$tw.utils.createFileDirectories(filepath);\n\tconsole.log(\"Taking screenshot\",filepath);\n\t// Fire up Puppeteer\n\tvar puppeteer;\n\ttry {\n\t\tpuppeteer = require(\"puppeteer\");\n\t} catch(e) {\n\t\tthrow \"Google Puppeteer not found\";\n\t}\n\t// Take screenshots\n\tpuppeteer.launch().then(async browser => {\n\t\t// NOTE: Copying Google's sample code by using new fangled promises \"await\"\n\t\tconst page = await browser.newPage();\n\t\tawait page.setContent(self.createInnerHTML(),{\n\t\t\twaitUntil: \"domcontentloaded\"\n\t\t});\n\t\tawait page.setViewport({\n\t\t\twidth: Math.trunc(self.innerWikiWidth),\n\t\t\theight: Math.trunc(self.innerWikiHeight),\n\t\t\tdeviceScaleFactor: deviceScaleFactor\n\t\t});\n\t\t// PDF generation isn't great: there's no clipping, and pagination is hard to control\n\t\t// await page.emulateMedia(\"screen\");\n\t\t// await page.pdf({\n\t\t// \tscale: 0.5,\n\t\t// \twidth: self.innerWikiWidth + \"px\",\n\t\t// \theight: self.innerWikiHeight + \"px\",\n\t\t// \tpath: filepath + \".pdf\",\n\t\t// \tprintBackground: true\n\t\t// });\n\t\tawait page.screenshot({\n\t\t\tpath: filepath,\n\t\t\tclip: {\n\t\t\t\tx: self.innerWikiClipLeft,\n\t\t\t\ty: self.innerWikiClipTop,\n\t\t\t\twidth: self.innerWikiClipWidth,\n\t\t\t\theight: self.innerWikiClipHeight\n\t\t\t},\n\t\t\ttype: \"png\"\n\t\t});\n\t\tawait browser.close();\n\t\tcallback(null);\n\t});\n};\n\nexports.innerwiki = InnerWikiWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/tiddlywiki/innerwiki/screenshot.js": {
"title": "$:/plugins/tiddlywiki/innerwiki/screenshot.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/innerwiki/screenshot.js\ntype: application/javascript\nmodule-type: command\n\nCommands to render tiddlers identified by a filter and save any screenshots identified by <$innerwiki> widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar InnerWikiWidget = require(\"$:/plugins/tiddlywiki/innerwiki/innerwiki.js\").innerwiki;\n\nexports.info = {\n\tname: \"screenshot\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filter\";\n\t}\n\tvar filter = this.params[0],\n\t\tdeviceScaleFactor = parseInt(this.params[1],10) || 1,\n\t\ttiddlers = this.commander.wiki.filterTiddlers(filter);\n\t// Render each tiddler into a widget tree\n\tvar innerWikiWidgets = [];\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = self.commander.wiki.parseTiddler(title),\n\t\t\tvariables = {currentTiddler: title},\n\t\t\twidgetNode = self.commander.wiki.makeWidget(parser,{variables: variables}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\t// Find any innerwiki widgets\n\t\tArray.prototype.push.apply(innerWikiWidgets,self.findInnerWikiWidgets(widgetNode));\n\t});\n\t// Asynchronously tell each innerwiki widget to save a screenshot\n\tvar processNextInnerWikiWidget = function() {\n\t\tif(innerWikiWidgets.length > 0) {\n\t\t\tvar widget = innerWikiWidgets[0];\n\t\t\tinnerWikiWidgets.shift();\n\t\t\twidget.saveScreenshot({\n\t\t\t\tbasepath: self.commander.outputPath,\n\t\t\t\tdeviceScaleFactor: deviceScaleFactor\n\t\t\t},function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\tself.callback(err);\n\t\t\t\t}\n\t\t\t\tprocessNextInnerWikiWidget();\n\t\t\t});\n\t\t} else {\n\t\t\tself.callback(null);\n\t\t}\n\t};\n\tprocessNextInnerWikiWidget();\n\treturn null;\n};\n\nCommand.prototype.findInnerWikiWidgets = function(widgetNode) {\n\tvar self = this,\n\t\tresults = [];\n\tif(widgetNode.saveScreenshot) {\n\t\tresults.push(widgetNode)\n\t}\n\t$tw.utils.each(widgetNode.children,function(childWidget) {\n\t\tArray.prototype.push.apply(results,self.findInnerWikiWidgets(childWidget));\n\t});\n\treturn results;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/plugins/tiddlywiki/innerwiki/styles": {
"title": "$:/plugins/tiddlywiki/innerwiki/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-innerwiki-wrapper {\n\tborder: 1px solid #666;\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n"
},
"$:/plugins/tiddlywiki/innerwiki/template": {
"title": "$:/plugins/tiddlywiki/innerwiki/template",
"text": "\\define saveTiddlerFilter()\n$:/boot/boot.css\n$:/boot/boot.js\n$:/boot/bootprefix.js\n$:/core\n$:/library/sjcl.js\n$:/plugins/tiddlywiki/innerwiki\n$:/plugins/tiddlywiki/railroad\n$:/themes/tiddlywiki/snowwhite\n$:/themes/tiddlywiki/vanilla\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
}
}
}
\define saveTiddlerFilter()
$:/boot/boot.css
$:/boot/boot.js
$:/boot/bootprefix.js
$:/core
$:/language
$:/languages/zh-Hant
$:/languages/zh-Hans
$:/library/sjcl.js
$:/plugins/tiddlywiki/innerwiki
$:/plugins/tiddlywiki/railroad
$:/themes/tiddlywiki/snowwhite
$:/themes/tiddlywiki/vanilla
\end
{{$:/core/templates/tiddlywiki5.html}}
{
"tiddlers": {
"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/parse-tree": {
"title": "$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/parse-tree",
"tags": "$:/tags/EditPreview",
"list-after": "$:/core/ui/EditTemplate/body/preview/output",
"caption": "parse tree",
"text": "\\define preview(mode)\n<$wikify name=\"preview-text\" text={{!!text}} type={{!!type}} mode=\"$mode$\" output=\"parsetree\">\n<pre>\n<code>\n<$text text=<<preview-text>>/>\n</code>\n</pre>\n</$wikify>\n\\end\n\n{{||$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared}}\n"
},
"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/raw": {
"title": "$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/raw",
"tags": "$:/tags/EditPreview",
"caption": "raw HTML",
"list-after": "$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/widget-tree",
"text": "<pre><code><$view field=\"text\" format=\"htmlwikified\" /></code></pre>\n"
},
"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared": {
"title": "$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared",
"text": "\\define body()\n\nMode: <$select tiddler=\"$(tv-mode-configuration)$\" default=\"block\">\n<option value=\"inline\">Inline</option>\n<option value=\"block\">Block</option>\n</$select>\n\n<$macrocall $name=\"preview\" mode={{$(tv-mode-configuration)$}}/>\n\\end\n\n<div class=\"tc-internal-tree-preview-wrapper\">\n\n<div class=\"tc-internal-tree-preview\">\n\n<$vars tv-mode-configuration=<<qualify \"$:/state/internals/preview/mode\">>>\n\n<<body>>\n\n</$vars>\n\n</div>\n\n</div>\n"
},
"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/widget-tree": {
"title": "$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/widget-tree",
"tags": "$:/tags/EditPreview",
"caption": "widget tree",
"list-after": "$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/parse-tree",
"text": "\\define preview(mode)\n<$wikify name=\"preview-text\" text={{!!text}} type={{!!type}} mode=\"$mode$\" output=\"widgettree\">\n<pre>\n<code>\n<$text text=<<preview-text>>/>\n</code>\n</pre>\n</$wikify>\n\\end\n\n{{||$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared}}\n"
},
"$:/plugins/tiddlywiki/internals/readme": {
"title": "$:/plugins/tiddlywiki/internals/readme",
"text": "This plugin adds features to help explore the internals of TiddlyWiki:\n\n* New preview panes showing:\n** the parse tree\n** the widget tree\n** the raw HTML output\n\nThe first two include a dropdown for choosing block vs. inline parsing mode.\n"
},
"$:/plugins/tiddlywiki/internals/styles": {
"title": "$:/plugins/tiddlywiki/internals/styles",
"tags": "$:/tags/Stylesheet",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/jszip/docs": {
"title": "$:/plugins/tiddlywiki/jszip/docs",
"text": "The following messages are provided to allow programmatic manipulation of ZIP files stored within tiddlers:\n\n!! Create ZIP file\n\n```\n<$action-sendmessage $message=\"tm-zip-create\" $param=\"MyZipTiddler\"/>\n```\n\n* ''$param'': title of tiddler to contain ZIP file\n\n!! Add/replace text file within ZIP file\n\n```\n<$action-sendmessage $message=\"tm-zip-add-text-file\" $param=\"MyZipTiddler\" filename=\"my/newfilename.txt\" text=\"The content\"/>\n```\n\n* ''$param'': title of tiddler containing ZIP file\n* ''filename'': filename of file to be added\n* ''text'': text content of file to be added\n\n!! Render tiddler to ZIP file\n\n```\n<$action-sendmessage $message=\"tm-zip-render-file\" $param=\"MyZipTiddler\" filename=\"my/newfilename.txt\" tiddler=\"HelloThere\" template=\"The content\" mode=\"block\" output=\"text/plain\"/>\n```\n\n* ''$param'': title of tiddler containing ZIP file\n* ''filename'': filename of output file\n* ''tiddler'': optional title of currentTiddler for rendering template\n* ''template'': title of template tiddler to be rendered\n* ''mode'': optional parsing mode \"block\" (default) or \"inline\"\n* ''output'': output format: \"text/plain\" (default) for the text content or \"text/html\" for the full HTML content, including tags\n\n!! Download a ZIP file\n\n```\n<$action-sendmessage $message=\"tm-zip-download\" $param=\"MyZipTiddler\" filename=\"myzipfile.zip\"/>\n```\n\n* ''$param'': title of tiddler containing ZIP file\n* ''filename'': filename to be suggested to browser for downloaded file\n"
},
"$:/plugins/tiddlywiki/jszip/examples": {
"title": "$:/plugins/tiddlywiki/jszip/examples",
"text": "\\define actions-render-static-site()\n<$action-sendmessage $message=\"tm-zip-create\" $param=\"$:/temp/_ZipTiddler\"/>\n<$set name=\"tv-filter-export-link\" value=\"[slugify[]addsuffix[.html]]\">\n<$list filter=\"[all[tiddlers]!is[system]limit[25]]\">\n<$action-sendmessage $message=\"tm-zip-render-file\" $param=\"$:/temp/_ZipTiddler\" filename={{{ [<currentTiddler>slugify[]addsuffix[.html]] }}} tiddler=<<currentTiddler>> template=\"$:/core/templates/static.tiddler.html\"/>\n</$list>\n</$set>\n<$action-sendmessage $message=\"tm-zip-render-file\" $param=\"$:/temp/_ZipTiddler\" filename=\"static.css\" template=\"$:/core/templates/static.template.css\"/>\n<$action-sendmessage $message=\"tm-zip-download\" $param=\"$:/temp/_ZipTiddler\" filename=\"myzip.zip\"/>\n\\end\n\n! Rendering a Static Site to a Zip File\n\nThe actions below create a ZIP file containing a static HTML rendering of the first 100 non-system tiddlers:\n\n<pre>\n<$text text=<<actions-render-static-site>>/>\n</pre>\n\n<$button actions=<<actions-render-static-site>>>\nRender site\n</$button>\n\n<$list filter=\"[!is[system]duplicateslugs[]limit[1]]\" emptyMessage=\"''(There are no duplicate slugs)''\">\n''The following tiddlers have duplicate slugs:''\n\n<ul>\n<$list filter=\"[all[tiddlers]!is[system]limit[25]duplicateslugs[]]\">\n<li><$link><$text text=<<currentTiddler>>/></$link></li>\n</$list>\n</ul>\n</$list>\n\nTemporary zip file: $:/temp/_ZipTiddler\n"
},
"$:/plugins/tiddlywiki/jszip/jszip.js": {
"text": "/*!\n\nJSZip - A Javascript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2014 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/master/LICENSE\n*/\n!function(a){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=a();else if(\"function\"==typeof define&&define.amd)define([],a);else{var b;b=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,b.JSZip=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i=\"function\"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error(\"Cannot find module '\"+g+\"'\");throw j.code=\"MODULE_NOT_FOUND\",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f=\"function\"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){\"use strict\";function d(a){if(a){this.data=a,this.length=this.data.length,this.index=0,this.zero=0;for(var b=0;b<this.data.length;b++)a[b]=255&a[b]}}var e=a(\"./dataReader\");d.prototype=new e,d.prototype.byteAt=function(a){return this.data[this.zero+a]},d.prototype.lastIndexOfSignature=function(a){for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.length-4;f>=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f-this.zero;return-1},d.prototype.readData=function(a){if(this.checkOffset(a),0===a)return[];var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{\"./dataReader\":6}],2:[function(a,b,c){\"use strict\";var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";c.encode=function(a,b){for(var c,e,f,g,h,i,j,k=\"\",l=0;l<a.length;)c=a.charCodeAt(l++),e=a.charCodeAt(l++),f=a.charCodeAt(l++),g=c>>2,h=(3&c)<<4|e>>4,i=(15&e)<<2|f>>6,j=63&f,isNaN(e)?i=j=64:isNaN(f)&&(j=64),k=k+d.charAt(g)+d.charAt(h)+d.charAt(i)+d.charAt(j);return k},c.decode=function(a,b){var c,e,f,g,h,i,j,k=\"\",l=0;for(a=a.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");l<a.length;)g=d.indexOf(a.charAt(l++)),h=d.indexOf(a.charAt(l++)),i=d.indexOf(a.charAt(l++)),j=d.indexOf(a.charAt(l++)),c=g<<2|h>>4,e=(15&h)<<4|i>>2,f=(3&i)<<6|j,k+=String.fromCharCode(c),64!=i&&(k+=String.fromCharCode(e)),64!=j&&(k+=String.fromCharCode(f));return k}},{}],3:[function(a,b,c){\"use strict\";function d(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}d.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},b.exports=d},{}],4:[function(a,b,c){\"use strict\";c.STORE={magic:\"\\0\\0\",compress:function(a,b){return a},uncompress:function(a){return a},compressInputType:null,uncompressInputType:null},c.DEFLATE=a(\"./flate\")},{\"./flate\":9}],5:[function(a,b,c){\"use strict\";var d=a(\"./utils\"),e=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];b.exports=function(a,b){if(\"undefined\"==typeof a||!a.length)return 0;var c=\"string\"!==d.getTypeOf(a);\"undefined\"==typeof b&&(b=0);var f=0,g=0,h=0;b^=-1;for(var i=0,j=a.length;i<j;i++)h=c?a[i]:a.charCodeAt(i),g=255&(b^h),f=e[g],b=b>>>8^f;return b^-1}},{\"./utils\":22}],6:[function(a,b,c){\"use strict\";function d(a){this.data=null,this.length=0,this.index=0,this.zero=0}var e=a(\"./utils\");d.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.length<this.zero+a||a<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+a+\"). Corrupted zip ?\")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(a){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return e.transformTo(\"string\",this.readData(a))},readData:function(a){},lastIndexOfSignature:function(a){},readDate:function(){var a=this.readInt(4);return new Date((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1)}},b.exports=d},{\"./utils\":22}],7:[function(a,b,c){\"use strict\";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!1,c.date=null,c.compression=null,c.compressionOptions=null,c.comment=null,c.unixPermissions=null,c.dosPermissions=null},{}],8:[function(a,b,c){\"use strict\";var d=a(\"./utils\");c.string2binary=function(a){return d.string2binary(a)},c.string2Uint8Array=function(a){return d.transformTo(\"uint8array\",a)},c.uint8Array2String=function(a){return d.transformTo(\"string\",a)},c.string2Blob=function(a){var b=d.transformTo(\"arraybuffer\",a);return d.arrayBuffer2Blob(b)},c.arrayBuffer2Blob=function(a){return d.arrayBuffer2Blob(a)},c.transformTo=function(a,b){return d.transformTo(a,b)},c.getTypeOf=function(a){return d.getTypeOf(a)},c.checkSupport=function(a){return d.checkSupport(a)},c.MAX_VALUE_16BITS=d.MAX_VALUE_16BITS,c.MAX_VALUE_32BITS=d.MAX_VALUE_32BITS,c.pretty=function(a){return d.pretty(a)},c.findCompression=function(a){return d.findCompression(a)},c.isRegExp=function(a){return d.isRegExp(a)}},{\"./utils\":22}],9:[function(a,b,c){\"use strict\";var d=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,e=a(\"pako\");c.uncompressInputType=d?\"uint8array\":\"array\",c.compressInputType=d?\"uint8array\":\"array\",c.magic=\"\\b\\0\",c.compress=function(a,b){return e.deflateRaw(a,{level:b.level||-1})},c.uncompress=function(a){return e.inflateRaw(a)}},{pako:25}],10:[function(a,b,c){\"use strict\";function d(a,b){return this instanceof d?(this.files={},this.comment=null,this.root=\"\",a&&this.load(a,b),void(this.clone=function(){var a=new d;for(var b in this)\"function\"!=typeof this[b]&&(a[b]=this[b]);return a})):new d(a,b)}var e=a(\"./base64\");d.prototype=a(\"./object\"),d.prototype.load=a(\"./load\"),d.support=a(\"./support\"),d.defaults=a(\"./defaults\"),d.utils=a(\"./deprecatedPublicUtils\"),d.base64={encode:function(a){return e.encode(a)},decode:function(a){return e.decode(a)}},d.compressions=a(\"./compressions\"),b.exports=d},{\"./base64\":2,\"./compressions\":4,\"./defaults\":7,\"./deprecatedPublicUtils\":8,\"./load\":11,\"./object\":14,\"./support\":18}],11:[function(a,b,c){\"use strict\";var d=a(\"./base64\"),e=a(\"./utf8\"),f=a(\"./utils\"),g=a(\"./zipEntries\");b.exports=function(a,b){var c,h,i,j;for(b=f.extend(b||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:e.utf8decode}),b.base64&&(a=d.decode(a)),h=new g(a,b),c=h.files,i=0;i<c.length;i++)j=c[i],this.file(j.fileNameStr,j.decompressed,{binary:!0,optimizedBinaryString:!0,date:j.date,dir:j.dir,comment:j.fileCommentStr.length?j.fileCommentStr:null,unixPermissions:j.unixPermissions,dosPermissions:j.dosPermissions,createFolders:b.createFolders});return h.zipComment.length&&(this.comment=h.zipComment),this}},{\"./base64\":2,\"./utf8\":21,\"./utils\":22,\"./zipEntries\":23}],12:[function(a,b,c){(function(a){\"use strict\";b.exports=function(b,c){return new a(b,c)},b.exports.test=function(b){return a.isBuffer(b)}}).call(this,\"undefined\"!=typeof Buffer?Buffer:void 0)},{}],13:[function(a,b,c){\"use strict\";function d(a){this.data=a,this.length=this.data.length,this.index=0,this.zero=0}var e=a(\"./uint8ArrayReader\");d.prototype=new e,d.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{\"./uint8ArrayReader\":19}],14:[function(a,b,c){\"use strict\";var d=a(\"./support\"),e=a(\"./utils\"),f=a(\"./crc32\"),g=a(\"./signature\"),h=a(\"./defaults\"),i=a(\"./base64\"),j=a(\"./compressions\"),k=a(\"./compressedObject\"),l=a(\"./nodeBuffer\"),m=a(\"./utf8\"),n=a(\"./stringWriter\"),o=a(\"./uint8ArrayWriter\"),p=function(a){if(a._data instanceof k&&(a._data=a._data.getContent(),a.options.binary=!0,a.options.base64=!1,\"uint8array\"===e.getTypeOf(a._data))){var b=a._data;a._data=new Uint8Array(b.length),0!==b.length&&a._data.set(b,0)}return a._data},q=function(a){var b=p(a),c=e.getTypeOf(b);return\"string\"===c?!a.options.binary&&d.nodebuffer?l(b,\"utf-8\"):a.asBinary():b},r=function(a){var b=p(this);return null===b||\"undefined\"==typeof b?\"\":(this.options.base64&&(b=i.decode(b)),b=a&&this.options.binary?D.utf8decode(b):e.transformTo(\"string\",b),a||this.options.binary||(b=e.transformTo(\"string\",D.utf8encode(b))),b)},s=function(a,b,c){this.name=a,this.dir=c.dir,this.date=c.date,this.comment=c.comment,this.unixPermissions=c.unixPermissions,this.dosPermissions=c.dosPermissions,this._data=b,this.options=c,this._initialMetadata={dir:c.dir,date:c.date}};s.prototype={asText:function(){return r.call(this,!0)},asBinary:function(){return r.call(this,!1)},asNodeBuffer:function(){var a=q(this);return e.transformTo(\"nodebuffer\",a)},asUint8Array:function(){var a=q(this);return e.transformTo(\"uint8array\",a)},asArrayBuffer:function(){return this.asUint8Array().buffer}};var t=function(a,b){var c,d=\"\";for(c=0;c<b;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},u=function(a){return a=a||{},a.base64!==!0||null!==a.binary&&void 0!==a.binary||(a.binary=!0),a=e.extend(a,h),a.date=a.date||new Date,null!==a.compression&&(a.compression=a.compression.toUpperCase()),a},v=function(a,b,c){var d,f=e.getTypeOf(b);if(c=u(c),\"string\"==typeof c.unixPermissions&&(c.unixPermissions=parseInt(c.unixPermissions,8)),c.unixPermissions&&16384&c.unixPermissions&&(c.dir=!0),c.dosPermissions&&16&c.dosPermissions&&(c.dir=!0),c.dir&&(a=x(a)),c.createFolders&&(d=w(a))&&y.call(this,d,!0),c.dir||null===b||\"undefined\"==typeof b)c.base64=!1,c.binary=!1,b=null,f=null;else if(\"string\"===f)c.binary&&!c.base64&&c.optimizedBinaryString!==!0&&(b=e.string2binary(b));else{if(c.base64=!1,c.binary=!0,!(f||b instanceof k))throw new Error(\"The data of '\"+a+\"' is in an unsupported format !\");\"arraybuffer\"===f&&(b=e.transformTo(\"uint8array\",b))}var g=new s(a,b,c);return this.files[a]=g,g},w=function(a){\"/\"==a.slice(-1)&&(a=a.substring(0,a.length-1));var b=a.lastIndexOf(\"/\");return b>0?a.substring(0,b):\"\"},x=function(a){return\"/\"!=a.slice(-1)&&(a+=\"/\"),a},y=function(a,b){return b=\"undefined\"!=typeof b&&b,a=x(a),this.files[a]||v.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},z=function(a,b,c){var d,g=new k;return a._data instanceof k?(g.uncompressedSize=a._data.uncompressedSize,g.crc32=a._data.crc32,0===g.uncompressedSize||a.dir?(b=j.STORE,g.compressedContent=\"\",g.crc32=0):a._data.compressionMethod===b.magic?g.compressedContent=a._data.getCompressedContent():(d=a._data.getContent(),g.compressedContent=b.compress(e.transformTo(b.compressInputType,d),c))):(d=q(a),d&&0!==d.length&&!a.dir||(b=j.STORE,d=\"\"),g.uncompressedSize=d.length,g.crc32=f(d),g.compressedContent=b.compress(e.transformTo(b.compressInputType,d),c)),g.compressedSize=g.compressedContent.length,g.compressionMethod=b.magic,g},A=function(a,b){var c=a;return a||(c=b?16893:33204),(65535&c)<<16},B=function(a,b){return 63&(a||0)},C=function(a,b,c,d,h,i){var j,k,l,n,o=(c.compressedContent,i!==m.utf8encode),p=e.transformTo(\"string\",i(b.name)),q=e.transformTo(\"string\",m.utf8encode(b.name)),r=b.comment||\"\",s=e.transformTo(\"string\",i(r)),u=e.transformTo(\"string\",m.utf8encode(r)),v=q.length!==b.name.length,w=u.length!==r.length,x=b.options,y=\"\",z=\"\",C=\"\";l=b._initialMetadata.dir!==b.dir?b.dir:x.dir,n=b._initialMetadata.date!==b.date?b.date:x.date;var D=0,E=0;l&&(D|=16),\"UNIX\"===h?(E=798,D|=A(b.unixPermissions,l)):(E=20,D|=B(b.dosPermissions,l)),j=n.getHours(),j<<=6,j|=n.getMinutes(),j<<=5,j|=n.getSeconds()/2,k=n.getFullYear()-1980,k<<=4,k|=n.getMonth()+1,k<<=5,k|=n.getDate(),v&&(z=t(1,1)+t(f(p),4)+q,y+=\"up\"+t(z.length,2)+z),w&&(C=t(1,1)+t(this.crc32(s),4)+u,y+=\"uc\"+t(C.length,2)+C);var F=\"\";F+=\"\\n\\0\",F+=o||!v&&!w?\"\\0\\0\":\"\\0\\b\",F+=c.compressionMethod,F+=t(j,2),F+=t(k,2),F+=t(c.crc32,4),F+=t(c.compressedSize,4),F+=t(c.uncompressedSize,4),F+=t(p.length,2),F+=t(y.length,2);var G=g.LOCAL_FILE_HEADER+F+p+y,H=g.CENTRAL_FILE_HEADER+t(E,2)+F+t(s.length,2)+\"\\0\\0\\0\\0\"+t(D,4)+t(d,4)+p+y+s;return{fileRecord:G,dirRecord:H,compressedObject:c}},D={load:function(a,b){throw new Error(\"Load method is not defined. Is the file jszip-load.js included ?\")},filter:function(a){var b,c,d,f,g=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],f=new s(d.name,d._data,e.extend(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,f)&&g.push(f));return g},file:function(a,b,c){if(1===arguments.length){if(e.isRegExp(a)){var d=a;return this.filter(function(a,b){return!b.dir&&d.test(a)})}return this.filter(function(b,c){return!c.dir&&b===a})[0]||null}return a=this.root+a,v.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(e.isRegExp(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=y.call(this,b),d=this.clone();return d.root=c.name,d},remove:function(a){a=this.root+a;var b=this.files[a];if(b||(\"/\"!=a.slice(-1)&&(a+=\"/\"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d<c.length;d++)delete this.files[c[d].name];return this},generate:function(a){a=e.extend(a||{},{base64:!0,compression:\"STORE\",compressionOptions:null,type:\"base64\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:m.utf8encode}),e.checkSupport(a.type),\"darwin\"!==a.platform&&\"freebsd\"!==a.platform&&\"linux\"!==a.platform&&\"sunos\"!==a.platform||(a.platform=\"UNIX\"),\"win32\"===a.platform&&(a.platform=\"DOS\");var b,c,d=[],f=0,h=0,k=e.transformTo(\"string\",a.encodeFileName(a.comment||this.comment||\"\"));for(var l in this.files)if(this.files.hasOwnProperty(l)){var p=this.files[l],q=p.options.compression||a.compression.toUpperCase(),r=j[q];if(!r)throw new Error(q+\" is not a valid compression method !\");var s=p.options.compressionOptions||a.compressionOptions||{},u=z.call(this,p,r,s),v=C.call(this,l,p,u,f,a.platform,a.encodeFileName);f+=v.fileRecord.length+u.compressedSize,h+=v.dirRecord.length,d.push(v)}var w=\"\";w=g.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+t(d.length,2)+t(d.length,2)+t(h,4)+t(f,4)+t(k.length,2)+k;var x=a.type.toLowerCase();for(b=\"uint8array\"===x||\"arraybuffer\"===x||\"blob\"===x||\"nodebuffer\"===x?new o(f+h+w.length):new n(f+h+w.length),c=0;c<d.length;c++)b.append(d[c].fileRecord),b.append(d[c].compressedObject.compressedContent);for(c=0;c<d.length;c++)b.append(d[c].dirRecord);b.append(w);var y=b.finalize();switch(a.type.toLowerCase()){case\"uint8array\":case\"arraybuffer\":case\"nodebuffer\":return e.transformTo(a.type.toLowerCase(),y);case\"blob\":return e.arrayBuffer2Blob(e.transformTo(\"arraybuffer\",y),a.mimeType);case\"base64\":return a.base64?i.encode(y):y;default:return y}},crc32:function(a,b){return f(a,b)},utf8encode:function(a){return e.transformTo(\"string\",m.utf8encode(a))},utf8decode:function(a){return m.utf8decode(a)}};b.exports=D},{\"./base64\":2,\"./compressedObject\":3,\"./compressions\":4,\"./crc32\":5,\"./defaults\":7,\"./nodeBuffer\":12,\"./signature\":15,\"./stringWriter\":17,\"./support\":18,\"./uint8ArrayWriter\":20,\"./utf8\":21,\"./utils\":22}],15:[function(a,b,c){\"use strict\";c.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",c.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",c.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",c.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",c.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",c.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],16:[function(a,b,c){\"use strict\";function d(a,b){this.data=a,b||(this.data=f.string2binary(this.data)),this.length=this.data.length,this.index=0,this.zero=0}var e=a(\"./dataReader\"),f=a(\"./utils\");d.prototype=new e,d.prototype.byteAt=function(a){return this.data.charCodeAt(this.zero+a)},d.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)-this.zero},d.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{\"./dataReader\":6,\"./utils\":22}],17:[function(a,b,c){\"use strict\";var d=a(\"./utils\"),e=function(){this.data=[]};e.prototype={append:function(a){a=d.transformTo(\"string\",a),this.data.push(a)},finalize:function(){return this.data.join(\"\")}},b.exports=e},{\"./utils\":22}],18:[function(a,b,c){(function(a){\"use strict\";if(c.base64=!0,c.array=!0,c.string=!0,c.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,c.nodebuffer=\"undefined\"!=typeof a,c.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)c.blob=!1;else{var b=new ArrayBuffer(0);try{c.blob=0===new Blob([b],{type:\"application/zip\"}).size}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;f.append(b),c.blob=0===f.getBlob(\"application/zip\").size}catch(d){c.blob=!1}}}}).call(this,\"undefined\"!=typeof Buffer?Buffer:void 0)},{}],19:[function(a,b,c){\"use strict\";function d(a){a&&(this.data=a,this.length=this.data.length,this.index=0,this.zero=0)}var e=a(\"./arrayReader\");d.prototype=new e,d.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{\"./arrayReader\":1}],20:[function(a,b,c){\"use strict\";var d=a(\"./utils\"),e=function(a){this.data=new Uint8Array(a),this.index=0};e.prototype={append:function(a){0!==a.length&&(a=d.transformTo(\"uint8array\",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}},b.exports=e},{\"./utils\":22}],21:[function(a,b,c){\"use strict\";for(var d=a(\"./utils\"),e=a(\"./support\"),f=a(\"./nodeBuffer\"),g=new Array(256),h=0;h<256;h++)g[h]=h>=252?6:h>=248?5:h>=240?4:h>=224?3:h>=192?2:1;g[254]=g[254]=1;var i=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;f<h;f++)c=a.charCodeAt(f),55296===(64512&c)&&f+1<h&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=c<128?1:c<2048?2:c<65536?3:4;for(b=e.uint8array?new Uint8Array(i):new Array(i),g=0,f=0;g<i;f++)c=a.charCodeAt(f),55296===(64512&c)&&f+1<h&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),c<128?b[g++]=c:c<2048?(b[g++]=192|c>>>6,b[g++]=128|63&c):c<65536?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},j=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return c<0?b:0===c?b:c+g[a[c]]>b?c:b},k=function(a){var b,c,e,f,h=a.length,i=new Array(2*h);for(c=0,b=0;b<h;)if(e=a[b++],e<128)i[c++]=e;else if(f=g[e],f>4)i[c++]=65533,b+=f-1;else{for(e&=2===f?31:3===f?15:7;f>1&&b<h;)e=e<<6|63&a[b++],f--;f>1?i[c++]=65533:e<65536?i[c++]=e:(e-=65536,i[c++]=55296|e>>10&1023,i[c++]=56320|1023&e)}return i.length!==c&&(i.subarray?i=i.subarray(0,c):i.length=c),d.applyFromCharCode(i)};c.utf8encode=function(a){return e.nodebuffer?f(a,\"utf-8\"):i(a)},c.utf8decode=function(a){if(e.nodebuffer)return d.transformTo(\"nodebuffer\",a).toString(\"utf-8\");a=d.transformTo(e.uint8array?\"uint8array\":\"array\",a);for(var b=[],c=0,f=a.length,g=65536;c<f;){var h=j(a,Math.min(c+g,f));e.uint8array?b.push(k(a.subarray(c,h))):b.push(k(a.slice(c,h))),c=h}return b.join(\"\")}},{\"./nodeBuffer\":12,\"./support\":18,\"./utils\":22}],22:[function(a,b,c){\"use strict\";function d(a){return a}function e(a,b){for(var c=0;c<a.length;++c)b[c]=255&a.charCodeAt(c);return b}function f(a){var b=65536,d=[],e=a.length,f=c.getTypeOf(a),g=0,h=!0;try{switch(f){case\"uint8array\":String.fromCharCode.apply(null,new Uint8Array(0));break;case\"nodebuffer\":String.fromCharCode.apply(null,j(0))}}catch(i){h=!1}if(!h){for(var k=\"\",l=0;l<a.length;l++)k+=String.fromCharCode(a[l]);return k}for(;g<e&&b>1;)try{\"array\"===f||\"nodebuffer\"===f?d.push(String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e)))):d.push(String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(i){b=Math.floor(b/2)}return d.join(\"\")}function g(a,b){for(var c=0;c<a.length;c++)b[c]=a[c];return b}var h=a(\"./support\"),i=a(\"./compressions\"),j=a(\"./nodeBuffer\");c.string2binary=function(a){for(var b=\"\",c=0;c<a.length;c++)b+=String.fromCharCode(255&a.charCodeAt(c));return b},c.arrayBuffer2Blob=function(a,b){c.checkSupport(\"blob\"),b=b||\"application/zip\";try{return new Blob([a],{type:b})}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;return f.append(a),f.getBlob(b)}catch(d){throw new Error(\"Bug : can't construct the Blob.\")}}},c.applyFromCharCode=f;var k={};k.string={string:d,array:function(a){return e(a,new Array(a.length))},arraybuffer:function(a){return k.string.uint8array(a).buffer},uint8array:function(a){return e(a,new Uint8Array(a.length))},nodebuffer:function(a){return e(a,j(a.length))}},k.array={string:f,array:d,arraybuffer:function(a){return new Uint8Array(a).buffer},uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(a)}},k.arraybuffer={string:function(a){return f(new Uint8Array(a))},array:function(a){return g(new Uint8Array(a),new Array(a.byteLength))},arraybuffer:d,uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(new Uint8Array(a))}},k.uint8array={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return a.buffer},uint8array:d,nodebuffer:function(a){return j(a)}},k.nodebuffer={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return k.nodebuffer.uint8array(a).buffer},uint8array:function(a){return g(a,new Uint8Array(a.length))},nodebuffer:d},c.transformTo=function(a,b){if(b||(b=\"\"),!a)return b;c.checkSupport(a);var d=c.getTypeOf(b),e=k[d][a](b);return e},c.getTypeOf=function(a){return\"string\"==typeof a?\"string\":\"[object Array]\"===Object.prototype.toString.call(a)?\"array\":h.nodebuffer&&j.test(a)?\"nodebuffer\":h.uint8array&&a instanceof Uint8Array?\"uint8array\":h.arraybuffer&&a instanceof ArrayBuffer?\"arraybuffer\":void 0},c.checkSupport=function(a){var b=h[a.toLowerCase()];if(!b)throw new Error(a+\" is not supported by this browser\")},c.MAX_VALUE_16BITS=65535,c.MAX_VALUE_32BITS=-1,c.pretty=function(a){var b,c,d=\"\";for(c=0;c<(a||\"\").length;c++)b=a.charCodeAt(c),d+=\"\\\\x\"+(b<16?\"0\":\"\")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return\"[object RegExp]\"===Object.prototype.toString.call(a)},c.extend=function(){var a,b,c={};for(a=0;a<arguments.length;a++)for(b in arguments[a])arguments[a].hasOwnProperty(b)&&\"undefined\"==typeof c[b]&&(c[b]=arguments[a][b]);return c}},{\"./compressions\":4,\"./nodeBuffer\":12,\"./support\":18}],23:[function(a,b,c){\"use strict\";function d(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var e=a(\"./stringReader\"),f=a(\"./nodeBufferReader\"),g=a(\"./uint8ArrayReader\"),h=a(\"./arrayReader\"),i=a(\"./utils\"),j=a(\"./signature\"),k=a(\"./zipEntry\"),l=a(\"./support\");a(\"./object\");d.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error(\"Corrupted zip or bug : unexpected signature (\"+i.pretty(b)+\", expected \"+i.pretty(a)+\")\")},isSignature:function(a,b){var c=this.reader.index;this.reader.setIndex(a);var d=this.reader.readString(4),e=d===b;return this.reader.setIndex(c),e},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var a=this.reader.readData(this.zipCommentLength),b=l.uint8array?\"uint8array\":\"array\",c=i.transformTo(b,a);this.zipComment=this.loadOptions.decodeFileName(c)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44,e=0;e<d;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var a,b;for(a=0;a<this.files.length;a++)b=this.files[a],this.reader.setIndex(b.localHeaderOffset),this.checkSignature(j.LOCAL_FILE_HEADER),b.readLocalPart(this.reader),b.handleUTF8(),b.processAttributes()},readCentralDir:function(){var a;for(this.reader.setIndex(this.centralDirOffset);this.reader.readString(4)===j.CENTRAL_FILE_HEADER;)a=new k({zip64:this.zip64},this.loadOptions),a.readCentralPart(this.reader),this.files.push(a);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var a=this.reader.lastIndexOfSignature(j.CENTRAL_DIRECTORY_END);if(a<0){var b=!this.isSignature(0,j.LOCAL_FILE_HEADER);throw b?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip : can't find end of central directory\")}this.reader.setIndex(a);var c=a;if(this.checkSignature(j.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,a=this.reader.lastIndexOfSignature(j.ZIP64_CENTRAL_DIRECTORY_LOCATOR),a<0)throw new Error(\"Corrupted zip : can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(a),this.checkSignature(j.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,j.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(j.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip : can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(j.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var d=this.centralDirOffset+this.centralDirSize;this.zip64&&(d+=20,d+=12+this.zip64EndOfCentralSize);var e=c-d;if(e>0)this.isSignature(c,j.CENTRAL_FILE_HEADER)||(this.reader.zero=e);else if(e<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(e)+\" bytes.\")},prepareReader:function(a){var b=i.getTypeOf(a);if(i.checkSupport(b),\"string\"!==b||l.uint8array)if(\"nodebuffer\"===b)this.reader=new f(a);else if(l.uint8array)this.reader=new g(i.transformTo(\"uint8array\",a));else{if(!l.array)throw new Error(\"Unexpected error: unsupported type '\"+b+\"'\");this.reader=new h(i.transformTo(\"array\",a))}else this.reader=new e(a,this.loadOptions.optimizedBinaryString)},load:function(a){this.prepareReader(a),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},b.exports=d},{\"./arrayReader\":1,\"./nodeBufferReader\":13,\"./object\":14,\"./signature\":15,\"./stringReader\":16,\"./support\":18,\"./uint8ArrayReader\":19,\"./utils\":22,\"./zipEntry\":24}],24:[function(a,b,c){\"use strict\";function d(a,b){this.options=a,this.loadOptions=b}var e=a(\"./stringReader\"),f=a(\"./utils\"),g=a(\"./compressedObject\"),h=a(\"./object\"),i=a(\"./support\"),j=0,k=3;d.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},prepareCompressedContent:function(a,b,c){return function(){var d=a.index;a.setIndex(b);var e=a.readData(c);return a.setIndex(d),e}},prepareContent:function(a,b,c,d,e){return function(){var a=f.transformTo(d.uncompressInputType,this.getCompressedContent()),b=d.uncompress(a);if(b.length!==e)throw new Error(\"Bug : uncompressed data size mismatch\");return b}},readLocalPart:function(a){var b,c;if(a.skip(22),this.fileNameLength=a.readInt(2),c=a.readInt(2),this.fileName=a.readData(this.fileNameLength),a.skip(c),this.compressedSize==-1||this.uncompressedSize==-1)throw new Error(\"Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize == -1 || uncompressedSize == -1)\");if(b=f.findCompression(this.compressionMethod),null===b)throw new Error(\"Corrupted zip : compression \"+f.pretty(this.compressionMethod)+\" unknown (inner file : \"+f.transformTo(\"string\",this.fileName)+\")\");if(this.decompressed=new g,this.decompressed.compressedSize=this.compressedSize,this.decompressed.uncompressedSize=this.uncompressedSize,this.decompressed.crc32=this.crc32,this.decompressed.compressionMethod=this.compressionMethod,this.decompressed.getCompressedContent=this.prepareCompressedContent(a,a.index,this.compressedSize,b),this.decompressed.getContent=this.prepareContent(a,a.index,this.compressedSize,b,this.uncompressedSize),this.loadOptions.checkCRC32&&(this.decompressed=f.transformTo(\"string\",this.decompressed.getContent()),h.crc32(this.decompressed)!==this.crc32))throw new Error(\"Corrupted zip : CRC32 mismatch\");\n},readCentralPart:function(a){if(this.versionMadeBy=a.readInt(2),this.versionNeeded=a.readInt(2),this.bitFlag=a.readInt(2),this.compressionMethod=a.readString(2),this.date=a.readDate(),this.crc32=a.readInt(4),this.compressedSize=a.readInt(4),this.uncompressedSize=a.readInt(4),this.fileNameLength=a.readInt(2),this.extraFieldsLength=a.readInt(2),this.fileCommentLength=a.readInt(2),this.diskNumberStart=a.readInt(2),this.internalFileAttributes=a.readInt(2),this.externalFileAttributes=a.readInt(4),this.localHeaderOffset=a.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");this.fileName=a.readData(this.fileNameLength),this.readExtraFields(a),this.parseZIP64ExtraField(a),this.fileComment=a.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var a=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),a===j&&(this.dosPermissions=63&this.externalFileAttributes),a===k&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(a){if(this.extraFields[1]){var b=new e(this.extraFields[1].value);this.uncompressedSize===f.MAX_VALUE_32BITS&&(this.uncompressedSize=b.readInt(8)),this.compressedSize===f.MAX_VALUE_32BITS&&(this.compressedSize=b.readInt(8)),this.localHeaderOffset===f.MAX_VALUE_32BITS&&(this.localHeaderOffset=b.readInt(8)),this.diskNumberStart===f.MAX_VALUE_32BITS&&(this.diskNumberStart=b.readInt(4))}},readExtraFields:function(a){var b,c,d,e=a.index;for(this.extraFields=this.extraFields||{};a.index<e+this.extraFieldsLength;)b=a.readInt(2),c=a.readInt(2),d=a.readString(c),this.extraFields[b]={id:b,length:c,value:d}},handleUTF8:function(){var a=i.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=h.utf8decode(this.fileName),this.fileCommentStr=h.utf8decode(this.fileComment);else{var b=this.findExtraFieldUnicodePath();if(null!==b)this.fileNameStr=b;else{var c=f.transformTo(a,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(c)}var d=this.findExtraFieldUnicodeComment();if(null!==d)this.fileCommentStr=d;else{var e=f.transformTo(a,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(e)}}},findExtraFieldUnicodePath:function(){var a=this.extraFields[28789];if(a){var b=new e(a.value);return 1!==b.readInt(1)?null:h.crc32(this.fileName)!==b.readInt(4)?null:h.utf8decode(b.readString(a.length-5))}return null},findExtraFieldUnicodeComment:function(){var a=this.extraFields[25461];if(a){var b=new e(a.value);return 1!==b.readInt(1)?null:h.crc32(this.fileComment)!==b.readInt(4)?null:h.utf8decode(b.readString(a.length-5))}return null}},b.exports=d},{\"./compressedObject\":3,\"./object\":14,\"./stringReader\":16,\"./support\":18,\"./utils\":22}],25:[function(a,b,c){\"use strict\";var d=a(\"./lib/utils/common\").assign,e=a(\"./lib/deflate\"),f=a(\"./lib/inflate\"),g=a(\"./lib/zlib/constants\"),h={};d(h,e,f,g),b.exports=h},{\"./lib/deflate\":26,\"./lib/inflate\":27,\"./lib/utils/common\":28,\"./lib/zlib/constants\":31}],26:[function(a,b,c){\"use strict\";function d(a){if(!(this instanceof d))return new d(a);this.options=i.assign({level:s,method:u,chunkSize:16384,windowBits:15,memLevel:8,strategy:t,to:\"\"},a||{});var b=this.options;b.raw&&b.windowBits>0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=h.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==p)throw new Error(k[c]);if(b.header&&h.deflateSetHeader(this.strm,b.header),b.dictionary){var e;if(e=\"string\"==typeof b.dictionary?j.string2buf(b.dictionary):\"[object ArrayBuffer]\"===m.call(b.dictionary)?new Uint8Array(b.dictionary):b.dictionary,c=h.deflateSetDictionary(this.strm,e),c!==p)throw new Error(k[c]);this._dict_set=!0}}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}function g(a,b){return b=b||{},b.gzip=!0,e(a,b)}var h=a(\"./zlib/deflate\"),i=a(\"./utils/common\"),j=a(\"./utils/strings\"),k=a(\"./zlib/messages\"),l=a(\"./zlib/zstream\"),m=Object.prototype.toString,n=0,o=4,p=0,q=1,r=2,s=-1,t=0,u=8;d.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?o:n,\"string\"==typeof a?e.input=j.string2buf(a):\"[object ArrayBuffer]\"===m.call(a)?e.input=new Uint8Array(a):e.input=a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new i.Buf8(f),e.next_out=0,e.avail_out=f),c=h.deflate(e,d),c!==q&&c!==p)return this.onEnd(c),this.ended=!0,!1;0!==e.avail_out&&(0!==e.avail_in||d!==o&&d!==r)||(\"string\"===this.options.to?this.onData(j.buf2binstring(i.shrinkBuf(e.output,e.next_out))):this.onData(i.shrinkBuf(e.output,e.next_out)))}while((e.avail_in>0||0===e.avail_out)&&c!==q);return d===o?(c=h.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===p):d!==r||(this.onEnd(p),e.avail_out=0,!0)},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===p&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=d,c.deflate=e,c.deflateRaw=f,c.gzip=g},{\"./utils/common\":28,\"./utils/strings\":29,\"./zlib/deflate\":33,\"./zlib/messages\":38,\"./zlib/zstream\":40}],27:[function(a,b,c){\"use strict\";function d(a){if(!(this instanceof d))return new d(a);this.options=h.assign({chunkSize:16384,windowBits:0,to:\"\"},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=g.inflateInit2(this.strm,b.windowBits);if(c!==j.Z_OK)throw new Error(k[c]);this.header=new m,g.inflateGetHeader(this.strm,this.header)}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}var g=a(\"./zlib/inflate\"),h=a(\"./utils/common\"),i=a(\"./utils/strings\"),j=a(\"./zlib/constants\"),k=a(\"./zlib/messages\"),l=a(\"./zlib/zstream\"),m=a(\"./zlib/gzheader\"),n=Object.prototype.toString;d.prototype.push=function(a,b){var c,d,e,f,k,l,m=this.strm,o=this.options.chunkSize,p=this.options.dictionary,q=!1;if(this.ended)return!1;d=b===~~b?b:b===!0?j.Z_FINISH:j.Z_NO_FLUSH,\"string\"==typeof a?m.input=i.binstring2buf(a):\"[object ArrayBuffer]\"===n.call(a)?m.input=new Uint8Array(a):m.input=a,m.next_in=0,m.avail_in=m.input.length;do{if(0===m.avail_out&&(m.output=new h.Buf8(o),m.next_out=0,m.avail_out=o),c=g.inflate(m,j.Z_NO_FLUSH),c===j.Z_NEED_DICT&&p&&(l=\"string\"==typeof p?i.string2buf(p):\"[object ArrayBuffer]\"===n.call(p)?new Uint8Array(p):p,c=g.inflateSetDictionary(this.strm,l)),c===j.Z_BUF_ERROR&&q===!0&&(c=j.Z_OK,q=!1),c!==j.Z_STREAM_END&&c!==j.Z_OK)return this.onEnd(c),this.ended=!0,!1;m.next_out&&(0!==m.avail_out&&c!==j.Z_STREAM_END&&(0!==m.avail_in||d!==j.Z_FINISH&&d!==j.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(e=i.utf8border(m.output,m.next_out),f=m.next_out-e,k=i.buf2string(m.output,e),m.next_out=f,m.avail_out=o-f,f&&h.arraySet(m.output,m.output,e,f,0),this.onData(k)):this.onData(h.shrinkBuf(m.output,m.next_out)))),0===m.avail_in&&0===m.avail_out&&(q=!0)}while((m.avail_in>0||0===m.avail_out)&&c!==j.Z_STREAM_END);return c===j.Z_STREAM_END&&(d=j.Z_FINISH),d===j.Z_FINISH?(c=g.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===j.Z_OK):d!==j.Z_SYNC_FLUSH||(this.onEnd(j.Z_OK),m.avail_out=0,!0)},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===j.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=d,c.inflate=e,c.inflateRaw=f,c.ungzip=e},{\"./utils/common\":28,\"./utils/strings\":29,\"./zlib/constants\":31,\"./zlib/gzheader\":34,\"./zlib/inflate\":36,\"./zlib/messages\":38,\"./zlib/zstream\":40}],28:[function(a,b,c){\"use strict\";var d=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if(\"object\"!=typeof c)throw new TypeError(c+\"must be non-object\");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;f<d;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;b<c;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;b<c;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;f<d;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],29:[function(a,b,c){\"use strict\";function d(a,b){if(b<65537&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c=\"\",d=0;d<b;d++)c+=String.fromCharCode(a[d]);return c}var e=a(\"./common\"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(h){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(h){g=!1}for(var i=new e.Buf8(256),j=0;j<256;j++)i[j]=j>=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;f<h;f++)c=a.charCodeAt(f),55296===(64512&c)&&f+1<h&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=c<128?1:c<2048?2:c<65536?3:4;for(b=new e.Buf8(i),g=0,f=0;g<i;f++)c=a.charCodeAt(f),55296===(64512&c)&&f+1<h&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),c<128?b[g++]=c:c<2048?(b[g++]=192|c>>>6,b[g++]=128|63&c):c<65536?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;c<d;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,h=b||a.length,j=new Array(2*h);for(e=0,c=0;c<h;)if(f=a[c++],f<128)j[e++]=f;else if(g=i[f],g>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&c<h;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:f<65536?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return c<0?b:0===c?b:c+i[a[c]]>b?c:b}},{\"./common\":28}],30:[function(a,b,c){\"use strict\";function d(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=d},{}],31:[function(a,b,c){\"use strict\";b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],32:[function(a,b,c){\"use strict\";function d(){for(var a,b=[],c=0;c<256;c++){a=c;for(var d=0;d<8;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function e(a,b,c,d){var e=f,g=d+c;a^=-1;for(var h=d;h<g;h++)a=a>>>8^e[255&(a^b[h])];return a^-1}var f=d();b.exports=e},{}],33:[function(a,b,c){\"use strict\";function d(a,b){return a.msg=I[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(E.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){F._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,E.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=G(a.adler,b,e,c):2===a.state.wrap&&(a.adler=H(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-la?a.strstart-(a.w_size-la):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ka,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&f<m);if(d=ka-(m-f),f=m-ka,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-la)){E.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=ja)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+1])&a.hash_mask;a.insert&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+ja-1])&a.hash_mask,a.prev[f&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=f,f++,a.insert--,!(a.lookahead+a.insert<ja)););}while(a.lookahead<la&&0!==a.strm.avail_in)}function n(a,b){var c=65535;for(c>a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===J)return ua;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return ua;if(a.strstart-a.block_start>=a.w_size-la&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?ua:ua}function o(a,b){for(var c,d;;){if(a.lookahead<la){if(m(a),a.lookahead<la&&b===J)return ua;if(0===a.lookahead)break}if(c=0,a.lookahead>=ja&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),0!==c&&a.strstart-c<=a.w_size-la&&(a.match_length=l(a,c)),a.match_length>=ja)if(d=F._tr_tally(a,a.strstart-a.match_start,a.match_length-ja),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=ja){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart;while(0!==--a.match_length);a.strstart++}else a.strstart+=a.match_length,a.match_length=0,a.ins_h=a.window[a.strstart],a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+1])&a.hash_mask;else d=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++;if(d&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=a.strstart<ja-1?a.strstart:ja-1,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function p(a,b){for(var c,d,e;;){if(a.lookahead<la){if(m(a),a.lookahead<la&&b===J)return ua;if(0===a.lookahead)break}if(c=0,a.lookahead>=ja&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),a.prev_length=a.match_length,a.prev_match=a.match_start,a.match_length=ja-1,0!==c&&a.prev_length<a.max_lazy_match&&a.strstart-c<=a.w_size-la&&(a.match_length=l(a,c),a.match_length<=5&&(a.strategy===U||a.match_length===ja&&a.strstart-a.match_start>4096)&&(a.match_length=ja-1)),a.prev_length>=ja&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-ja,d=F._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-ja),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart);while(0!==--a.prev_length);if(a.match_available=0,a.match_length=ja-1,a.strstart++,d&&(h(a,!1),0===a.strm.avail_out))return ua}else if(a.match_available){if(d=F._tr_tally(a,0,a.window[a.strstart-1]),d&&h(a,!1),a.strstart++,a.lookahead--,0===a.strm.avail_out)return ua}else a.match_available=1,a.strstart++,a.lookahead--}return a.match_available&&(d=F._tr_tally(a,0,a.window[a.strstart-1]),a.match_available=0),a.insert=a.strstart<ja-1?a.strstart:ja-1,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function q(a,b){for(var c,d,e,f,g=a.window;;){if(a.lookahead<=ka){if(m(a),a.lookahead<=ka&&b===J)return ua;if(0===a.lookahead)break}if(a.match_length=0,a.lookahead>=ja&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ka;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&e<f);a.match_length=ka-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=ja?(c=F._tr_tally(a,1,a.match_length-ja),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===J)return ua;break}if(a.match_length=0,c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function s(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e}function t(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=D[a.level].max_lazy,a.good_match=D[a.level].good_length,a.nice_match=D[a.level].nice_length,a.max_chain_length=D[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=ja-1,a.match_available=0,a.ins_h=0}function u(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=$,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new E.Buf16(2*ha),this.dyn_dtree=new E.Buf16(2*(2*fa+1)),this.bl_tree=new E.Buf16(2*(2*ga+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new E.Buf16(ia+1),this.heap=new E.Buf16(2*ea+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new E.Buf16(2*ea+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function v(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=Z,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?na:sa,a.adler=2===b.wrap?0:1,b.last_flush=J,F._tr_init(b),O):d(a,Q)}function w(a){var b=v(a);return b===O&&t(a.state),b}function x(a,b){return a&&a.state?2!==a.state.wrap?Q:(a.state.gzhead=b,O):Q}function y(a,b,c,e,f,g){if(!a)return Q;var h=1;if(b===T&&(b=6),e<0?(h=0,e=-e):e>15&&(h=2,e-=16),f<1||f>_||c!==$||e<8||e>15||b<0||b>9||g<0||g>X)return d(a,Q);8===e&&(e=9);var i=new u;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<<i.w_bits,i.w_mask=i.w_size-1,i.hash_bits=f+7,i.hash_size=1<<i.hash_bits,i.hash_mask=i.hash_size-1,i.hash_shift=~~((i.hash_bits+ja-1)/ja),i.window=new E.Buf8(2*i.w_size),i.head=new E.Buf16(i.hash_size),i.prev=new E.Buf16(i.w_size),i.lit_bufsize=1<<f+6,i.pending_buf_size=4*i.lit_bufsize,i.pending_buf=new E.Buf8(i.pending_buf_size),i.d_buf=1*i.lit_bufsize,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,w(a)}function z(a,b){return y(a,b,$,aa,ba,Y)}function A(a,b){var c,h,k,l;if(!a||!a.state||b>N||b<0)return a?d(a,Q):Q;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===ta&&b!==M)return d(a,0===a.avail_out?S:Q);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===na)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=H(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=oa):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,ya),h.status=sa);else{var m=$+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=V||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ma),m+=31-m%31,h.status=sa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===oa)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=pa)}else h.status=pa;if(h.status===pa)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.name.length?255&h.gzhead.name.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=qa)}else h.status=qa;if(h.status===qa)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.comment.length?255&h.gzhead.comment.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=ra)}else h.status=ra;if(h.status===ra&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=sa)):h.status=sa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,O}else if(0===a.avail_in&&e(b)<=e(c)&&b!==M)return d(a,S);if(h.status===ta&&0!==a.avail_in)return d(a,S);if(0!==a.avail_in||0!==h.lookahead||b!==J&&h.status!==ta){var o=h.strategy===V?r(h,b):h.strategy===W?q(h,b):D[h.level].func(h,b);if(o!==wa&&o!==xa||(h.status=ta),o===ua||o===wa)return 0===a.avail_out&&(h.last_flush=-1),O;if(o===va&&(b===K?F._tr_align(h):b!==N&&(F._tr_stored_block(h,0,0,!1),b===L&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,O}return b!==M?O:h.wrap<=0?P:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?O:P)}function B(a){var b;return a&&a.state?(b=a.state.status,b!==na&&b!==oa&&b!==pa&&b!==qa&&b!==ra&&b!==sa&&b!==ta?d(a,Q):(a.state=null,b===sa?d(a,R):O)):Q}function C(a,b){var c,d,e,g,h,i,j,k,l=b.length;if(!a||!a.state)return Q;if(c=a.state,g=c.wrap,2===g||1===g&&c.status!==na||c.lookahead)return Q;for(1===g&&(a.adler=G(a.adler,b,l,0)),c.wrap=0,l>=c.w_size&&(0===g&&(f(c.head),c.strstart=0,c.block_start=0,c.insert=0),k=new E.Buf8(c.w_size),E.arraySet(k,b,l-c.w_size,c.w_size,0),b=k,l=c.w_size),h=a.avail_in,i=a.next_in,j=a.input,a.avail_in=l,a.next_in=0,a.input=b,m(c);c.lookahead>=ja;){d=c.strstart,e=c.lookahead-(ja-1);do c.ins_h=(c.ins_h<<c.hash_shift^c.window[d+ja-1])&c.hash_mask,c.prev[d&c.w_mask]=c.head[c.ins_h],c.head[c.ins_h]=d,d++;while(--e);c.strstart=d,c.lookahead=ja-1,m(c)}return c.strstart+=c.lookahead,c.block_start=c.strstart,c.insert=c.lookahead,c.lookahead=0,c.match_length=c.prev_length=ja-1,c.match_available=0,a.next_in=i,a.input=j,a.avail_in=h,c.wrap=g,O}var D,E=a(\"../utils/common\"),F=a(\"./trees\"),G=a(\"./adler32\"),H=a(\"./crc32\"),I=a(\"./messages\"),J=0,K=1,L=3,M=4,N=5,O=0,P=1,Q=-2,R=-3,S=-5,T=-1,U=1,V=2,W=3,X=4,Y=0,Z=2,$=8,_=9,aa=15,ba=8,ca=29,da=256,ea=da+1+ca,fa=30,ga=19,ha=2*ea+1,ia=15,ja=3,ka=258,la=ka+ja+1,ma=32,na=42,oa=69,pa=73,qa=91,ra=103,sa=113,ta=666,ua=1,va=2,wa=3,xa=4,ya=3;D=[new s(0,0,0,0,n),new s(4,4,8,4,o),new s(4,5,16,8,o),new s(4,6,32,32,o),new s(4,4,16,16,p),new s(8,16,32,32,p),new s(8,16,128,128,p),new s(8,32,128,256,p),new s(32,128,258,1024,p),new s(32,258,258,4096,p)],c.deflateInit=z,c.deflateInit2=y,c.deflateReset=w,c.deflateResetKeep=v,c.deflateSetHeader=x,c.deflate=A,c.deflateEnd=B,c.deflateSetDictionary=C,c.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":28,\"./adler32\":30,\"./crc32\":32,\"./messages\":38,\"./trees\":39}],34:[function(a,b,c){\"use strict\";function d(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}b.exports=d},{}],35:[function(a,b,c){\"use strict\";var d=30,e=12;b.exports=function(a,b){var c,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;c=a.state,f=a.next_in,B=a.input,g=f+(a.avail_in-5),h=a.next_out,C=a.output,i=h-(b-a.avail_out),j=h+(a.avail_out-257),k=c.dmax,l=c.wsize,m=c.whave,n=c.wnext,o=c.window,p=c.hold,q=c.bits,r=c.lencode,s=c.distcode,t=(1<<c.lenbits)-1,u=(1<<c.distbits)-1;a:do{q<15&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=r[p&t];b:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<<w)-1)];continue b}if(32&w){c.mode=e;break a}a.msg=\"invalid literal/length code\",c.mode=d;break a}x=65535&v,w&=15,w&&(q<w&&(p+=B[f++]<<q,q+=8),x+=p&(1<<w)-1,p>>>=w,q-=w),q<15&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=s[p&u];c:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<<w)-1)];continue c}a.msg=\"invalid distance code\",c.mode=d;break a}if(y=65535&v,w&=15,q<w&&(p+=B[f++]<<q,q+=8,q<w&&(p+=B[f++]<<q,q+=8)),y+=p&(1<<w)-1,y>k){a.msg=\"invalid distance too far back\",c.mode=d;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&c.sane){a.msg=\"invalid distance too far back\",c.mode=d;break a}if(z=0,A=o,0===n){if(z+=l-w,w<x){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}else if(n<w){if(z+=l+n-w,w-=n,w<x){x-=w;do C[h++]=o[z++];while(--w);if(z=0,n<x){w=n,x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}}else if(z+=n-w,w<x){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}for(;x>2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(f<g&&h<j);x=q>>3,f-=x,q-=x<<3,p&=(1<<q)-1,a.next_in=f,a.next_out=h,a.avail_in=f<g?5+(g-f):5-(f-g),a.avail_out=h<j?257+(j-h):257-(h-j),c.hold=p,c.bits=q}},{}],36:[function(a,b,c){\"use strict\";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg=\"\",b.wrap&&(a.adler=1&b.wrap),b.mode=L,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new s.Buf32(pa),b.distcode=b.distdyn=new s.Buf32(qa),b.sane=1,b.back=-1,D):G}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):G}function h(a,b){var c,d;return a&&a.state?(d=a.state,b<0?(c=0,b=-b):(c=(b>>4)+1,b<48&&(b&=15)),b&&(b<8||b>15)?G:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):G}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==D&&(a.state=null),c):G}function j(a){return i(a,sa)}function k(a){if(ta){var b;for(q=new s.Buf32(512),r=new s.Buf32(32),b=0;b<144;)a.lens[b++]=8;for(;b<256;)a.lens[b++]=9;for(;b<280;)a.lens[b++]=7;for(;b<288;)a.lens[b++]=8;for(w(y,a.lens,0,288,q,0,a.work,{bits:9}),b=0;b<32;)a.lens[b++]=5;w(z,a.lens,0,32,r,0,a.work,{bits:5}),ta=!1}a.lencode=q,a.lenbits=9,a.distcode=r,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<<f.wbits,f.wnext=0,f.whave=0,f.window=new s.Buf8(f.wsize)),d>=f.wsize?(s.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),s.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(s.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whave<f.wsize&&(f.whave+=e))),0}function m(a,b){var c,e,f,g,h,i,j,m,n,o,p,q,r,pa,qa,ra,sa,ta,ua,va,wa,xa,ya,za,Aa=0,Ba=new s.Buf8(4),Ca=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!a||!a.state||!a.output||!a.input&&0!==a.avail_in)return G;c=a.state,c.mode===W&&(c.mode=X),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,o=i,p=j,xa=D;a:for(;;)switch(c.mode){case L:if(0===c.wrap){c.mode=X;break}for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(2&c.wrap&&35615===m){c.check=0,Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0),m=0,n=0,c.mode=M;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg=\"incorrect header check\",c.mode=ma;break}if((15&m)!==K){a.msg=\"unknown compression method\",c.mode=ma;break}if(m>>>=4,n-=4,wa=(15&m)+8,0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg=\"invalid window size\",c.mode=ma;break}c.dmax=1<<wa,a.adler=c.check=1,c.mode=512&m?U:W,m=0,n=0;break;case M:for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.flags=m,(255&c.flags)!==K){a.msg=\"unknown compression method\",c.mode=ma;break}if(57344&c.flags){a.msg=\"unknown header flags set\",c.mode=ma;break}c.head&&(c.head.text=m>>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=N;case N:for(;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.time=m),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=u(c.check,Ba,4,0)),m=0,n=0,c.mode=O;case O:for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,\nn+=8}c.head&&(c.head.xflags=255&m,c.head.os=m>>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=P;case P:if(1024&c.flags){for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length=m,c.head&&(c.head.extra_len=m),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=Q;case Q:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),s.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=R;case R:if(2048&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa));while(wa&&q<i);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=S;case S:if(4096&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa));while(wa&&q<i);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=T;case T:if(512&c.flags){for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(65535&c.check)){a.msg=\"header crc mismatch\",c.mode=ma;break}m=0,n=0}c.head&&(c.head.hcrc=c.flags>>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=W;break;case U:for(;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}a.adler=c.check=d(m),m=0,n=0,c.mode=V;case V:if(0===c.havedict)return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,F;a.adler=c.check=1,c.mode=W;case W:if(b===B||b===C)break a;case X:if(c.last){m>>>=7&n,n-=7&n,c.mode=ja;break}for(;n<3;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}switch(c.last=1&m,m>>>=1,n-=1,3&m){case 0:c.mode=Y;break;case 1:if(k(c),c.mode=ca,b===C){m>>>=2,n-=2;break a}break;case 2:c.mode=_;break;case 3:a.msg=\"invalid block type\",c.mode=ma}m>>>=2,n-=2;break;case Y:for(m>>>=7&n,n-=7&n;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if((65535&m)!==(m>>>16^65535)){a.msg=\"invalid stored block lengths\",c.mode=ma;break}if(c.length=65535&m,m=0,n=0,c.mode=Z,b===C)break a;case Z:c.mode=$;case $:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;s.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=W;break;case _:for(;n<14;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.nlen=(31&m)+257,m>>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg=\"too many length or distance symbols\",c.mode=ma;break}c.have=0,c.mode=aa;case aa:for(;c.have<c.ncode;){for(;n<3;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.lens[Ca[c.have++]]=7&m,m>>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=w(x,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg=\"invalid code lengths set\",c.mode=ma;break}c.have=0,c.mode=ba;case ba:for(;c.have<c.nlen+c.ndist;){for(;Aa=c.lencode[m&(1<<c.lenbits)-1],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(sa<16)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m>>>=qa,n-=qa,0===c.have){a.msg=\"invalid bit length repeat\",c.mode=ma;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg=\"invalid bit length repeat\",c.mode=ma;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===ma)break;if(0===c.lens[256]){a.msg=\"invalid code -- missing end-of-block\",c.mode=ma;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=w(y,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg=\"invalid literal/lengths set\",c.mode=ma;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=w(z,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg=\"invalid distances set\",c.mode=ma;break}if(c.mode=ca,b===C)break a;case ca:c.mode=da;case da:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,v(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===W&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<<c.lenbits)-1],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(ra&&0===(240&ra)){for(ta=qa,ua=ra,va=sa;Aa=c.lencode[va+((m&(1<<ta+ua)-1)>>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(ta+qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ia;break}if(32&ra){c.back=-1,c.mode=W;break}if(64&ra){a.msg=\"invalid literal/length code\",c.mode=ma;break}c.extra=15&ra,c.mode=ea;case ea:if(c.extra){for(za=c.extra;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=fa;case fa:for(;Aa=c.distcode[m&(1<<c.distbits)-1],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(0===(240&ra)){for(ta=qa,ua=ra,va=sa;Aa=c.distcode[va+((m&(1<<ta+ua)-1)>>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(ta+qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg=\"invalid distance code\",c.mode=ma;break}c.offset=sa,c.extra=15&ra,c.mode=ga;case ga:if(c.extra){for(za=c.extra;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.offset+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg=\"invalid distance too far back\",c.mode=ma;break}c.mode=ha;case ha:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg=\"invalid distance too far back\",c.mode=ma;break}q>c.wnext?(q-=c.wnext,r=c.wsize-q):r=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,r=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pa[r++];while(--q);0===c.length&&(c.mode=da);break;case ia:if(0===j)break a;f[h++]=c.length,j--,c.mode=da;break;case ja:if(c.wrap){for(;n<32;){if(0===i)break a;i--,m|=e[g++]<<n,n+=8}if(p-=j,a.total_out+=p,c.total+=p,p&&(a.adler=c.check=c.flags?u(c.check,f,p,h-p):t(c.check,f,p,h-p)),p=j,(c.flags?m:d(m))!==c.check){a.msg=\"incorrect data check\",c.mode=ma;break}m=0,n=0}c.mode=ka;case ka:if(c.wrap&&c.flags){for(;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(4294967295&c.total)){a.msg=\"incorrect length check\",c.mode=ma;break}m=0,n=0}c.mode=la;case la:xa=E;break a;case ma:xa=H;break a;case na:return I;case oa:default:return G}return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,(c.wsize||p!==a.avail_out&&c.mode<ma&&(c.mode<ja||b!==A))&&l(a,a.output,a.next_out,p-a.avail_out)?(c.mode=na,I):(o-=a.avail_in,p-=a.avail_out,a.total_in+=o,a.total_out+=p,c.total+=p,c.wrap&&p&&(a.adler=c.check=c.flags?u(c.check,f,p,a.next_out-p):t(c.check,f,p,a.next_out-p)),a.data_type=c.bits+(c.last?64:0)+(c.mode===W?128:0)+(c.mode===ca||c.mode===Z?256:0),(0===o&&0===p||b===A)&&xa===D&&(xa=J),xa)}function n(a){if(!a||!a.state)return G;var b=a.state;return b.window&&(b.window=null),a.state=null,D}function o(a,b){var c;return a&&a.state?(c=a.state,0===(2&c.wrap)?G:(c.head=b,b.done=!1,D)):G}function p(a,b){var c,d,e,f=b.length;return a&&a.state?(c=a.state,0!==c.wrap&&c.mode!==V?G:c.mode===V&&(d=1,d=t(d,b,f,0),d!==c.check)?H:(e=l(a,b,f,f))?(c.mode=na,I):(c.havedict=1,D)):G}var q,r,s=a(\"../utils/common\"),t=a(\"./adler32\"),u=a(\"./crc32\"),v=a(\"./inffast\"),w=a(\"./inftrees\"),x=0,y=1,z=2,A=4,B=5,C=6,D=0,E=1,F=2,G=-2,H=-3,I=-4,J=-5,K=8,L=1,M=2,N=3,O=4,P=5,Q=6,R=7,S=8,T=9,U=10,V=11,W=12,X=13,Y=14,Z=15,$=16,_=17,aa=18,ba=19,ca=20,da=21,ea=22,fa=23,ga=24,ha=25,ia=26,ja=27,ka=28,la=29,ma=30,na=31,oa=32,pa=852,qa=592,ra=15,sa=ra,ta=!0;c.inflateReset=g,c.inflateReset2=h,c.inflateResetKeep=f,c.inflateInit=j,c.inflateInit2=i,c.inflate=m,c.inflateEnd=n,c.inflateGetHeader=o,c.inflateSetDictionary=p,c.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":28,\"./adler32\":30,\"./crc32\":32,\"./inffast\":35,\"./inftrees\":37}],37:[function(a,b,c){\"use strict\";var d=a(\"../utils/common\"),e=15,f=852,g=592,h=0,i=1,j=2,k=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],l=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],m=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],n=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];b.exports=function(a,b,c,o,p,q,r,s){var t,u,v,w,x,y,z,A,B,C=s.bits,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=null,O=0,P=new d.Buf16(e+1),Q=new d.Buf16(e+1),R=null,S=0;for(D=0;D<=e;D++)P[D]=0;for(E=0;E<o;E++)P[b[c+E]]++;for(H=C,G=e;G>=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;F<G&&0===P[F];F++);for(H<F&&(H=F),K=1,D=1;D<=e;D++)if(K<<=1,K-=P[D],K<0)return-1;if(K>0&&(a===h||1!==G))return-1;for(Q[1]=0,D=1;D<e;D++)Q[D+1]=Q[D]+P[D];for(E=0;E<o;E++)0!==b[c+E]&&(r[Q[b[c+E]]++]=E);if(a===h?(N=R=r,y=19):a===i?(N=k,O-=257,R=l,S-=257,y=256):(N=m,R=n,y=-1),M=0,E=0,D=F,x=q,I=H,J=0,v=-1,L=1<<H,w=L-1,a===i&&L>f||a===j&&L>g)return 1;for(var T=0;;){T++,z=D-J,r[E]<y?(A=0,B=r[E]):r[E]>y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<<D-J,u=1<<I,F=u;do u-=t,p[x+(M>>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<<D-1;M&t;)t>>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[c+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<<I;I+J<G&&(K-=P[I+J],!(K<=0));)I++,K<<=1;if(L+=1<<I,a===i&&L>f||a===j&&L>g)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{\"../utils/common\":28}],38:[function(a,b,c){\"use strict\";b.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],39:[function(a,b,c){\"use strict\";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length}function f(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b}function g(a){return a<256?ia[a]:ia[256+(a>>>7)]}function h(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function i(a,b,c){a.bi_valid>X-c?(a.bi_buf|=b<<a.bi_valid&65535,h(a,a.bi_buf),a.bi_buf=b>>X-a.bi_valid,a.bi_valid+=c-X):(a.bi_buf|=b<<a.bi_valid&65535,a.bi_valid+=c)}function j(a,b,c){i(a,c[2*b],c[2*b+1])}function k(a,b){var c=0;do c|=1&a,a>>>=1,c<<=1;while(--b>0);return c>>>1}function l(a){16===a.bi_valid?(h(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function m(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;f<=W;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;c<V;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function n(a,b,c){var d,e,f=new Array(W+1),g=0;for(d=1;d<=W;d++)f[d]=g=g+c[d-1]<<1;for(e=0;e<=b;e++){var h=a[2*e+1];0!==h&&(a[2*e]=k(f[h]++,h))}}function o(){var a,b,c,d,f,g=new Array(W+1);for(c=0,d=0;d<Q-1;d++)for(ka[d]=c,a=0;a<1<<ba[d];a++)ja[c++]=d;for(ja[c-1]=d,f=0,d=0;d<16;d++)for(la[d]=f,a=0;a<1<<ca[d];a++)ia[f++]=d;for(f>>=7;d<T;d++)for(la[d]=f<<7,a=0;a<1<<ca[d]-7;a++)ia[256+f++]=d;for(b=0;b<=W;b++)g[b]=0;for(a=0;a<=143;)ga[2*a+1]=8,a++,g[8]++;for(;a<=255;)ga[2*a+1]=9,a++,g[9]++;for(;a<=279;)ga[2*a+1]=7,a++,g[7]++;for(;a<=287;)ga[2*a+1]=8,a++,g[8]++;for(n(ga,S+1,g),a=0;a<T;a++)ha[2*a+1]=5,ha[2*a]=k(a,5);ma=new e(ga,ba,R+1,S,W),na=new e(ha,ca,0,T,W),oa=new e(new Array(0),da,0,U,Y)}function p(a){var b;for(b=0;b<S;b++)a.dyn_ltree[2*b]=0;for(b=0;b<T;b++)a.dyn_dtree[2*b]=0;for(b=0;b<U;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*Z]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function q(a){a.bi_valid>8?h(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function r(a,b,c,d){q(a),d&&(h(a,c),h(a,~c)),G.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function s(a,b,c,d){var e=2*b,f=2*c;return a[e]<a[f]||a[e]===a[f]&&d[b]<=d[c]}function t(a,b,c){for(var d=a.heap[c],e=c<<1;e<=a.heap_len&&(e<a.heap_len&&s(b,a.heap[e+1],a.heap[e],a.depth)&&e++,!s(b,d,a.heap[e],a.depth));)a.heap[c]=a.heap[e],c=e,e<<=1;a.heap[c]=d}function u(a,b,c){var d,e,f,h,k=0;if(0!==a.last_lit)do d=a.pending_buf[a.d_buf+2*k]<<8|a.pending_buf[a.d_buf+2*k+1],e=a.pending_buf[a.l_buf+k],k++,0===d?j(a,e,b):(f=ja[e],j(a,f+R+1,b),h=ba[f],0!==h&&(e-=ka[f],i(a,e,h)),d--,f=g(d),j(a,f,c),h=ca[f],0!==h&&(d-=la[f],i(a,d,h)));while(k<a.last_lit);j(a,Z,b)}function v(a,b){var c,d,e,f=b.dyn_tree,g=b.stat_desc.static_tree,h=b.stat_desc.has_stree,i=b.stat_desc.elems,j=-1;for(a.heap_len=0,a.heap_max=V,c=0;c<i;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=j<2?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)t(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],t(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,t(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],m(a,b),n(f,j,a.bl_count)}function w(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;d<=c;d++)e=g,g=b[2*(d+1)+1],++h<i&&e===g||(h<j?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*$]++):h<=10?a.bl_tree[2*_]++:a.bl_tree[2*aa]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function x(a,b,c){var d,e,f=-1,g=b[1],h=0,k=7,l=4;for(0===g&&(k=138,l=3),d=0;d<=c;d++)if(e=g,g=b[2*(d+1)+1],!(++h<k&&e===g)){if(h<l){do j(a,e,a.bl_tree);while(0!==--h)}else 0!==e?(e!==f&&(j(a,e,a.bl_tree),h--),j(a,$,a.bl_tree),i(a,h-3,2)):h<=10?(j(a,_,a.bl_tree),i(a,h-3,3)):(j(a,aa,a.bl_tree),i(a,h-11,7));h=0,f=e,0===g?(k=138,l=3):e===g?(k=6,l=3):(k=7,l=4)}}function y(a){var b;for(w(a,a.dyn_ltree,a.l_desc.max_code),w(a,a.dyn_dtree,a.d_desc.max_code),v(a,a.bl_desc),b=U-1;b>=3&&0===a.bl_tree[2*ea[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function z(a,b,c,d){var e;for(i(a,b-257,5),i(a,c-1,5),i(a,d-4,4),e=0;e<d;e++)i(a,a.bl_tree[2*ea[e]+1],3);x(a,a.dyn_ltree,b-1),x(a,a.dyn_dtree,c-1)}function A(a){var b,c=4093624447;for(b=0;b<=31;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return I;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return J;for(b=32;b<R;b++)if(0!==a.dyn_ltree[2*b])return J;return I}function B(a){pa||(o(),pa=!0),a.l_desc=new f(a.dyn_ltree,ma),a.d_desc=new f(a.dyn_dtree,na),a.bl_desc=new f(a.bl_tree,oa),a.bi_buf=0,a.bi_valid=0,p(a)}function C(a,b,c,d){i(a,(L<<1)+(d?1:0),3),r(a,b,c,!0)}function D(a){i(a,M<<1,3),j(a,Z,ga),l(a)}function E(a,b,c,d){var e,f,g=0;a.level>0?(a.strm.data_type===K&&(a.strm.data_type=A(a)),v(a,a.l_desc),v(a,a.d_desc),g=y(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,f<=e&&(e=f)):e=f=c+5,c+4<=e&&b!==-1?C(a,b,c,d):a.strategy===H||f===e?(i(a,(M<<1)+(d?1:0),3),u(a,ga,ha)):(i(a,(N<<1)+(d?1:0),3),z(a,a.l_desc.max_code+1,a.d_desc.max_code+1,g+1),u(a,a.dyn_ltree,a.dyn_dtree)),p(a),d&&q(a)}function F(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ja[c]+R+1)]++,a.dyn_dtree[2*g(b)]++),a.last_lit===a.lit_bufsize-1}var G=a(\"../utils/common\"),H=4,I=0,J=1,K=2,L=0,M=1,N=2,O=3,P=258,Q=29,R=256,S=R+1+Q,T=30,U=19,V=2*S+1,W=15,X=16,Y=7,Z=256,$=16,_=17,aa=18,ba=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ca=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],da=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],ea=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],fa=512,ga=new Array(2*(S+2));d(ga);var ha=new Array(2*T);d(ha);var ia=new Array(fa);d(ia);var ja=new Array(P-O+1);d(ja);var ka=new Array(Q);d(ka);var la=new Array(T);d(la);var ma,na,oa,pa=!1;c._tr_init=B,c._tr_stored_block=C,c._tr_flush_block=E,c._tr_tally=F,c._tr_align=D},{\"../utils/common\":28}],40:[function(a,b,c){\"use strict\";function d(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}b.exports=d},{}]},{},[10])(10)});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/jszip/jszip.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/jszip/license": {
"text": "JSZip is dual licensed. You may use it under the MIT license *or* the GPLv3\nlicense.\n\nThe MIT License\n===============\n\nCopyright (c) 2009-2014 Stuart Knightley, David Duponchel, Franz Buchinger, António Afonso\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\nGPL version 3\n=============\n\n GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n Preamble\n\n The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works. By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users. We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors. You can apply it to\nyour programs, too.\n\n When we speak of free software, we are referring to freedom, not\nprice. Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights. Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received. You must make sure that they, too, receive\nor can get the source code. And you must show them these terms so they\nknow their rights.\n\n Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software. For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so. This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software. The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable. Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts. If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary. To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n The precise terms and conditions for copying, distribution and\nmodification follow.\n\n TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" refers to version 3 of the GNU General Public License.\n\n \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n \"The Program\" refers to any copyrightable work licensed under this\nLicense. Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy. The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy. Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies. Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License. If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work means the preferred form of the work\nfor making modifications to it. \"Object code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form. A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities. However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work. For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n The Corresponding Source for a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met. This License explicitly affirms your unlimited\npermission to run the unmodified Program. The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work. This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force. You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright. Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n Conveying under any other circumstances is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n 5. Conveying Modified Source Versions.\n\n You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n a) The work must carry prominent notices stating that you modified\n it, and giving a relevant date.\n\n b) The work must carry prominent notices stating that it is\n released under this License and any conditions added under section\n 7. This requirement modifies the requirement in section 4 to\n \"keep intact all notices\".\n\n c) You must license the entire work, as a whole, under this\n License to anyone who comes into possession of a copy. This\n License will therefore apply, along with any applicable section 7\n additional terms, to the whole of the work, and all its parts,\n regardless of how they are packaged. This License gives no\n permission to license the work in any other way, but it does not\n invalidate such permission if you have separately received it.\n\n d) If the work has interactive user interfaces, each must display\n Appropriate Legal Notices; however, if the Program has interactive\n interfaces that do not display Appropriate Legal Notices, your\n work need not make them do so.\n\n A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit. Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n a) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by the\n Corresponding Source fixed on a durable physical medium\n customarily used for software interchange.\n\n b) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by a\n written offer, valid for at least three years and valid for as\n long as you offer spare parts or customer support for that product\n model, to give anyone who possesses the object code either (1) a\n copy of the Corresponding Source for all the software in the\n product that is covered by this License, on a durable physical\n medium customarily used for software interchange, for a price no\n more than your reasonable cost of physically performing this\n conveying of source, or (2) access to copy the\n Corresponding Source from a network server at no charge.\n\n c) Convey individual copies of the object code with a copy of the\n written offer to provide the Corresponding Source. This\n alternative is allowed only occasionally and noncommercially, and\n only if you received the object code with such an offer, in accord\n with subsection 6b.\n\n d) Convey the object code by offering access from a designated\n place (gratis or for a charge), and offer equivalent access to the\n Corresponding Source in the same way through the same place at no\n further charge. You need not require recipients to copy the\n Corresponding Source along with the object code. If the place to\n copy the object code is a network server, the Corresponding Source\n may be on a different server (operated by you or a third party)\n that supports equivalent copying facilities, provided you maintain\n clear directions next to the object code saying where to find the\n Corresponding Source. Regardless of what server hosts the\n Corresponding Source, you remain obligated to ensure that it is\n available for as long as needed to satisfy these requirements.\n\n e) Convey the object code using peer-to-peer transmission, provided\n you inform other peers where the object code and Corresponding\n Source of the work are being offered to the general public at no\n charge under subsection 6d.\n\n A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling. In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product. A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source. The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information. But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed. Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n 7. Additional Terms.\n\n \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law. If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit. (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.) You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n a) Disclaiming warranty or limiting liability differently from the\n terms of sections 15 and 16 of this License; or\n\n b) Requiring preservation of specified reasonable legal notices or\n author attributions in that material or in the Appropriate Legal\n Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation of the origin of that material, or\n requiring that modified versions of such material be marked in\n reasonable ways as different from the original version; or\n\n d) Limiting the use for publicity purposes of names of licensors or\n authors of the material; or\n\n e) Declining to grant rights under trademark law for use of some\n trade names, trademarks, or service marks; or\n\n f) Requiring indemnification of licensors and authors of that\n material by anyone who conveys the material (or modified versions of\n it) with contractual assumptions of liability to the recipient, for\n any liability that these contractual assumptions directly impose on\n those licensors and authors.\n\n All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10. If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term. If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a covered work except as expressly\nprovided under this License. Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License. If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n You are not required to accept this License in order to receive or\nrun a copy of the Program. Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance. However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work. These actions infringe copyright if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n 10. Automatic Licensing of Downstream Recipients.\n\n Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License. You are not responsible\nfor enforcing compliance by third parties with this License.\n\n An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations. If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License. For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based. The\nwork thus licensed is called the contributor's \"contributor version\".\n\n A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version. For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement). To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License. You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License. If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all. For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n 13. Use with the GNU Affero General Public License.\n\n Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work. The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n 14. Revised Versions of this License.\n\n The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time. Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation. If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n Later license versions may give you additional or different\npermissions. However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n END OF TERMS AND CONDITIONS\n",
"type": "text/plain",
"title": "$:/plugins/tiddlywiki/jszip/license"
},
"$:/plugins/tiddlywiki/jszip/readme": {
"title": "$:/plugins/tiddlywiki/jszip/readme",
"text": "This plugin provides primitives for working with Zip files. It also makes the [[JSZip|https://stuk.github.io/jszip/]] library available for use by other plugins.\n"
},
"$:/plugins/tiddlywiki/jszip/startup.js": {
"title": "$:/plugins/tiddlywiki/jszip/startup.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/jszip/startup.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget event handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar JSZip = require(\"$:/plugins/tiddlywiki/jszip/jszip.js\");\n\n// Export name and synchronous status\nexports.name = \"jszip\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Install the root widget event handlers\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-zip-create\",function(event) {\n\t\tif(event.param) {\n\t\t\tvar zip = new JSZip();\n\t\t\tsaveZipTiddler(event.param,zip);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-zip-add-text-file\",function(event) {\n\t\tvar paramObject = event.paramObject || {};\n\t\tif(event.param && paramObject.filename && paramObject.text) {\n\t\t\tvar zip = loadZipTiddler(event.param);\n\t\t\tzip.file(paramObject.filename,paramObject.text);\n\t\t\tsaveZipTiddler(event.param,zip);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-zip-render-file\",function(event) {\n\t\tvar paramObject = event.paramObject || {};\n\t\tif(event.param && paramObject.filename && paramObject.template) {\n\t\t\tvar zip = loadZipTiddler(event.param),\n\t\t\t\toutputType = paramObject.output || \"text/plain\",\n\t\t\t\ttemplateTitle = paramObject.template,\n\t\t\t\ttext = $tw.wiki.renderTiddler(outputType,templateTitle,{\n\t\t\t\t\tparseAsInline: paramObject.mode === \"inline\",\n\t\t\t\t\tparentWidget: event.widget,\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tcurrentTiddler: paramObject.tiddler\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\tzip.file(paramObject.filename,text);\n\t\t\tsaveZipTiddler(event.param,zip);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-zip-download\",function(event) {\n\t\tvar paramObject = event.paramObject || {};\n\t\tif(event.param) {\n\t\t\tdownloadZipFile(event.param,paramObject.filename || \"file.zip\");\n\t\t}\n\t});\n};\n\nfunction loadZipTiddler(title) {\n\treturn $tw.wiki.getGlobalCache(\"jszip\",function() {\n\t\tvar zip = new JSZip(),\n\t\t\ttiddler = $tw.wiki.getTiddler(title);\n\t\tif(tiddler && tiddler.fields.type === \"application/zip\") {\n\t\t\ttry {\n\t\t\t\tzip.load(tiddler.fields.text,{\n\t\t\t\t\tbase64: true\n\t\t\t\t});\n\t\t\t} catch(e) {\n\t\t\t\tconsole.log(\"JSZip error: \" + e)\n\t\t\t}\n\t\t}\n\t\treturn zip;\t\t\n\t});\n}\n\nfunction saveZipTiddler(title,zip) {\n\tvar data = zip.generate({\n\t\t\ttype: \"base64\"\n\t\t});\n\t$tw.wiki.addTiddler({\n\t\ttitle: title,\n\t\ttype: \"application/zip\",\n\t\ttext: data\n\t});\n}\n\nfunction downloadZipFile(title,filename) {\n\tvar tiddler = $tw.wiki.getTiddler(title);\n\tif(tiddler && tiddler.fields.text && tiddler.fields.type === \"application/zip\") {\n\t\tvar link = document.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",\"data:application/zip;base64,\" + encodeURIComponent(tiddler.fields.text));\n\t\tlink.setAttribute(\"download\",filename);\n\t\tdocument.body.appendChild(link);\n\t\tlink.click();\n\t\tdocument.body.removeChild(link);\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
}
}
}
{
"tiddlers": {
"$:/config/markdown/breaks": {
"title": "$:/config/markdown/breaks",
"text": "false"
},
"$:/config/markdown/linkify": {
"title": "$:/config/markdown/linkify",
"text": "false"
},
"$:/config/markdown/linkNewWindow": {
"title": "$:/config/markdown/linkNewWindow",
"text": "true"
},
"$:/config/markdown/quotes": {
"title": "$:/config/markdown/quotes",
"text": "“”‘’"
},
"$:/config/markdown/renderWikiText": {
"title": "$:/config/markdown/renderWikiText",
"text": "true"
},
"$:/config/markdown/renderWikiTextPragma": {
"title": "$:/config/markdown/renderWikiTextPragma",
"text": "\\rules only html image macrocallinline syslink transcludeinline wikilink filteredtranscludeblock macrocallblock transcludeblock"
},
"$:/config/markdown/typographer": {
"title": "$:/config/markdown/typographer",
"text": "false"
},
"$:/language/Docs/Types/text/x-markdown": {
"title": "$:/language/Docs/Types/text/x-markdown",
"description": "Markdown",
"name": "text/x-markdown",
"group": "Text"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/bold": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/bold",
"list-after": "$:/core/ui/EditorToolbar/bold",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/bold",
"caption": "{{$:/language/Buttons/Bold/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Bold/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((bold))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"**\"\n\tsuffix=\"**\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-1": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-1",
"list-after": "$:/core/ui/EditorToolbar/heading-1",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-1",
"caption": "{{$:/language/Buttons/Heading1/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading1/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-1))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-2": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-2",
"list-after": "$:/core/ui/EditorToolbar/heading-2",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-2",
"caption": "{{$:/language/Buttons/Heading2/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading2/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-2))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"2\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-3": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-3",
"list-after": "$:/core/ui/EditorToolbar/heading-3",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-3",
"caption": "{{$:/language/Buttons/Heading3/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading3/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-3))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"3\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-4": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-4",
"list-after": "$:/core/ui/EditorToolbar/heading-4",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-4",
"caption": "{{$:/language/Buttons/Heading4/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading4/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-4))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"4\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-5": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-5",
"list-after": "$:/core/ui/EditorToolbar/heading-5",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-5",
"caption": "{{$:/language/Buttons/Heading5/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading5/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-5))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"5\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-6": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-6",
"list-after": "$:/core/ui/EditorToolbar/heading-6",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-6",
"caption": "{{$:/language/Buttons/Heading6/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading6/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-6))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"6\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/italic": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/italic",
"list-after": "$:/core/ui/EditorToolbar/italic",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/italic",
"caption": "{{$:/language/Buttons/Italic/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Italic/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((italic))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"*\"\n\tsuffix=\"*\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/list-bullet": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/list-bullet",
"list-after": "$:/core/ui/EditorToolbar/list-bullet",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-bullet",
"caption": "{{$:/language/Buttons/ListBullet/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/ListBullet/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((list-bullet))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/list-number": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/list-number",
"list-after": "$:/core/ui/EditorToolbar/list-number",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-number",
"caption": "{{$:/language/Buttons/ListNumber/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/ListNumber/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((list-number))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"1.\"\n\tcount=\"1\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/mono-line": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/mono-line",
"list-after": "$:/core/ui/EditorToolbar/mono-line",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-line",
"caption": "{{$:/language/Buttons/MonoLine/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/MonoLine/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((mono-line))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/quote": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/quote",
"list-after": "$:/core/ui/EditorToolbar/quote",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/quote",
"caption": "{{$:/language/Buttons/Quote/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Quote/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((quote))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\">\"\n\tcount=\"1\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/remarkable.js": {
"text": "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=e||self).remarkable={})}(this,function(e){\"use strict\";var t={Aacute:\"Á\",aacute:\"á\",Abreve:\"Ă\",abreve:\"ă\",ac:\"∾\",acd:\"∿\",acE:\"∾̳\",Acirc:\"Â\",acirc:\"â\",acute:\"´\",Acy:\"А\",acy:\"а\",AElig:\"Æ\",aelig:\"æ\",af:\"\",Afr:\"𝔄\",afr:\"𝔞\",Agrave:\"À\",agrave:\"à\",alefsym:\"ℵ\",aleph:\"ℵ\",Alpha:\"Α\",alpha:\"α\",Amacr:\"Ā\",amacr:\"ā\",amalg:\"⨿\",AMP:\"&\",amp:\"&\",And:\"⩓\",and:\"∧\",andand:\"⩕\",andd:\"⩜\",andslope:\"⩘\",andv:\"⩚\",ang:\"∠\",ange:\"⦤\",angle:\"∠\",angmsd:\"∡\",angmsdaa:\"⦨\",angmsdab:\"⦩\",angmsdac:\"⦪\",angmsdad:\"⦫\",angmsdae:\"⦬\",angmsdaf:\"⦭\",angmsdag:\"⦮\",angmsdah:\"⦯\",angrt:\"∟\",angrtvb:\"⊾\",angrtvbd:\"⦝\",angsph:\"∢\",angst:\"Å\",angzarr:\"⍼\",Aogon:\"Ą\",aogon:\"ą\",Aopf:\"𝔸\",aopf:\"𝕒\",ap:\"≈\",apacir:\"⩯\",apE:\"⩰\",ape:\"≊\",apid:\"≋\",apos:\"'\",ApplyFunction:\"\",approx:\"≈\",approxeq:\"≊\",Aring:\"Å\",aring:\"å\",Ascr:\"𝒜\",ascr:\"𝒶\",Assign:\"≔\",ast:\"*\",asymp:\"≈\",asympeq:\"≍\",Atilde:\"Ã\",atilde:\"ã\",Auml:\"Ä\",auml:\"ä\",awconint:\"∳\",awint:\"⨑\",backcong:\"≌\",backepsilon:\"϶\",backprime:\"‵\",backsim:\"∽\",backsimeq:\"⋍\",Backslash:\"∖\",Barv:\"⫧\",barvee:\"⊽\",Barwed:\"⌆\",barwed:\"⌅\",barwedge:\"⌅\",bbrk:\"⎵\",bbrktbrk:\"⎶\",bcong:\"≌\",Bcy:\"Б\",bcy:\"б\",bdquo:\"„\",becaus:\"∵\",Because:\"∵\",because:\"∵\",bemptyv:\"⦰\",bepsi:\"϶\",bernou:\"ℬ\",Bernoullis:\"ℬ\",Beta:\"Β\",beta:\"β\",beth:\"ℶ\",between:\"≬\",Bfr:\"𝔅\",bfr:\"𝔟\",bigcap:\"⋂\",bigcirc:\"◯\",bigcup:\"⋃\",bigodot:\"⨀\",bigoplus:\"⨁\",bigotimes:\"⨂\",bigsqcup:\"⨆\",bigstar:\"★\",bigtriangledown:\"▽\",bigtriangleup:\"△\",biguplus:\"⨄\",bigvee:\"⋁\",bigwedge:\"⋀\",bkarow:\"⤍\",blacklozenge:\"⧫\",blacksquare:\"▪\",blacktriangle:\"▴\",blacktriangledown:\"▾\",blacktriangleleft:\"◂\",blacktriangleright:\"▸\",blank:\"␣\",blk12:\"▒\",blk14:\"░\",blk34:\"▓\",block:\"█\",bne:\"=⃥\",bnequiv:\"≡⃥\",bNot:\"⫭\",bnot:\"⌐\",Bopf:\"𝔹\",bopf:\"𝕓\",bot:\"⊥\",bottom:\"⊥\",bowtie:\"⋈\",boxbox:\"⧉\",boxDL:\"╗\",boxDl:\"╖\",boxdL:\"╕\",boxdl:\"┐\",boxDR:\"╔\",boxDr:\"╓\",boxdR:\"╒\",boxdr:\"┌\",boxH:\"═\",boxh:\"─\",boxHD:\"╦\",boxHd:\"╤\",boxhD:\"╥\",boxhd:\"┬\",boxHU:\"╩\",boxHu:\"╧\",boxhU:\"╨\",boxhu:\"┴\",boxminus:\"⊟\",boxplus:\"⊞\",boxtimes:\"⊠\",boxUL:\"╝\",boxUl:\"╜\",boxuL:\"╛\",boxul:\"┘\",boxUR:\"╚\",boxUr:\"╙\",boxuR:\"╘\",boxur:\"└\",boxV:\"║\",boxv:\"│\",boxVH:\"╬\",boxVh:\"╫\",boxvH:\"╪\",boxvh:\"┼\",boxVL:\"╣\",boxVl:\"╢\",boxvL:\"╡\",boxvl:\"┤\",boxVR:\"╠\",boxVr:\"╟\",boxvR:\"╞\",boxvr:\"├\",bprime:\"‵\",Breve:\"˘\",breve:\"˘\",brvbar:\"¦\",Bscr:\"ℬ\",bscr:\"𝒷\",bsemi:\"⁏\",bsim:\"∽\",bsime:\"⋍\",bsol:\"\\\\\",bsolb:\"⧅\",bsolhsub:\"⟈\",bull:\"•\",bullet:\"•\",bump:\"≎\",bumpE:\"⪮\",bumpe:\"≏\",Bumpeq:\"≎\",bumpeq:\"≏\",Cacute:\"Ć\",cacute:\"ć\",Cap:\"⋒\",cap:\"∩\",capand:\"⩄\",capbrcup:\"⩉\",capcap:\"⩋\",capcup:\"⩇\",capdot:\"⩀\",CapitalDifferentialD:\"ⅅ\",caps:\"∩︀\",caret:\"⁁\",caron:\"ˇ\",Cayleys:\"ℭ\",ccaps:\"⩍\",Ccaron:\"Č\",ccaron:\"č\",Ccedil:\"Ç\",ccedil:\"ç\",Ccirc:\"Ĉ\",ccirc:\"ĉ\",Cconint:\"∰\",ccups:\"⩌\",ccupssm:\"⩐\",Cdot:\"Ċ\",cdot:\"ċ\",cedil:\"¸\",Cedilla:\"¸\",cemptyv:\"⦲\",cent:\"¢\",CenterDot:\"·\",centerdot:\"·\",Cfr:\"ℭ\",cfr:\"𝔠\",CHcy:\"Ч\",chcy:\"ч\",check:\"✓\",checkmark:\"✓\",Chi:\"Χ\",chi:\"χ\",cir:\"○\",circ:\"ˆ\",circeq:\"≗\",circlearrowleft:\"↺\",circlearrowright:\"↻\",circledast:\"⊛\",circledcirc:\"⊚\",circleddash:\"⊝\",CircleDot:\"⊙\",circledR:\"®\",circledS:\"Ⓢ\",CircleMinus:\"⊖\",CirclePlus:\"⊕\",CircleTimes:\"⊗\",cirE:\"⧃\",cire:\"≗\",cirfnint:\"⨐\",cirmid:\"⫯\",cirscir:\"⧂\",ClockwiseContourIntegral:\"∲\",CloseCurlyDoubleQuote:\"”\",CloseCurlyQuote:\"’\",clubs:\"♣\",clubsuit:\"♣\",Colon:\"∷\",colon:\":\",Colone:\"⩴\",colone:\"≔\",coloneq:\"≔\",comma:\",\",commat:\"@\",comp:\"∁\",compfn:\"∘\",complement:\"∁\",complexes:\"ℂ\",cong:\"≅\",congdot:\"⩭\",Congruent:\"≡\",Conint:\"∯\",conint:\"∮\",ContourIntegral:\"∮\",Copf:\"ℂ\",copf:\"𝕔\",coprod:\"∐\",Coproduct:\"∐\",COPY:\"©\",copy:\"©\",copysr:\"℗\",CounterClockwiseContourIntegral:\"∳\",crarr:\"↵\",Cross:\"⨯\",cross:\"✗\",Cscr:\"𝒞\",cscr:\"𝒸\",csub:\"⫏\",csube:\"⫑\",csup:\"⫐\",csupe:\"⫒\",ctdot:\"⋯\",cudarrl:\"⤸\",cudarrr:\"⤵\",cuepr:\"⋞\",cuesc:\"⋟\",cularr:\"↶\",cularrp:\"⤽\",Cup:\"⋓\",cup:\"∪\",cupbrcap:\"⩈\",CupCap:\"≍\",cupcap:\"⩆\",cupcup:\"⩊\",cupdot:\"⊍\",cupor:\"⩅\",cups:\"∪︀\",curarr:\"↷\",curarrm:\"⤼\",curlyeqprec:\"⋞\",curlyeqsucc:\"⋟\",curlyvee:\"⋎\",curlywedge:\"⋏\",curren:\"¤\",curvearrowleft:\"↶\",curvearrowright:\"↷\",cuvee:\"⋎\",cuwed:\"⋏\",cwconint:\"∲\",cwint:\"∱\",cylcty:\"⌭\",Dagger:\"‡\",dagger:\"†\",daleth:\"ℸ\",Darr:\"↡\",dArr:\"⇓\",darr:\"↓\",dash:\"‐\",Dashv:\"⫤\",dashv:\"⊣\",dbkarow:\"⤏\",dblac:\"˝\",Dcaron:\"Ď\",dcaron:\"ď\",Dcy:\"Д\",dcy:\"д\",DD:\"ⅅ\",dd:\"ⅆ\",ddagger:\"‡\",ddarr:\"⇊\",DDotrahd:\"⤑\",ddotseq:\"⩷\",deg:\"°\",Del:\"∇\",Delta:\"Δ\",delta:\"δ\",demptyv:\"⦱\",dfisht:\"⥿\",Dfr:\"𝔇\",dfr:\"𝔡\",dHar:\"⥥\",dharl:\"⇃\",dharr:\"⇂\",DiacriticalAcute:\"´\",DiacriticalDot:\"˙\",DiacriticalDoubleAcute:\"˝\",DiacriticalGrave:\"`\",DiacriticalTilde:\"˜\",diam:\"⋄\",Diamond:\"⋄\",diamond:\"⋄\",diamondsuit:\"♦\",diams:\"♦\",die:\"¨\",DifferentialD:\"ⅆ\",digamma:\"ϝ\",disin:\"⋲\",div:\"÷\",divide:\"÷\",divideontimes:\"⋇\",divonx:\"⋇\",DJcy:\"Ђ\",djcy:\"ђ\",dlcorn:\"⌞\",dlcrop:\"⌍\",dollar:\"$\",Dopf:\"𝔻\",dopf:\"𝕕\",Dot:\"¨\",dot:\"˙\",DotDot:\"⃜\",doteq:\"≐\",doteqdot:\"≑\",DotEqual:\"≐\",dotminus:\"∸\",dotplus:\"∔\",dotsquare:\"⊡\",doublebarwedge:\"⌆\",DoubleContourIntegral:\"∯\",DoubleDot:\"¨\",DoubleDownArrow:\"⇓\",DoubleLeftArrow:\"⇐\",DoubleLeftRightArrow:\"⇔\",DoubleLeftTee:\"⫤\",DoubleLongLeftArrow:\"⟸\",DoubleLongLeftRightArrow:\"⟺\",DoubleLongRightArrow:\"⟹\",DoubleRightArrow:\"⇒\",DoubleRightTee:\"⊨\",DoubleUpArrow:\"⇑\",DoubleUpDownArrow:\"⇕\",DoubleVerticalBar:\"∥\",DownArrow:\"↓\",Downarrow:\"⇓\",downarrow:\"↓\",DownArrowBar:\"⤓\",DownArrowUpArrow:\"⇵\",DownBreve:\"̑\",downdownarrows:\"⇊\",downharpoonleft:\"⇃\",downharpoonright:\"⇂\",DownLeftRightVector:\"⥐\",DownLeftTeeVector:\"⥞\",DownLeftVector:\"↽\",DownLeftVectorBar:\"⥖\",DownRightTeeVector:\"⥟\",DownRightVector:\"⇁\",DownRightVectorBar:\"⥗\",DownTee:\"⊤\",DownTeeArrow:\"↧\",drbkarow:\"⤐\",drcorn:\"⌟\",drcrop:\"⌌\",Dscr:\"𝒟\",dscr:\"𝒹\",DScy:\"Ѕ\",dscy:\"ѕ\",dsol:\"⧶\",Dstrok:\"Đ\",dstrok:\"đ\",dtdot:\"⋱\",dtri:\"▿\",dtrif:\"▾\",duarr:\"⇵\",duhar:\"⥯\",dwangle:\"⦦\",DZcy:\"Џ\",dzcy:\"џ\",dzigrarr:\"⟿\",Eacute:\"É\",eacute:\"é\",easter:\"⩮\",Ecaron:\"Ě\",ecaron:\"ě\",ecir:\"≖\",Ecirc:\"Ê\",ecirc:\"ê\",ecolon:\"≕\",Ecy:\"Э\",ecy:\"э\",eDDot:\"⩷\",Edot:\"Ė\",eDot:\"≑\",edot:\"ė\",ee:\"ⅇ\",efDot:\"≒\",Efr:\"𝔈\",efr:\"𝔢\",eg:\"⪚\",Egrave:\"È\",egrave:\"è\",egs:\"⪖\",egsdot:\"⪘\",el:\"⪙\",Element:\"∈\",elinters:\"⏧\",ell:\"ℓ\",els:\"⪕\",elsdot:\"⪗\",Emacr:\"Ē\",emacr:\"ē\",empty:\"∅\",emptyset:\"∅\",EmptySmallSquare:\"◻\",emptyv:\"∅\",EmptyVerySmallSquare:\"▫\",emsp:\" \",emsp13:\" \",emsp14:\" \",ENG:\"Ŋ\",eng:\"ŋ\",ensp:\" \",Eogon:\"Ę\",eogon:\"ę\",Eopf:\"𝔼\",eopf:\"𝕖\",epar:\"⋕\",eparsl:\"⧣\",eplus:\"⩱\",epsi:\"ε\",Epsilon:\"Ε\",epsilon:\"ε\",epsiv:\"ϵ\",eqcirc:\"≖\",eqcolon:\"≕\",eqsim:\"≂\",eqslantgtr:\"⪖\",eqslantless:\"⪕\",Equal:\"⩵\",equals:\"=\",EqualTilde:\"≂\",equest:\"≟\",Equilibrium:\"⇌\",equiv:\"≡\",equivDD:\"⩸\",eqvparsl:\"⧥\",erarr:\"⥱\",erDot:\"≓\",Escr:\"ℰ\",escr:\"ℯ\",esdot:\"≐\",Esim:\"⩳\",esim:\"≂\",Eta:\"Η\",eta:\"η\",ETH:\"Ð\",eth:\"ð\",Euml:\"Ë\",euml:\"ë\",euro:\"€\",excl:\"!\",exist:\"∃\",Exists:\"∃\",expectation:\"ℰ\",ExponentialE:\"ⅇ\",exponentiale:\"ⅇ\",fallingdotseq:\"≒\",Fcy:\"Ф\",fcy:\"ф\",female:\"♀\",ffilig:\"ffi\",fflig:\"ff\",ffllig:\"ffl\",Ffr:\"𝔉\",ffr:\"𝔣\",filig:\"fi\",FilledSmallSquare:\"◼\",FilledVerySmallSquare:\"▪\",fjlig:\"fj\",flat:\"♭\",fllig:\"fl\",fltns:\"▱\",fnof:\"ƒ\",Fopf:\"𝔽\",fopf:\"𝕗\",ForAll:\"∀\",forall:\"∀\",fork:\"⋔\",forkv:\"⫙\",Fouriertrf:\"ℱ\",fpartint:\"⨍\",frac12:\"½\",frac13:\"⅓\",frac14:\"¼\",frac15:\"⅕\",frac16:\"⅙\",frac18:\"⅛\",frac23:\"⅔\",frac25:\"⅖\",frac34:\"¾\",frac35:\"⅗\",frac38:\"⅜\",frac45:\"⅘\",frac56:\"⅚\",frac58:\"⅝\",frac78:\"⅞\",frasl:\"⁄\",frown:\"⌢\",Fscr:\"ℱ\",fscr:\"𝒻\",gacute:\"ǵ\",Gamma:\"Γ\",gamma:\"γ\",Gammad:\"Ϝ\",gammad:\"ϝ\",gap:\"⪆\",Gbreve:\"Ğ\",gbreve:\"ğ\",Gcedil:\"Ģ\",Gcirc:\"Ĝ\",gcirc:\"ĝ\",Gcy:\"Г\",gcy:\"г\",Gdot:\"Ġ\",gdot:\"ġ\",gE:\"≧\",ge:\"≥\",gEl:\"⪌\",gel:\"⋛\",geq:\"≥\",geqq:\"≧\",geqslant:\"⩾\",ges:\"⩾\",gescc:\"⪩\",gesdot:\"⪀\",gesdoto:\"⪂\",gesdotol:\"⪄\",gesl:\"⋛︀\",gesles:\"⪔\",Gfr:\"𝔊\",gfr:\"𝔤\",Gg:\"⋙\",gg:\"≫\",ggg:\"⋙\",gimel:\"ℷ\",GJcy:\"Ѓ\",gjcy:\"ѓ\",gl:\"≷\",gla:\"⪥\",glE:\"⪒\",glj:\"⪤\",gnap:\"⪊\",gnapprox:\"⪊\",gnE:\"≩\",gne:\"⪈\",gneq:\"⪈\",gneqq:\"≩\",gnsim:\"⋧\",Gopf:\"𝔾\",gopf:\"𝕘\",grave:\"`\",GreaterEqual:\"≥\",GreaterEqualLess:\"⋛\",GreaterFullEqual:\"≧\",GreaterGreater:\"⪢\",GreaterLess:\"≷\",GreaterSlantEqual:\"⩾\",GreaterTilde:\"≳\",Gscr:\"𝒢\",gscr:\"ℊ\",gsim:\"≳\",gsime:\"⪎\",gsiml:\"⪐\",GT:\">\",Gt:\"≫\",gt:\">\",gtcc:\"⪧\",gtcir:\"⩺\",gtdot:\"⋗\",gtlPar:\"⦕\",gtquest:\"⩼\",gtrapprox:\"⪆\",gtrarr:\"⥸\",gtrdot:\"⋗\",gtreqless:\"⋛\",gtreqqless:\"⪌\",gtrless:\"≷\",gtrsim:\"≳\",gvertneqq:\"≩︀\",gvnE:\"≩︀\",Hacek:\"ˇ\",hairsp:\" \",half:\"½\",hamilt:\"ℋ\",HARDcy:\"Ъ\",hardcy:\"ъ\",hArr:\"⇔\",harr:\"↔\",harrcir:\"⥈\",harrw:\"↭\",Hat:\"^\",hbar:\"ℏ\",Hcirc:\"Ĥ\",hcirc:\"ĥ\",hearts:\"♥\",heartsuit:\"♥\",hellip:\"…\",hercon:\"⊹\",Hfr:\"ℌ\",hfr:\"𝔥\",HilbertSpace:\"ℋ\",hksearow:\"⤥\",hkswarow:\"⤦\",hoarr:\"⇿\",homtht:\"∻\",hookleftarrow:\"↩\",hookrightarrow:\"↪\",Hopf:\"ℍ\",hopf:\"𝕙\",horbar:\"―\",HorizontalLine:\"─\",Hscr:\"ℋ\",hscr:\"𝒽\",hslash:\"ℏ\",Hstrok:\"Ħ\",hstrok:\"ħ\",HumpDownHump:\"≎\",HumpEqual:\"≏\",hybull:\"⁃\",hyphen:\"‐\",Iacute:\"Í\",iacute:\"í\",ic:\"\",Icirc:\"Î\",icirc:\"î\",Icy:\"И\",icy:\"и\",Idot:\"İ\",IEcy:\"Е\",iecy:\"е\",iexcl:\"¡\",iff:\"⇔\",Ifr:\"ℑ\",ifr:\"𝔦\",Igrave:\"Ì\",igrave:\"ì\",ii:\"ⅈ\",iiiint:\"⨌\",iiint:\"∭\",iinfin:\"⧜\",iiota:\"℩\",IJlig:\"IJ\",ijlig:\"ij\",Im:\"ℑ\",Imacr:\"Ī\",imacr:\"ī\",image:\"ℑ\",ImaginaryI:\"ⅈ\",imagline:\"ℐ\",imagpart:\"ℑ\",imath:\"ı\",imof:\"⊷\",imped:\"Ƶ\",Implies:\"⇒\",in:\"∈\",incare:\"℅\",infin:\"∞\",infintie:\"⧝\",inodot:\"ı\",Int:\"∬\",int:\"∫\",intcal:\"⊺\",integers:\"ℤ\",Integral:\"∫\",intercal:\"⊺\",Intersection:\"⋂\",intlarhk:\"⨗\",intprod:\"⨼\",InvisibleComma:\"\",InvisibleTimes:\"\",IOcy:\"Ё\",iocy:\"ё\",Iogon:\"Į\",iogon:\"į\",Iopf:\"𝕀\",iopf:\"𝕚\",Iota:\"Ι\",iota:\"ι\",iprod:\"⨼\",iquest:\"¿\",Iscr:\"ℐ\",iscr:\"𝒾\",isin:\"∈\",isindot:\"⋵\",isinE:\"⋹\",isins:\"⋴\",isinsv:\"⋳\",isinv:\"∈\",it:\"\",Itilde:\"Ĩ\",itilde:\"ĩ\",Iukcy:\"І\",iukcy:\"і\",Iuml:\"Ï\",iuml:\"ï\",Jcirc:\"Ĵ\",jcirc:\"ĵ\",Jcy:\"Й\",jcy:\"й\",Jfr:\"𝔍\",jfr:\"𝔧\",jmath:\"ȷ\",Jopf:\"𝕁\",jopf:\"𝕛\",Jscr:\"𝒥\",jscr:\"𝒿\",Jsercy:\"Ј\",jsercy:\"ј\",Jukcy:\"Є\",jukcy:\"є\",Kappa:\"Κ\",kappa:\"κ\",kappav:\"ϰ\",Kcedil:\"Ķ\",kcedil:\"ķ\",Kcy:\"К\",kcy:\"к\",Kfr:\"𝔎\",kfr:\"𝔨\",kgreen:\"ĸ\",KHcy:\"Х\",khcy:\"х\",KJcy:\"Ќ\",kjcy:\"ќ\",Kopf:\"𝕂\",kopf:\"𝕜\",Kscr:\"𝒦\",kscr:\"𝓀\",lAarr:\"⇚\",Lacute:\"Ĺ\",lacute:\"ĺ\",laemptyv:\"⦴\",lagran:\"ℒ\",Lambda:\"Λ\",lambda:\"λ\",Lang:\"⟪\",lang:\"⟨\",langd:\"⦑\",langle:\"⟨\",lap:\"⪅\",Laplacetrf:\"ℒ\",laquo:\"«\",Larr:\"↞\",lArr:\"⇐\",larr:\"←\",larrb:\"⇤\",larrbfs:\"⤟\",larrfs:\"⤝\",larrhk:\"↩\",larrlp:\"↫\",larrpl:\"⤹\",larrsim:\"⥳\",larrtl:\"↢\",lat:\"⪫\",lAtail:\"⤛\",latail:\"⤙\",late:\"⪭\",lates:\"⪭︀\",lBarr:\"⤎\",lbarr:\"⤌\",lbbrk:\"❲\",lbrace:\"{\",lbrack:\"[\",lbrke:\"⦋\",lbrksld:\"⦏\",lbrkslu:\"⦍\",Lcaron:\"Ľ\",lcaron:\"ľ\",Lcedil:\"Ļ\",lcedil:\"ļ\",lceil:\"⌈\",lcub:\"{\",Lcy:\"Л\",lcy:\"л\",ldca:\"⤶\",ldquo:\"“\",ldquor:\"„\",ldrdhar:\"⥧\",ldrushar:\"⥋\",ldsh:\"↲\",lE:\"≦\",le:\"≤\",LeftAngleBracket:\"⟨\",LeftArrow:\"←\",Leftarrow:\"⇐\",leftarrow:\"←\",LeftArrowBar:\"⇤\",LeftArrowRightArrow:\"⇆\",leftarrowtail:\"↢\",LeftCeiling:\"⌈\",LeftDoubleBracket:\"⟦\",LeftDownTeeVector:\"⥡\",LeftDownVector:\"⇃\",LeftDownVectorBar:\"⥙\",LeftFloor:\"⌊\",leftharpoondown:\"↽\",leftharpoonup:\"↼\",leftleftarrows:\"⇇\",LeftRightArrow:\"↔\",Leftrightarrow:\"⇔\",leftrightarrow:\"↔\",leftrightarrows:\"⇆\",leftrightharpoons:\"⇋\",leftrightsquigarrow:\"↭\",LeftRightVector:\"⥎\",LeftTee:\"⊣\",LeftTeeArrow:\"↤\",LeftTeeVector:\"⥚\",leftthreetimes:\"⋋\",LeftTriangle:\"⊲\",LeftTriangleBar:\"⧏\",LeftTriangleEqual:\"⊴\",LeftUpDownVector:\"⥑\",LeftUpTeeVector:\"⥠\",LeftUpVector:\"↿\",LeftUpVectorBar:\"⥘\",LeftVector:\"↼\",LeftVectorBar:\"⥒\",lEg:\"⪋\",leg:\"⋚\",leq:\"≤\",leqq:\"≦\",leqslant:\"⩽\",les:\"⩽\",lescc:\"⪨\",lesdot:\"⩿\",lesdoto:\"⪁\",lesdotor:\"⪃\",lesg:\"⋚︀\",lesges:\"⪓\",lessapprox:\"⪅\",lessdot:\"⋖\",lesseqgtr:\"⋚\",lesseqqgtr:\"⪋\",LessEqualGreater:\"⋚\",LessFullEqual:\"≦\",LessGreater:\"≶\",lessgtr:\"≶\",LessLess:\"⪡\",lesssim:\"≲\",LessSlantEqual:\"⩽\",LessTilde:\"≲\",lfisht:\"⥼\",lfloor:\"⌊\",Lfr:\"𝔏\",lfr:\"𝔩\",lg:\"≶\",lgE:\"⪑\",lHar:\"⥢\",lhard:\"↽\",lharu:\"↼\",lharul:\"⥪\",lhblk:\"▄\",LJcy:\"Љ\",ljcy:\"љ\",Ll:\"⋘\",ll:\"≪\",llarr:\"⇇\",llcorner:\"⌞\",Lleftarrow:\"⇚\",llhard:\"⥫\",lltri:\"◺\",Lmidot:\"Ŀ\",lmidot:\"ŀ\",lmoust:\"⎰\",lmoustache:\"⎰\",lnap:\"⪉\",lnapprox:\"⪉\",lnE:\"≨\",lne:\"⪇\",lneq:\"⪇\",lneqq:\"≨\",lnsim:\"⋦\",loang:\"⟬\",loarr:\"⇽\",lobrk:\"⟦\",LongLeftArrow:\"⟵\",Longleftarrow:\"⟸\",longleftarrow:\"⟵\",LongLeftRightArrow:\"⟷\",Longleftrightarrow:\"⟺\",longleftrightarrow:\"⟷\",longmapsto:\"⟼\",LongRightArrow:\"⟶\",Longrightarrow:\"⟹\",longrightarrow:\"⟶\",looparrowleft:\"↫\",looparrowright:\"↬\",lopar:\"⦅\",Lopf:\"𝕃\",lopf:\"𝕝\",loplus:\"⨭\",lotimes:\"⨴\",lowast:\"∗\",lowbar:\"_\",LowerLeftArrow:\"↙\",LowerRightArrow:\"↘\",loz:\"◊\",lozenge:\"◊\",lozf:\"⧫\",lpar:\"(\",lparlt:\"⦓\",lrarr:\"⇆\",lrcorner:\"⌟\",lrhar:\"⇋\",lrhard:\"⥭\",lrm:\"\",lrtri:\"⊿\",lsaquo:\"‹\",Lscr:\"ℒ\",lscr:\"𝓁\",Lsh:\"↰\",lsh:\"↰\",lsim:\"≲\",lsime:\"⪍\",lsimg:\"⪏\",lsqb:\"[\",lsquo:\"‘\",lsquor:\"‚\",Lstrok:\"Ł\",lstrok:\"ł\",LT:\"<\",Lt:\"≪\",lt:\"<\",ltcc:\"⪦\",ltcir:\"⩹\",ltdot:\"⋖\",lthree:\"⋋\",ltimes:\"⋉\",ltlarr:\"⥶\",ltquest:\"⩻\",ltri:\"◃\",ltrie:\"⊴\",ltrif:\"◂\",ltrPar:\"⦖\",lurdshar:\"⥊\",luruhar:\"⥦\",lvertneqq:\"≨︀\",lvnE:\"≨︀\",macr:\"¯\",male:\"♂\",malt:\"✠\",maltese:\"✠\",Map:\"⤅\",map:\"↦\",mapsto:\"↦\",mapstodown:\"↧\",mapstoleft:\"↤\",mapstoup:\"↥\",marker:\"▮\",mcomma:\"⨩\",Mcy:\"М\",mcy:\"м\",mdash:\"—\",mDDot:\"∺\",measuredangle:\"∡\",MediumSpace:\" \",Mellintrf:\"ℳ\",Mfr:\"𝔐\",mfr:\"𝔪\",mho:\"℧\",micro:\"µ\",mid:\"∣\",midast:\"*\",midcir:\"⫰\",middot:\"·\",minus:\"−\",minusb:\"⊟\",minusd:\"∸\",minusdu:\"⨪\",MinusPlus:\"∓\",mlcp:\"⫛\",mldr:\"…\",mnplus:\"∓\",models:\"⊧\",Mopf:\"𝕄\",mopf:\"𝕞\",mp:\"∓\",Mscr:\"ℳ\",mscr:\"𝓂\",mstpos:\"∾\",Mu:\"Μ\",mu:\"μ\",multimap:\"⊸\",mumap:\"⊸\",nabla:\"∇\",Nacute:\"Ń\",nacute:\"ń\",nang:\"∠⃒\",nap:\"≉\",napE:\"⩰̸\",napid:\"≋̸\",napos:\"ʼn\",napprox:\"≉\",natur:\"♮\",natural:\"♮\",naturals:\"ℕ\",nbsp:\" \",nbump:\"≎̸\",nbumpe:\"≏̸\",ncap:\"⩃\",Ncaron:\"Ň\",ncaron:\"ň\",Ncedil:\"Ņ\",ncedil:\"ņ\",ncong:\"≇\",ncongdot:\"⩭̸\",ncup:\"⩂\",Ncy:\"Н\",ncy:\"н\",ndash:\"–\",ne:\"≠\",nearhk:\"⤤\",neArr:\"⇗\",nearr:\"↗\",nearrow:\"↗\",nedot:\"≐̸\",NegativeMediumSpace:\"\",NegativeThickSpace:\"\",NegativeThinSpace:\"\",NegativeVeryThinSpace:\"\",nequiv:\"≢\",nesear:\"⤨\",nesim:\"≂̸\",NestedGreaterGreater:\"≫\",NestedLessLess:\"≪\",NewLine:\"\\n\",nexist:\"∄\",nexists:\"∄\",Nfr:\"𝔑\",nfr:\"𝔫\",ngE:\"≧̸\",nge:\"≱\",ngeq:\"≱\",ngeqq:\"≧̸\",ngeqslant:\"⩾̸\",nges:\"⩾̸\",nGg:\"⋙̸\",ngsim:\"≵\",nGt:\"≫⃒\",ngt:\"≯\",ngtr:\"≯\",nGtv:\"≫̸\",nhArr:\"⇎\",nharr:\"↮\",nhpar:\"⫲\",ni:\"∋\",nis:\"⋼\",nisd:\"⋺\",niv:\"∋\",NJcy:\"Њ\",njcy:\"њ\",nlArr:\"⇍\",nlarr:\"↚\",nldr:\"‥\",nlE:\"≦̸\",nle:\"≰\",nLeftarrow:\"⇍\",nleftarrow:\"↚\",nLeftrightarrow:\"⇎\",nleftrightarrow:\"↮\",nleq:\"≰\",nleqq:\"≦̸\",nleqslant:\"⩽̸\",nles:\"⩽̸\",nless:\"≮\",nLl:\"⋘̸\",nlsim:\"≴\",nLt:\"≪⃒\",nlt:\"≮\",nltri:\"⋪\",nltrie:\"⋬\",nLtv:\"≪̸\",nmid:\"∤\",NoBreak:\"\",NonBreakingSpace:\" \",Nopf:\"ℕ\",nopf:\"𝕟\",Not:\"⫬\",not:\"¬\",NotCongruent:\"≢\",NotCupCap:\"≭\",NotDoubleVerticalBar:\"∦\",NotElement:\"∉\",NotEqual:\"≠\",NotEqualTilde:\"≂̸\",NotExists:\"∄\",NotGreater:\"≯\",NotGreaterEqual:\"≱\",NotGreaterFullEqual:\"≧̸\",NotGreaterGreater:\"≫̸\",NotGreaterLess:\"≹\",NotGreaterSlantEqual:\"⩾̸\",NotGreaterTilde:\"≵\",NotHumpDownHump:\"≎̸\",NotHumpEqual:\"≏̸\",notin:\"∉\",notindot:\"⋵̸\",notinE:\"⋹̸\",notinva:\"∉\",notinvb:\"⋷\",notinvc:\"⋶\",NotLeftTriangle:\"⋪\",NotLeftTriangleBar:\"⧏̸\",NotLeftTriangleEqual:\"⋬\",NotLess:\"≮\",NotLessEqual:\"≰\",NotLessGreater:\"≸\",NotLessLess:\"≪̸\",NotLessSlantEqual:\"⩽̸\",NotLessTilde:\"≴\",NotNestedGreaterGreater:\"⪢̸\",NotNestedLessLess:\"⪡̸\",notni:\"∌\",notniva:\"∌\",notnivb:\"⋾\",notnivc:\"⋽\",NotPrecedes:\"⊀\",NotPrecedesEqual:\"⪯̸\",NotPrecedesSlantEqual:\"⋠\",NotReverseElement:\"∌\",NotRightTriangle:\"⋫\",NotRightTriangleBar:\"⧐̸\",NotRightTriangleEqual:\"⋭\",NotSquareSubset:\"⊏̸\",NotSquareSubsetEqual:\"⋢\",NotSquareSuperset:\"⊐̸\",NotSquareSupersetEqual:\"⋣\",NotSubset:\"⊂⃒\",NotSubsetEqual:\"⊈\",NotSucceeds:\"⊁\",NotSucceedsEqual:\"⪰̸\",NotSucceedsSlantEqual:\"⋡\",NotSucceedsTilde:\"≿̸\",NotSuperset:\"⊃⃒\",NotSupersetEqual:\"⊉\",NotTilde:\"≁\",NotTildeEqual:\"≄\",NotTildeFullEqual:\"≇\",NotTildeTilde:\"≉\",NotVerticalBar:\"∤\",npar:\"∦\",nparallel:\"∦\",nparsl:\"⫽⃥\",npart:\"∂̸\",npolint:\"⨔\",npr:\"⊀\",nprcue:\"⋠\",npre:\"⪯̸\",nprec:\"⊀\",npreceq:\"⪯̸\",nrArr:\"⇏\",nrarr:\"↛\",nrarrc:\"⤳̸\",nrarrw:\"↝̸\",nRightarrow:\"⇏\",nrightarrow:\"↛\",nrtri:\"⋫\",nrtrie:\"⋭\",nsc:\"⊁\",nsccue:\"⋡\",nsce:\"⪰̸\",Nscr:\"𝒩\",nscr:\"𝓃\",nshortmid:\"∤\",nshortparallel:\"∦\",nsim:\"≁\",nsime:\"≄\",nsimeq:\"≄\",nsmid:\"∤\",nspar:\"∦\",nsqsube:\"⋢\",nsqsupe:\"⋣\",nsub:\"⊄\",nsubE:\"⫅̸\",nsube:\"⊈\",nsubset:\"⊂⃒\",nsubseteq:\"⊈\",nsubseteqq:\"⫅̸\",nsucc:\"⊁\",nsucceq:\"⪰̸\",nsup:\"⊅\",nsupE:\"⫆̸\",nsupe:\"⊉\",nsupset:\"⊃⃒\",nsupseteq:\"⊉\",nsupseteqq:\"⫆̸\",ntgl:\"≹\",Ntilde:\"Ñ\",ntilde:\"ñ\",ntlg:\"≸\",ntriangleleft:\"⋪\",ntrianglelefteq:\"⋬\",ntriangleright:\"⋫\",ntrianglerighteq:\"⋭\",Nu:\"Ν\",nu:\"ν\",num:\"#\",numero:\"№\",numsp:\" \",nvap:\"≍⃒\",nVDash:\"⊯\",nVdash:\"⊮\",nvDash:\"⊭\",nvdash:\"⊬\",nvge:\"≥⃒\",nvgt:\">⃒\",nvHarr:\"⤄\",nvinfin:\"⧞\",nvlArr:\"⤂\",nvle:\"≤⃒\",nvlt:\"<⃒\",nvltrie:\"⊴⃒\",nvrArr:\"⤃\",nvrtrie:\"⊵⃒\",nvsim:\"∼⃒\",nwarhk:\"⤣\",nwArr:\"⇖\",nwarr:\"↖\",nwarrow:\"↖\",nwnear:\"⤧\",Oacute:\"Ó\",oacute:\"ó\",oast:\"⊛\",ocir:\"⊚\",Ocirc:\"Ô\",ocirc:\"ô\",Ocy:\"О\",ocy:\"о\",odash:\"⊝\",Odblac:\"Ő\",odblac:\"ő\",odiv:\"⨸\",odot:\"⊙\",odsold:\"⦼\",OElig:\"Œ\",oelig:\"œ\",ofcir:\"⦿\",Ofr:\"𝔒\",ofr:\"𝔬\",ogon:\"˛\",Ograve:\"Ò\",ograve:\"ò\",ogt:\"⧁\",ohbar:\"⦵\",ohm:\"Ω\",oint:\"∮\",olarr:\"↺\",olcir:\"⦾\",olcross:\"⦻\",oline:\"‾\",olt:\"⧀\",Omacr:\"Ō\",omacr:\"ō\",Omega:\"Ω\",omega:\"ω\",Omicron:\"Ο\",omicron:\"ο\",omid:\"⦶\",ominus:\"⊖\",Oopf:\"𝕆\",oopf:\"𝕠\",opar:\"⦷\",OpenCurlyDoubleQuote:\"“\",OpenCurlyQuote:\"‘\",operp:\"⦹\",oplus:\"⊕\",Or:\"⩔\",or:\"∨\",orarr:\"↻\",ord:\"⩝\",order:\"ℴ\",orderof:\"ℴ\",ordf:\"ª\",ordm:\"º\",origof:\"⊶\",oror:\"⩖\",orslope:\"⩗\",orv:\"⩛\",oS:\"Ⓢ\",Oscr:\"𝒪\",oscr:\"ℴ\",Oslash:\"Ø\",oslash:\"ø\",osol:\"⊘\",Otilde:\"Õ\",otilde:\"õ\",Otimes:\"⨷\",otimes:\"⊗\",otimesas:\"⨶\",Ouml:\"Ö\",ouml:\"ö\",ovbar:\"⌽\",OverBar:\"‾\",OverBrace:\"⏞\",OverBracket:\"⎴\",OverParenthesis:\"⏜\",par:\"∥\",para:\"¶\",parallel:\"∥\",parsim:\"⫳\",parsl:\"⫽\",part:\"∂\",PartialD:\"∂\",Pcy:\"П\",pcy:\"п\",percnt:\"%\",period:\".\",permil:\"‰\",perp:\"⊥\",pertenk:\"‱\",Pfr:\"𝔓\",pfr:\"𝔭\",Phi:\"Φ\",phi:\"φ\",phiv:\"ϕ\",phmmat:\"ℳ\",phone:\"☎\",Pi:\"Π\",pi:\"π\",pitchfork:\"⋔\",piv:\"ϖ\",planck:\"ℏ\",planckh:\"ℎ\",plankv:\"ℏ\",plus:\"+\",plusacir:\"⨣\",plusb:\"⊞\",pluscir:\"⨢\",plusdo:\"∔\",plusdu:\"⨥\",pluse:\"⩲\",PlusMinus:\"±\",plusmn:\"±\",plussim:\"⨦\",plustwo:\"⨧\",pm:\"±\",Poincareplane:\"ℌ\",pointint:\"⨕\",Popf:\"ℙ\",popf:\"𝕡\",pound:\"£\",Pr:\"⪻\",pr:\"≺\",prap:\"⪷\",prcue:\"≼\",prE:\"⪳\",pre:\"⪯\",prec:\"≺\",precapprox:\"⪷\",preccurlyeq:\"≼\",Precedes:\"≺\",PrecedesEqual:\"⪯\",PrecedesSlantEqual:\"≼\",PrecedesTilde:\"≾\",preceq:\"⪯\",precnapprox:\"⪹\",precneqq:\"⪵\",precnsim:\"⋨\",precsim:\"≾\",Prime:\"″\",prime:\"′\",primes:\"ℙ\",prnap:\"⪹\",prnE:\"⪵\",prnsim:\"⋨\",prod:\"∏\",Product:\"∏\",profalar:\"⌮\",profline:\"⌒\",profsurf:\"⌓\",prop:\"∝\",Proportion:\"∷\",Proportional:\"∝\",propto:\"∝\",prsim:\"≾\",prurel:\"⊰\",Pscr:\"𝒫\",pscr:\"𝓅\",Psi:\"Ψ\",psi:\"ψ\",puncsp:\" \",Qfr:\"𝔔\",qfr:\"𝔮\",qint:\"⨌\",Qopf:\"ℚ\",qopf:\"𝕢\",qprime:\"⁗\",Qscr:\"𝒬\",qscr:\"𝓆\",quaternions:\"ℍ\",quatint:\"⨖\",quest:\"?\",questeq:\"≟\",QUOT:'\"',quot:'\"',rAarr:\"⇛\",race:\"∽̱\",Racute:\"Ŕ\",racute:\"ŕ\",radic:\"√\",raemptyv:\"⦳\",Rang:\"⟫\",rang:\"⟩\",rangd:\"⦒\",range:\"⦥\",rangle:\"⟩\",raquo:\"»\",Rarr:\"↠\",rArr:\"⇒\",rarr:\"→\",rarrap:\"⥵\",rarrb:\"⇥\",rarrbfs:\"⤠\",rarrc:\"⤳\",rarrfs:\"⤞\",rarrhk:\"↪\",rarrlp:\"↬\",rarrpl:\"⥅\",rarrsim:\"⥴\",Rarrtl:\"⤖\",rarrtl:\"↣\",rarrw:\"↝\",rAtail:\"⤜\",ratail:\"⤚\",ratio:\"∶\",rationals:\"ℚ\",RBarr:\"⤐\",rBarr:\"⤏\",rbarr:\"⤍\",rbbrk:\"❳\",rbrace:\"}\",rbrack:\"]\",rbrke:\"⦌\",rbrksld:\"⦎\",rbrkslu:\"⦐\",Rcaron:\"Ř\",rcaron:\"ř\",Rcedil:\"Ŗ\",rcedil:\"ŗ\",rceil:\"⌉\",rcub:\"}\",Rcy:\"Р\",rcy:\"р\",rdca:\"⤷\",rdldhar:\"⥩\",rdquo:\"”\",rdquor:\"”\",rdsh:\"↳\",Re:\"ℜ\",real:\"ℜ\",realine:\"ℛ\",realpart:\"ℜ\",reals:\"ℝ\",rect:\"▭\",REG:\"®\",reg:\"®\",ReverseElement:\"∋\",ReverseEquilibrium:\"⇋\",ReverseUpEquilibrium:\"⥯\",rfisht:\"⥽\",rfloor:\"⌋\",Rfr:\"ℜ\",rfr:\"𝔯\",rHar:\"⥤\",rhard:\"⇁\",rharu:\"⇀\",rharul:\"⥬\",Rho:\"Ρ\",rho:\"ρ\",rhov:\"ϱ\",RightAngleBracket:\"⟩\",RightArrow:\"→\",Rightarrow:\"⇒\",rightarrow:\"→\",RightArrowBar:\"⇥\",RightArrowLeftArrow:\"⇄\",rightarrowtail:\"↣\",RightCeiling:\"⌉\",RightDoubleBracket:\"⟧\",RightDownTeeVector:\"⥝\",RightDownVector:\"⇂\",RightDownVectorBar:\"⥕\",RightFloor:\"⌋\",rightharpoondown:\"⇁\",rightharpoonup:\"⇀\",rightleftarrows:\"⇄\",rightleftharpoons:\"⇌\",rightrightarrows:\"⇉\",rightsquigarrow:\"↝\",RightTee:\"⊢\",RightTeeArrow:\"↦\",RightTeeVector:\"⥛\",rightthreetimes:\"⋌\",RightTriangle:\"⊳\",RightTriangleBar:\"⧐\",RightTriangleEqual:\"⊵\",RightUpDownVector:\"⥏\",RightUpTeeVector:\"⥜\",RightUpVector:\"↾\",RightUpVectorBar:\"⥔\",RightVector:\"⇀\",RightVectorBar:\"⥓\",ring:\"˚\",risingdotseq:\"≓\",rlarr:\"⇄\",rlhar:\"⇌\",rlm:\"\",rmoust:\"⎱\",rmoustache:\"⎱\",rnmid:\"⫮\",roang:\"⟭\",roarr:\"⇾\",robrk:\"⟧\",ropar:\"⦆\",Ropf:\"ℝ\",ropf:\"𝕣\",roplus:\"⨮\",rotimes:\"⨵\",RoundImplies:\"⥰\",rpar:\")\",rpargt:\"⦔\",rppolint:\"⨒\",rrarr:\"⇉\",Rrightarrow:\"⇛\",rsaquo:\"›\",Rscr:\"ℛ\",rscr:\"𝓇\",Rsh:\"↱\",rsh:\"↱\",rsqb:\"]\",rsquo:\"’\",rsquor:\"’\",rthree:\"⋌\",rtimes:\"⋊\",rtri:\"▹\",rtrie:\"⊵\",rtrif:\"▸\",rtriltri:\"⧎\",RuleDelayed:\"⧴\",ruluhar:\"⥨\",rx:\"℞\",Sacute:\"Ś\",sacute:\"ś\",sbquo:\"‚\",Sc:\"⪼\",sc:\"≻\",scap:\"⪸\",Scaron:\"Š\",scaron:\"š\",sccue:\"≽\",scE:\"⪴\",sce:\"⪰\",Scedil:\"Ş\",scedil:\"ş\",Scirc:\"Ŝ\",scirc:\"ŝ\",scnap:\"⪺\",scnE:\"⪶\",scnsim:\"⋩\",scpolint:\"⨓\",scsim:\"≿\",Scy:\"С\",scy:\"с\",sdot:\"⋅\",sdotb:\"⊡\",sdote:\"⩦\",searhk:\"⤥\",seArr:\"⇘\",searr:\"↘\",searrow:\"↘\",sect:\"§\",semi:\";\",seswar:\"⤩\",setminus:\"∖\",setmn:\"∖\",sext:\"✶\",Sfr:\"𝔖\",sfr:\"𝔰\",sfrown:\"⌢\",sharp:\"♯\",SHCHcy:\"Щ\",shchcy:\"щ\",SHcy:\"Ш\",shcy:\"ш\",ShortDownArrow:\"↓\",ShortLeftArrow:\"←\",shortmid:\"∣\",shortparallel:\"∥\",ShortRightArrow:\"→\",ShortUpArrow:\"↑\",shy:\"\",Sigma:\"Σ\",sigma:\"σ\",sigmaf:\"ς\",sigmav:\"ς\",sim:\"∼\",simdot:\"⩪\",sime:\"≃\",simeq:\"≃\",simg:\"⪞\",simgE:\"⪠\",siml:\"⪝\",simlE:\"⪟\",simne:\"≆\",simplus:\"⨤\",simrarr:\"⥲\",slarr:\"←\",SmallCircle:\"∘\",smallsetminus:\"∖\",smashp:\"⨳\",smeparsl:\"⧤\",smid:\"∣\",smile:\"⌣\",smt:\"⪪\",smte:\"⪬\",smtes:\"⪬︀\",SOFTcy:\"Ь\",softcy:\"ь\",sol:\"/\",solb:\"⧄\",solbar:\"⌿\",Sopf:\"𝕊\",sopf:\"𝕤\",spades:\"♠\",spadesuit:\"♠\",spar:\"∥\",sqcap:\"⊓\",sqcaps:\"⊓︀\",sqcup:\"⊔\",sqcups:\"⊔︀\",Sqrt:\"√\",sqsub:\"⊏\",sqsube:\"⊑\",sqsubset:\"⊏\",sqsubseteq:\"⊑\",sqsup:\"⊐\",sqsupe:\"⊒\",sqsupset:\"⊐\",sqsupseteq:\"⊒\",squ:\"□\",Square:\"□\",square:\"□\",SquareIntersection:\"⊓\",SquareSubset:\"⊏\",SquareSubsetEqual:\"⊑\",SquareSuperset:\"⊐\",SquareSupersetEqual:\"⊒\",SquareUnion:\"⊔\",squarf:\"▪\",squf:\"▪\",srarr:\"→\",Sscr:\"𝒮\",sscr:\"𝓈\",ssetmn:\"∖\",ssmile:\"⌣\",sstarf:\"⋆\",Star:\"⋆\",star:\"☆\",starf:\"★\",straightepsilon:\"ϵ\",straightphi:\"ϕ\",strns:\"¯\",Sub:\"⋐\",sub:\"⊂\",subdot:\"⪽\",subE:\"⫅\",sube:\"⊆\",subedot:\"⫃\",submult:\"⫁\",subnE:\"⫋\",subne:\"⊊\",subplus:\"⪿\",subrarr:\"⥹\",Subset:\"⋐\",subset:\"⊂\",subseteq:\"⊆\",subseteqq:\"⫅\",SubsetEqual:\"⊆\",subsetneq:\"⊊\",subsetneqq:\"⫋\",subsim:\"⫇\",subsub:\"⫕\",subsup:\"⫓\",succ:\"≻\",succapprox:\"⪸\",succcurlyeq:\"≽\",Succeeds:\"≻\",SucceedsEqual:\"⪰\",SucceedsSlantEqual:\"≽\",SucceedsTilde:\"≿\",succeq:\"⪰\",succnapprox:\"⪺\",succneqq:\"⪶\",succnsim:\"⋩\",succsim:\"≿\",SuchThat:\"∋\",Sum:\"∑\",sum:\"∑\",sung:\"♪\",Sup:\"⋑\",sup:\"⊃\",sup1:\"¹\",sup2:\"²\",sup3:\"³\",supdot:\"⪾\",supdsub:\"⫘\",supE:\"⫆\",supe:\"⊇\",supedot:\"⫄\",Superset:\"⊃\",SupersetEqual:\"⊇\",suphsol:\"⟉\",suphsub:\"⫗\",suplarr:\"⥻\",supmult:\"⫂\",supnE:\"⫌\",supne:\"⊋\",supplus:\"⫀\",Supset:\"⋑\",supset:\"⊃\",supseteq:\"⊇\",supseteqq:\"⫆\",supsetneq:\"⊋\",supsetneqq:\"⫌\",supsim:\"⫈\",supsub:\"⫔\",supsup:\"⫖\",swarhk:\"⤦\",swArr:\"⇙\",swarr:\"↙\",swarrow:\"↙\",swnwar:\"⤪\",szlig:\"ß\",Tab:\"\\t\",target:\"⌖\",Tau:\"Τ\",tau:\"τ\",tbrk:\"⎴\",Tcaron:\"Ť\",tcaron:\"ť\",Tcedil:\"Ţ\",tcedil:\"ţ\",Tcy:\"Т\",tcy:\"т\",tdot:\"⃛\",telrec:\"⌕\",Tfr:\"𝔗\",tfr:\"𝔱\",there4:\"∴\",Therefore:\"∴\",therefore:\"∴\",Theta:\"Θ\",theta:\"θ\",thetasym:\"ϑ\",thetav:\"ϑ\",thickapprox:\"≈\",thicksim:\"∼\",ThickSpace:\" \",thinsp:\" \",ThinSpace:\" \",thkap:\"≈\",thksim:\"∼\",THORN:\"Þ\",thorn:\"þ\",Tilde:\"∼\",tilde:\"˜\",TildeEqual:\"≃\",TildeFullEqual:\"≅\",TildeTilde:\"≈\",times:\"×\",timesb:\"⊠\",timesbar:\"⨱\",timesd:\"⨰\",tint:\"∭\",toea:\"⤨\",top:\"⊤\",topbot:\"⌶\",topcir:\"⫱\",Topf:\"𝕋\",topf:\"𝕥\",topfork:\"⫚\",tosa:\"⤩\",tprime:\"‴\",TRADE:\"™\",trade:\"™\",triangle:\"▵\",triangledown:\"▿\",triangleleft:\"◃\",trianglelefteq:\"⊴\",triangleq:\"≜\",triangleright:\"▹\",trianglerighteq:\"⊵\",tridot:\"◬\",trie:\"≜\",triminus:\"⨺\",TripleDot:\"⃛\",triplus:\"⨹\",trisb:\"⧍\",tritime:\"⨻\",trpezium:\"⏢\",Tscr:\"𝒯\",tscr:\"𝓉\",TScy:\"Ц\",tscy:\"ц\",TSHcy:\"Ћ\",tshcy:\"ћ\",Tstrok:\"Ŧ\",tstrok:\"ŧ\",twixt:\"≬\",twoheadleftarrow:\"↞\",twoheadrightarrow:\"↠\",Uacute:\"Ú\",uacute:\"ú\",Uarr:\"↟\",uArr:\"⇑\",uarr:\"↑\",Uarrocir:\"⥉\",Ubrcy:\"Ў\",ubrcy:\"ў\",Ubreve:\"Ŭ\",ubreve:\"ŭ\",Ucirc:\"Û\",ucirc:\"û\",Ucy:\"У\",ucy:\"у\",udarr:\"⇅\",Udblac:\"Ű\",udblac:\"ű\",udhar:\"⥮\",ufisht:\"⥾\",Ufr:\"𝔘\",ufr:\"𝔲\",Ugrave:\"Ù\",ugrave:\"ù\",uHar:\"⥣\",uharl:\"↿\",uharr:\"↾\",uhblk:\"▀\",ulcorn:\"⌜\",ulcorner:\"⌜\",ulcrop:\"⌏\",ultri:\"◸\",Umacr:\"Ū\",umacr:\"ū\",uml:\"¨\",UnderBar:\"_\",UnderBrace:\"⏟\",UnderBracket:\"⎵\",UnderParenthesis:\"⏝\",Union:\"⋃\",UnionPlus:\"⊎\",Uogon:\"Ų\",uogon:\"ų\",Uopf:\"𝕌\",uopf:\"𝕦\",UpArrow:\"↑\",Uparrow:\"⇑\",uparrow:\"↑\",UpArrowBar:\"⤒\",UpArrowDownArrow:\"⇅\",UpDownArrow:\"↕\",Updownarrow:\"⇕\",updownarrow:\"↕\",UpEquilibrium:\"⥮\",upharpoonleft:\"↿\",upharpoonright:\"↾\",uplus:\"⊎\",UpperLeftArrow:\"↖\",UpperRightArrow:\"↗\",Upsi:\"ϒ\",upsi:\"υ\",upsih:\"ϒ\",Upsilon:\"Υ\",upsilon:\"υ\",UpTee:\"⊥\",UpTeeArrow:\"↥\",upuparrows:\"⇈\",urcorn:\"⌝\",urcorner:\"⌝\",urcrop:\"⌎\",Uring:\"Ů\",uring:\"ů\",urtri:\"◹\",Uscr:\"𝒰\",uscr:\"𝓊\",utdot:\"⋰\",Utilde:\"Ũ\",utilde:\"ũ\",utri:\"▵\",utrif:\"▴\",uuarr:\"⇈\",Uuml:\"Ü\",uuml:\"ü\",uwangle:\"⦧\",vangrt:\"⦜\",varepsilon:\"ϵ\",varkappa:\"ϰ\",varnothing:\"∅\",varphi:\"ϕ\",varpi:\"ϖ\",varpropto:\"∝\",vArr:\"⇕\",varr:\"↕\",varrho:\"ϱ\",varsigma:\"ς\",varsubsetneq:\"⊊︀\",varsubsetneqq:\"⫋︀\",varsupsetneq:\"⊋︀\",varsupsetneqq:\"⫌︀\",vartheta:\"ϑ\",vartriangleleft:\"⊲\",vartriangleright:\"⊳\",Vbar:\"⫫\",vBar:\"⫨\",vBarv:\"⫩\",Vcy:\"В\",vcy:\"в\",VDash:\"⊫\",Vdash:\"⊩\",vDash:\"⊨\",vdash:\"⊢\",Vdashl:\"⫦\",Vee:\"⋁\",vee:\"∨\",veebar:\"⊻\",veeeq:\"≚\",vellip:\"⋮\",Verbar:\"‖\",verbar:\"|\",Vert:\"‖\",vert:\"|\",VerticalBar:\"∣\",VerticalLine:\"|\",VerticalSeparator:\"❘\",VerticalTilde:\"≀\",VeryThinSpace:\" \",Vfr:\"𝔙\",vfr:\"𝔳\",vltri:\"⊲\",vnsub:\"⊂⃒\",vnsup:\"⊃⃒\",Vopf:\"𝕍\",vopf:\"𝕧\",vprop:\"∝\",vrtri:\"⊳\",Vscr:\"𝒱\",vscr:\"𝓋\",vsubnE:\"⫋︀\",vsubne:\"⊊︀\",vsupnE:\"⫌︀\",vsupne:\"⊋︀\",Vvdash:\"⊪\",vzigzag:\"⦚\",Wcirc:\"Ŵ\",wcirc:\"ŵ\",wedbar:\"⩟\",Wedge:\"⋀\",wedge:\"∧\",wedgeq:\"≙\",weierp:\"℘\",Wfr:\"𝔚\",wfr:\"𝔴\",Wopf:\"𝕎\",wopf:\"𝕨\",wp:\"℘\",wr:\"≀\",wreath:\"≀\",Wscr:\"𝒲\",wscr:\"𝓌\",xcap:\"⋂\",xcirc:\"◯\",xcup:\"⋃\",xdtri:\"▽\",Xfr:\"𝔛\",xfr:\"𝔵\",xhArr:\"⟺\",xharr:\"⟷\",Xi:\"Ξ\",xi:\"ξ\",xlArr:\"⟸\",xlarr:\"⟵\",xmap:\"⟼\",xnis:\"⋻\",xodot:\"⨀\",Xopf:\"𝕏\",xopf:\"𝕩\",xoplus:\"⨁\",xotime:\"⨂\",xrArr:\"⟹\",xrarr:\"⟶\",Xscr:\"𝒳\",xscr:\"𝓍\",xsqcup:\"⨆\",xuplus:\"⨄\",xutri:\"△\",xvee:\"⋁\",xwedge:\"⋀\",Yacute:\"Ý\",yacute:\"ý\",YAcy:\"Я\",yacy:\"я\",Ycirc:\"Ŷ\",ycirc:\"ŷ\",Ycy:\"Ы\",ycy:\"ы\",yen:\"¥\",Yfr:\"𝔜\",yfr:\"𝔶\",YIcy:\"Ї\",yicy:\"ї\",Yopf:\"𝕐\",yopf:\"𝕪\",Yscr:\"𝒴\",yscr:\"𝓎\",YUcy:\"Ю\",yucy:\"ю\",Yuml:\"Ÿ\",yuml:\"ÿ\",Zacute:\"Ź\",zacute:\"ź\",Zcaron:\"Ž\",zcaron:\"ž\",Zcy:\"З\",zcy:\"з\",Zdot:\"Ż\",zdot:\"ż\",zeetrf:\"ℨ\",ZeroWidthSpace:\"\",Zeta:\"Ζ\",zeta:\"ζ\",Zfr:\"ℨ\",zfr:\"𝔷\",ZHcy:\"Ж\",zhcy:\"ж\",zigrarr:\"⇝\",Zopf:\"ℤ\",zopf:\"𝕫\",Zscr:\"𝒵\",zscr:\"𝓏\",zwj:\"\",zwnj:\"\"},r=Object.prototype.hasOwnProperty;function n(e){return o=e,(n=t)&&r.call(n,o)?t[e]:e;var n,o}var o=Object.prototype.hasOwnProperty;function s(e,t){return!!e&&o.call(e,t)}function i(e){return[].slice.call(arguments,1).forEach(function(t){if(t){if(\"object\"!=typeof t)throw new TypeError(t+\"must be object\");Object.keys(t).forEach(function(r){e[r]=t[r]})}}),e}var a=/\\\\([\\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;function u(e){return e.indexOf(\"\\\\\")<0?e:e.replace(a,\"$1\")}function l(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function c(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}var p=/&([a-z#][a-z0-9]{1,31});/gi,h=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;function f(e,t){var r=0,o=n(t);return t!==o?o:35===t.charCodeAt(0)&&h.test(t)&&l(r=\"x\"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10))?c(r):e}function g(e){return e.indexOf(\"&\")<0?e:e.replace(p,f)}var d=/[&<>\"]/,m=/[&<>\"]/g,b={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\"};function v(e){return b[e]}function k(e){return d.test(e)?e.replace(m,v):e}var A=Object.freeze({isString:function(e){return\"[object String]\"===function(e){return Object.prototype.toString.call(e)}(e)},has:s,assign:i,unescapeMd:u,isValidEntityCode:l,fromCodePoint:c,replaceEntities:g,escapeHtml:k}),y={};y.blockquote_open=function(){return\"<blockquote>\\n\"},y.blockquote_close=function(e,t){return\"</blockquote>\"+x(e,t)},y.code=function(e,t){return e[t].block?\"<pre><code>\"+k(e[t].content)+\"</code></pre>\"+x(e,t):\"<code>\"+k(e[t].content)+\"</code>\"},y.fence=function(e,t,r,n,o){var i,a,l=e[t],c=\"\",p=r.langPrefix;if(l.params){if(a=(i=l.params.split(/\\s+/g)).join(\" \"),s(o.rules.fence_custom,i[0]))return o.rules.fence_custom[i[0]](e,t,r,n,o);c=' class=\"'+p+k(g(u(a)))+'\"'}return\"<pre><code\"+c+\">\"+(r.highlight&&r.highlight.apply(r.highlight,[l.content].concat(i))||k(l.content))+\"</code></pre>\"+x(e,t)},y.fence_custom={},y.heading_open=function(e,t){return\"<h\"+e[t].hLevel+\">\"},y.heading_close=function(e,t){return\"</h\"+e[t].hLevel+\">\\n\"},y.hr=function(e,t,r){return(r.xhtmlOut?\"<hr />\":\"<hr>\")+x(e,t)},y.bullet_list_open=function(){return\"<ul>\\n\"},y.bullet_list_close=function(e,t){return\"</ul>\"+x(e,t)},y.list_item_open=function(){return\"<li>\"},y.list_item_close=function(){return\"</li>\\n\"},y.ordered_list_open=function(e,t){var r=e[t];return\"<ol\"+(r.order>1?' start=\"'+r.order+'\"':\"\")+\">\\n\"},y.ordered_list_close=function(e,t){return\"</ol>\"+x(e,t)},y.paragraph_open=function(e,t){return e[t].tight?\"\":\"<p>\"},y.paragraph_close=function(e,t){var r=!(e[t].tight&&t&&\"inline\"===e[t-1].type&&!e[t-1].content);return(e[t].tight?\"\":\"</p>\")+(r?x(e,t):\"\")},y.link_open=function(e,t,r){var n=e[t].title?' title=\"'+k(g(e[t].title))+'\"':\"\",o=r.linkTarget?' target=\"'+r.linkTarget+'\"':\"\";return'<a href=\"'+k(e[t].href)+'\"'+n+o+\">\"},y.link_close=function(){return\"</a>\"},y.image=function(e,t,r){var n=' src=\"'+k(e[t].src)+'\"',o=e[t].title?' title=\"'+k(g(e[t].title))+'\"':\"\";return\"<img\"+n+(' alt=\"'+(e[t].alt?k(g(u(e[t].alt))):\"\")+'\"')+o+(r.xhtmlOut?\" /\":\"\")+\">\"},y.table_open=function(){return\"<table>\\n\"},y.table_close=function(){return\"</table>\\n\"},y.thead_open=function(){return\"<thead>\\n\"},y.thead_close=function(){return\"</thead>\\n\"},y.tbody_open=function(){return\"<tbody>\\n\"},y.tbody_close=function(){return\"</tbody>\\n\"},y.tr_open=function(){return\"<tr>\"},y.tr_close=function(){return\"</tr>\\n\"},y.th_open=function(e,t){var r=e[t];return\"<th\"+(r.align?' style=\"text-align:'+r.align+'\"':\"\")+\">\"},y.th_close=function(){return\"</th>\"},y.td_open=function(e,t){var r=e[t];return\"<td\"+(r.align?' style=\"text-align:'+r.align+'\"':\"\")+\">\"},y.td_close=function(){return\"</td>\"},y.strong_open=function(){return\"<strong>\"},y.strong_close=function(){return\"</strong>\"},y.em_open=function(){return\"<em>\"},y.em_close=function(){return\"</em>\"},y.del_open=function(){return\"<del>\"},y.del_close=function(){return\"</del>\"},y.ins_open=function(){return\"<ins>\"},y.ins_close=function(){return\"</ins>\"},y.mark_open=function(){return\"<mark>\"},y.mark_close=function(){return\"</mark>\"},y.sub=function(e,t){return\"<sub>\"+k(e[t].content)+\"</sub>\"},y.sup=function(e,t){return\"<sup>\"+k(e[t].content)+\"</sup>\"},y.hardbreak=function(e,t,r){return r.xhtmlOut?\"<br />\\n\":\"<br>\\n\"},y.softbreak=function(e,t,r){return r.breaks?r.xhtmlOut?\"<br />\\n\":\"<br>\\n\":\"\\n\"},y.text=function(e,t){return k(e[t].content)},y.htmlblock=function(e,t){return e[t].content},y.htmltag=function(e,t){return e[t].content},y.abbr_open=function(e,t){return'<abbr title=\"'+k(g(e[t].title))+'\">'},y.abbr_close=function(){return\"</abbr>\"},y.footnote_ref=function(e,t){var r=Number(e[t].id+1).toString(),n=\"fnref\"+r;return e[t].subId>0&&(n+=\":\"+e[t].subId),'<sup class=\"footnote-ref\"><a href=\"#fn'+r+'\" id=\"'+n+'\">['+r+\"]</a></sup>\"},y.footnote_block_open=function(e,t,r){return(r.xhtmlOut?'<hr class=\"footnotes-sep\" />\\n':'<hr class=\"footnotes-sep\">\\n')+'<section class=\"footnotes\">\\n<ol class=\"footnotes-list\">\\n'},y.footnote_block_close=function(){return\"</ol>\\n</section>\\n\"},y.footnote_open=function(e,t){return'<li id=\"fn'+Number(e[t].id+1).toString()+'\" class=\"footnote-item\">'},y.footnote_close=function(){return\"</li>\\n\"},y.footnote_anchor=function(e,t){var r=\"fnref\"+Number(e[t].id+1).toString();return e[t].subId>0&&(r+=\":\"+e[t].subId),' <a href=\"#'+r+'\" class=\"footnote-backref\">↩</a>'},y.dl_open=function(){return\"<dl>\\n\"},y.dt_open=function(){return\"<dt>\"},y.dd_open=function(){return\"<dd>\"},y.dl_close=function(){return\"</dl>\\n\"},y.dt_close=function(){return\"</dt>\\n\"},y.dd_close=function(){return\"</dd>\\n\"};var x=y.getBreak=function(e,t){return(t=function e(t,r){return++r>=t.length-2?r:\"paragraph_open\"===t[r].type&&t[r].tight&&\"inline\"===t[r+1].type&&0===t[r+1].content.length&&\"paragraph_close\"===t[r+2].type&&t[r+2].tight?e(t,r+2):r}(e,t))<e.length&&\"list_item_close\"===e[t].type?\"\":\"\\n\"};function w(){this.rules=i({},y),this.getBreak=y.getBreak}function C(){this.__rules__=[],this.__cache__=null}function E(e,t,r,n,o){this.src=e,this.env=n,this.options=r,this.parser=t,this.tokens=o,this.pos=0,this.posMax=this.src.length,this.level=0,this.pending=\"\",this.pendingLevel=0,this.cache=[],this.isInLabel=!1,this.linkLevel=0,this.linkContent=\"\",this.labelUnmatchedScopes=0}function D(e,t){var r,n,o,s=-1,i=e.posMax,a=e.pos,u=e.isInLabel;if(e.isInLabel)return-1;if(e.labelUnmatchedScopes)return e.labelUnmatchedScopes--,-1;for(e.pos=t+1,e.isInLabel=!0,r=1;e.pos<i;){if(91===(o=e.src.charCodeAt(e.pos)))r++;else if(93===o&&0===--r){n=!0;break}e.parser.skipToken(e)}return n?(s=e.pos,e.labelUnmatchedScopes=0):e.labelUnmatchedScopes=r-1,e.pos=a,e.isInLabel=u,s}function _(e,t,r,n){var o,s,i,a,u,l;if(42!==e.charCodeAt(0))return-1;if(91!==e.charCodeAt(1))return-1;if(-1===e.indexOf(\"]:\"))return-1;if((s=D(o=new E(e,t,r,n,[]),1))<0||58!==e.charCodeAt(s+1))return-1;for(a=o.posMax,i=s+2;i<a&&10!==o.src.charCodeAt(i);i++);return u=e.slice(2,s),0===(l=e.slice(s+2,i).trim()).length?-1:(n.abbreviations||(n.abbreviations={}),void 0===n.abbreviations[\":\"+u]&&(n.abbreviations[\":\"+u]=l),i)}function B(e){var t=g(e);try{t=decodeURI(t)}catch(e){}return encodeURI(t)}function q(e,t){var r,n,o,s=t,i=e.posMax;if(60===e.src.charCodeAt(t)){for(t++;t<i;){if(10===(r=e.src.charCodeAt(t)))return!1;if(62===r)return o=B(u(e.src.slice(s+1,t))),!!e.parser.validateLink(o)&&(e.pos=t+1,e.linkContent=o,!0);92===r&&t+1<i?t+=2:t++}return!1}for(n=0;t<i&&32!==(r=e.src.charCodeAt(t))&&!(r<32||127===r);)if(92===r&&t+1<i)t+=2;else{if(40===r&&++n>1)break;if(41===r&&--n<0)break;t++}return s!==t&&(o=u(e.src.slice(s,t)),!!e.parser.validateLink(o)&&(e.linkContent=o,e.pos=t,!0))}function F(e,t){var r,n=t,o=e.posMax,s=e.src.charCodeAt(t);if(34!==s&&39!==s&&40!==s)return!1;for(t++,40===s&&(s=41);t<o;){if((r=e.src.charCodeAt(t))===s)return e.pos=t+1,e.linkContent=u(e.src.slice(n+1,t)),!0;92===r&&t+1<o?t+=2:t++}return!1}function M(e){return e.trim().replace(/\\s+/g,\" \").toUpperCase()}function S(e,t,r,n){var o,s,i,a,u,l,c,p,h;if(91!==e.charCodeAt(0))return-1;if(-1===e.indexOf(\"]:\"))return-1;if((s=D(o=new E(e,t,r,n,[]),0))<0||58!==e.charCodeAt(s+1))return-1;for(a=o.posMax,i=s+2;i<a&&(32===(u=o.src.charCodeAt(i))||10===u);i++);if(!q(o,i))return-1;for(c=o.linkContent,l=i=o.pos,i+=1;i<a&&(32===(u=o.src.charCodeAt(i))||10===u);i++);for(i<a&&l!==i&&F(o,i)?(p=o.linkContent,i=o.pos):(p=\"\",i=l);i<a&&32===o.src.charCodeAt(i);)i++;return i<a&&10!==o.src.charCodeAt(i)?-1:(h=M(e.slice(1,s)),void 0===n.references[h]&&(n.references[h]={title:p,href:c}),i)}w.prototype.renderInline=function(e,t,r){for(var n=this.rules,o=e.length,s=0,i=\"\";o--;)i+=n[e[s].type](e,s++,t,r,this);return i},w.prototype.render=function(e,t,r){for(var n=this.rules,o=e.length,s=-1,i=\"\";++s<o;)\"inline\"===e[s].type?i+=this.renderInline(e[s].children,t,r):i+=n[e[s].type](e,s,t,r,this);return i},C.prototype.__find__=function(e){for(var t=this.__rules__.length,r=-1;t--;)if(this.__rules__[++r].name===e)return r;return-1},C.prototype.__compile__=function(){var e=this,t=[\"\"];e.__rules__.forEach(function(e){e.enabled&&e.alt.forEach(function(e){t.indexOf(e)<0&&t.push(e)})}),e.__cache__={},t.forEach(function(t){e.__cache__[t]=[],e.__rules__.forEach(function(r){r.enabled&&(t&&r.alt.indexOf(t)<0||e.__cache__[t].push(r.fn))})})},C.prototype.at=function(e,t,r){var n=this.__find__(e),o=r||{};if(-1===n)throw new Error(\"Parser rule not found: \"+e);this.__rules__[n].fn=t,this.__rules__[n].alt=o.alt||[],this.__cache__=null},C.prototype.before=function(e,t,r,n){var o=this.__find__(e),s=n||{};if(-1===o)throw new Error(\"Parser rule not found: \"+e);this.__rules__.splice(o,0,{name:t,enabled:!0,fn:r,alt:s.alt||[]}),this.__cache__=null},C.prototype.after=function(e,t,r,n){var o=this.__find__(e),s=n||{};if(-1===o)throw new Error(\"Parser rule not found: \"+e);this.__rules__.splice(o+1,0,{name:t,enabled:!0,fn:r,alt:s.alt||[]}),this.__cache__=null},C.prototype.push=function(e,t,r){var n=r||{};this.__rules__.push({name:e,enabled:!0,fn:t,alt:n.alt||[]}),this.__cache__=null},C.prototype.enable=function(e,t){e=Array.isArray(e)?e:[e],t&&this.__rules__.forEach(function(e){e.enabled=!1}),e.forEach(function(e){var t=this.__find__(e);if(t<0)throw new Error(\"Rules manager: invalid rule name \"+e);this.__rules__[t].enabled=!0},this),this.__cache__=null},C.prototype.disable=function(e){(e=Array.isArray(e)?e:[e]).forEach(function(e){var t=this.__find__(e);if(t<0)throw new Error(\"Rules manager: invalid rule name \"+e);this.__rules__[t].enabled=!1},this),this.__cache__=null},C.prototype.getRules=function(e){return null===this.__cache__&&this.__compile__(),this.__cache__[e]||[]},E.prototype.pushPending=function(){this.tokens.push({type:\"text\",content:this.pending,level:this.pendingLevel}),this.pending=\"\"},E.prototype.push=function(e){this.pending&&this.pushPending(),this.tokens.push(e),this.pendingLevel=this.level},E.prototype.cacheSet=function(e,t){for(var r=this.cache.length;r<=e;r++)this.cache.push(0);this.cache[e]=t},E.prototype.cacheGet=function(e){return e<this.cache.length?this.cache[e]:0};var T=\" \\n()[]'\\\".,!?-\";function L(e){return e.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g,\"\\\\$1\")}var R=/\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/,N=/\\((c|tm|r|p)\\)/gi,z={c:\"©\",r:\"®\",p:\"§\",tm:\"™\"};var P=/['\"]/,j=/['\"]/g,I=/[-\\s()\\[\\]]/,O=\"’\";function U(e,t){return!(t<0||t>=e.length)&&!I.test(e[t])}function H(e,t,r){return e.substr(0,t)+r+e.substr(t+1)}var V=[[\"block\",function(e){e.inlineMode?e.tokens.push({type:\"inline\",content:e.src.replace(/\\n/g,\" \").trim(),level:0,lines:[0,1],children:[]}):e.block.parse(e.src,e.options,e.env,e.tokens)}],[\"abbr\",function(e){var t,r,n,o,s=e.tokens;if(!e.inlineMode)for(t=1,r=s.length-1;t<r;t++)if(\"paragraph_open\"===s[t-1].type&&\"inline\"===s[t].type&&\"paragraph_close\"===s[t+1].type){for(n=s[t].content;n.length&&!((o=_(n,e.inline,e.options,e.env))<0);)n=n.slice(o).trim();s[t].content=n,n.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],[\"references\",function(e){var t,r,n,o,s=e.tokens;if(e.env.references=e.env.references||{},!e.inlineMode)for(t=1,r=s.length-1;t<r;t++)if(\"inline\"===s[t].type&&\"paragraph_open\"===s[t-1].type&&\"paragraph_close\"===s[t+1].type){for(n=s[t].content;n.length&&!((o=S(n,e.inline,e.options,e.env))<0);)n=n.slice(o).trim();s[t].content=n,n.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],[\"inline\",function(e){var t,r,n,o=e.tokens;for(r=0,n=o.length;r<n;r++)\"inline\"===(t=o[r]).type&&e.inline.parse(t.content,e.options,e.env,t.children)}],[\"footnote_tail\",function(e){var t,r,n,o,s,i,a,u,l,c=0,p=!1,h={};if(e.env.footnotes&&(e.tokens=e.tokens.filter(function(e){return\"footnote_reference_open\"===e.type?(p=!0,u=[],l=e.label,!1):\"footnote_reference_close\"===e.type?(p=!1,h[\":\"+l]=u,!1):(p&&u.push(e),!p)}),e.env.footnotes.list)){for(i=e.env.footnotes.list,e.tokens.push({type:\"footnote_block_open\",level:c++}),t=0,r=i.length;t<r;t++){for(e.tokens.push({type:\"footnote_open\",id:t,level:c++}),i[t].tokens?((a=[]).push({type:\"paragraph_open\",tight:!1,level:c++}),a.push({type:\"inline\",content:\"\",level:c,children:i[t].tokens}),a.push({type:\"paragraph_close\",tight:!1,level:--c})):i[t].label&&(a=h[\":\"+i[t].label]),e.tokens=e.tokens.concat(a),s=\"paragraph_close\"===e.tokens[e.tokens.length-1].type?e.tokens.pop():null,o=i[t].count>0?i[t].count:1,n=0;n<o;n++)e.tokens.push({type:\"footnote_anchor\",id:t,subId:n,level:c});s&&e.tokens.push(s),e.tokens.push({type:\"footnote_close\",level:--c})}e.tokens.push({type:\"footnote_block_close\",level:--c})}}],[\"abbr2\",function(e){var t,r,n,o,s,i,a,u,l,c,p,h,f=e.tokens;if(e.env.abbreviations)for(e.env.abbrRegExp||(h=\"(^|[\"+T.split(\"\").map(L).join(\"\")+\"])(\"+Object.keys(e.env.abbreviations).map(function(e){return e.substr(1)}).sort(function(e,t){return t.length-e.length}).map(L).join(\"|\")+\")($|[\"+T.split(\"\").map(L).join(\"\")+\"])\",e.env.abbrRegExp=new RegExp(h,\"g\")),c=e.env.abbrRegExp,r=0,n=f.length;r<n;r++)if(\"inline\"===f[r].type)for(t=(o=f[r].children).length-1;t>=0;t--)if(\"text\"===(s=o[t]).type){for(u=0,i=s.content,c.lastIndex=0,l=s.level,a=[];p=c.exec(i);)c.lastIndex>u&&a.push({type:\"text\",content:i.slice(u,p.index+p[1].length),level:l}),a.push({type:\"abbr_open\",title:e.env.abbreviations[\":\"+p[2]],level:l++}),a.push({type:\"text\",content:p[2],level:l}),a.push({type:\"abbr_close\",level:--l}),u=c.lastIndex-p[3].length;a.length&&(u<i.length&&a.push({type:\"text\",content:i.slice(u),level:l}),f[r].children=o=[].concat(o.slice(0,t),a,o.slice(t+1)))}}],[\"replacements\",function(e){var t,r,n,o,s,i;if(e.options.typographer)for(s=e.tokens.length-1;s>=0;s--)if(\"inline\"===e.tokens[s].type)for(t=(o=e.tokens[s].children).length-1;t>=0;t--)\"text\"===(r=o[t]).type&&(n=r.content,n=(i=n).indexOf(\"(\")<0?i:i.replace(N,function(e,t){return z[t.toLowerCase()]}),R.test(n)&&(n=n.replace(/\\+-/g,\"±\").replace(/\\.{2,}/g,\"…\").replace(/([?!])…/g,\"$1..\").replace(/([?!]){4,}/g,\"$1$1$1\").replace(/,{2,}/g,\",\").replace(/(^|[^-])---([^-]|$)/gm,\"$1—$2\").replace(/(^|\\s)--(\\s|$)/gm,\"$1–$2\").replace(/(^|[^-\\s])--([^-\\s]|$)/gm,\"$1–$2\")),r.content=n)}],[\"smartquotes\",function(e){var t,r,n,o,s,i,a,u,l,c,p,h,f,g,d,m,b;if(e.options.typographer)for(b=[],d=e.tokens.length-1;d>=0;d--)if(\"inline\"===e.tokens[d].type)for(m=e.tokens[d].children,b.length=0,t=0;t<m.length;t++)if(\"text\"===(r=m[t]).type&&!P.test(r.text)){for(a=m[t].level,f=b.length-1;f>=0&&!(b[f].level<=a);f--);b.length=f+1,s=0,i=(n=r.content).length;e:for(;s<i&&(j.lastIndex=s,o=j.exec(n));)if(u=!U(n,o.index-1),s=o.index+1,g=\"'\"===o[0],(l=!U(n,s))||u){if(p=!l,h=!u)for(f=b.length-1;f>=0&&(c=b[f],!(b[f].level<a));f--)if(c.single===g&&b[f].level===a){c=b[f],g?(m[c.token].content=H(m[c.token].content,c.pos,e.options.quotes[2]),r.content=H(r.content,o.index,e.options.quotes[3])):(m[c.token].content=H(m[c.token].content,c.pos,e.options.quotes[0]),r.content=H(r.content,o.index,e.options.quotes[1])),b.length=f;continue e}p?b.push({token:t,pos:o.index,single:g,level:a}):h&&g&&(r.content=H(r.content,o.index,O))}else g&&(r.content=H(r.content,o.index,O))}}]];function G(){this.options={},this.ruler=new C;for(var e=0;e<V.length;e++)this.ruler.push(V[e][0],V[e][1])}function $(e,t,r,n,o){var s,i,a,u,l,c,p;for(this.src=e,this.parser=t,this.options=r,this.env=n,this.tokens=o,this.bMarks=[],this.eMarks=[],this.tShift=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.parentType=\"root\",this.ddIndent=-1,this.level=0,this.result=\"\",c=0,p=!1,a=u=c=0,l=(i=this.src).length;u<l;u++){if(s=i.charCodeAt(u),!p){if(32===s){c++;continue}p=!0}10!==s&&u!==l-1||(10!==s&&u++,this.bMarks.push(a),this.eMarks.push(u),this.tShift.push(c),p=!1,c=0,a=u+1)}this.bMarks.push(i.length),this.eMarks.push(i.length),this.tShift.push(0),this.lineMax=this.bMarks.length-1}function Z(e,t){var r,n,o;return(n=e.bMarks[t]+e.tShift[t])>=(o=e.eMarks[t])?-1:42!==(r=e.src.charCodeAt(n++))&&45!==r&&43!==r?-1:n<o&&32!==e.src.charCodeAt(n)?-1:n}function W(e,t){var r,n=e.bMarks[t]+e.tShift[t],o=e.eMarks[t];if(n+1>=o)return-1;if((r=e.src.charCodeAt(n++))<48||r>57)return-1;for(;;){if(n>=o)return-1;if(!((r=e.src.charCodeAt(n++))>=48&&r<=57)){if(41===r||46===r)break;return-1}}return n<o&&32!==e.src.charCodeAt(n)?-1:n}G.prototype.process=function(e){var t,r,n;for(t=0,r=(n=this.ruler.getRules(\"\")).length;t<r;t++)n[t](e)},$.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},$.prototype.skipEmptyLines=function(e){for(var t=this.lineMax;e<t&&!(this.bMarks[e]+this.tShift[e]<this.eMarks[e]);e++);return e},$.prototype.skipSpaces=function(e){for(var t=this.src.length;e<t&&32===this.src.charCodeAt(e);e++);return e},$.prototype.skipChars=function(e,t){for(var r=this.src.length;e<r&&this.src.charCodeAt(e)===t;e++);return e},$.prototype.skipCharsBack=function(e,t,r){if(e<=r)return e;for(;e>r;)if(t!==this.src.charCodeAt(--e))return e+1;return e},$.prototype.getLines=function(e,t,r,n){var o,s,i,a,u,l=e;if(e>=t)return\"\";if(l+1===t)return s=this.bMarks[l]+Math.min(this.tShift[l],r),i=n?this.eMarks[l]+1:this.eMarks[l],this.src.slice(s,i);for(a=new Array(t-e),o=0;l<t;l++,o++)(u=this.tShift[l])>r&&(u=r),u<0&&(u=0),s=this.bMarks[l]+u,i=l+1<t||n?this.eMarks[l]+1:this.eMarks[l],a[o]=this.src.slice(s,i);return a.join(\"\")};var J={};[\"article\",\"aside\",\"button\",\"blockquote\",\"body\",\"canvas\",\"caption\",\"col\",\"colgroup\",\"dd\",\"div\",\"dl\",\"dt\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"iframe\",\"li\",\"map\",\"object\",\"ol\",\"output\",\"p\",\"pre\",\"progress\",\"script\",\"section\",\"style\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"tr\",\"thead\",\"ul\",\"video\"].forEach(function(e){J[e]=!0});var Y=/^<([a-zA-Z]{1,15})[\\s\\/>]/,K=/^<\\/([a-zA-Z]{1,15})[\\s>]/;function Q(e,t){var r=e.bMarks[t]+e.blkIndent,n=e.eMarks[t];return e.src.substr(r,n-r)}function X(e,t){var r,n,o=e.bMarks[t]+e.tShift[t],s=e.eMarks[t];return o>=s?-1:126!==(n=e.src.charCodeAt(o++))&&58!==n?-1:o===(r=e.skipSpaces(o))?-1:r>=s?-1:r}var ee=[[\"code\",function(e,t,r){var n,o;if(e.tShift[t]-e.blkIndent<4)return!1;for(o=n=t+1;n<r;)if(e.isEmpty(n))n++;else{if(!(e.tShift[n]-e.blkIndent>=4))break;o=++n}return e.line=n,e.tokens.push({type:\"code\",content:e.getLines(t,o,4+e.blkIndent,!0),block:!0,lines:[t,e.line],level:e.level}),!0}],[\"fences\",function(e,t,r,n){var o,s,i,a,u,l=!1,c=e.bMarks[t]+e.tShift[t],p=e.eMarks[t];if(c+3>p)return!1;if(126!==(o=e.src.charCodeAt(c))&&96!==o)return!1;if(u=c,(s=(c=e.skipChars(c,o))-u)<3)return!1;if((i=e.src.slice(c,p).trim()).indexOf(\"`\")>=0)return!1;if(n)return!0;for(a=t;!(++a>=r||(c=u=e.bMarks[a]+e.tShift[a])<(p=e.eMarks[a])&&e.tShift[a]<e.blkIndent);)if(e.src.charCodeAt(c)===o&&!(e.tShift[a]-e.blkIndent>=4||(c=e.skipChars(c,o))-u<s||(c=e.skipSpaces(c))<p)){l=!0;break}return s=e.tShift[t],e.line=a+(l?1:0),e.tokens.push({type:\"fence\",params:i,content:e.getLines(t+1,a,s,!0),lines:[t,e.line],level:e.level}),!0},[\"paragraph\",\"blockquote\",\"list\"]],[\"blockquote\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g,d=e.bMarks[t]+e.tShift[t],m=e.eMarks[t];if(d>m)return!1;if(62!==e.src.charCodeAt(d++))return!1;if(e.level>=e.options.maxNesting)return!1;if(n)return!0;for(32===e.src.charCodeAt(d)&&d++,u=e.blkIndent,e.blkIndent=0,a=[e.bMarks[t]],e.bMarks[t]=d,s=(d=d<m?e.skipSpaces(d):d)>=m,i=[e.tShift[t]],e.tShift[t]=d-e.bMarks[t],p=e.parser.ruler.getRules(\"blockquote\"),o=t+1;o<r&&!((d=e.bMarks[o]+e.tShift[o])>=(m=e.eMarks[o]));o++)if(62!==e.src.charCodeAt(d++)){if(s)break;for(g=!1,h=0,f=p.length;h<f;h++)if(p[h](e,o,r,!0)){g=!0;break}if(g)break;a.push(e.bMarks[o]),i.push(e.tShift[o]),e.tShift[o]=-1337}else 32===e.src.charCodeAt(d)&&d++,a.push(e.bMarks[o]),e.bMarks[o]=d,s=(d=d<m?e.skipSpaces(d):d)>=m,i.push(e.tShift[o]),e.tShift[o]=d-e.bMarks[o];for(l=e.parentType,e.parentType=\"blockquote\",e.tokens.push({type:\"blockquote_open\",lines:c=[t,0],level:e.level++}),e.parser.tokenize(e,t,o),e.tokens.push({type:\"blockquote_close\",level:--e.level}),e.parentType=l,c[1]=e.line,h=0;h<i.length;h++)e.bMarks[h+t]=a[h],e.tShift[h+t]=i[h];return e.blkIndent=u,!0},[\"paragraph\",\"blockquote\",\"list\"]],[\"hr\",function(e,t,r,n){var o,s,i,a=e.bMarks[t],u=e.eMarks[t];if((a+=e.tShift[t])>u)return!1;if(42!==(o=e.src.charCodeAt(a++))&&45!==o&&95!==o)return!1;for(s=1;a<u;){if((i=e.src.charCodeAt(a++))!==o&&32!==i)return!1;i===o&&s++}return!(s<3||!n&&(e.line=t+1,e.tokens.push({type:\"hr\",lines:[t,e.line],level:e.level}),0))},[\"paragraph\",\"blockquote\",\"list\"]],[\"list\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g,d,m,b,v,k,A,y,x,w,C,E=!0;if((p=W(e,t))>=0)d=!0;else{if(!((p=Z(e,t))>=0))return!1;d=!1}if(e.level>=e.options.maxNesting)return!1;if(g=e.src.charCodeAt(p-1),n)return!0;for(b=e.tokens.length,d?(c=e.bMarks[t]+e.tShift[t],f=Number(e.src.substr(c,p-c-1)),e.tokens.push({type:\"ordered_list_open\",order:f,lines:k=[t,0],level:e.level++})):e.tokens.push({type:\"bullet_list_open\",lines:k=[t,0],level:e.level++}),o=t,v=!1,y=e.parser.ruler.getRules(\"list\");!(!(o<r)||((h=(m=e.skipSpaces(p))>=e.eMarks[o]?1:m-p)>4&&(h=1),h<1&&(h=1),s=p-e.bMarks[o]+h,e.tokens.push({type:\"list_item_open\",lines:A=[t,0],level:e.level++}),a=e.blkIndent,u=e.tight,i=e.tShift[t],l=e.parentType,e.tShift[t]=m-e.bMarks[t],e.blkIndent=s,e.tight=!0,e.parentType=\"list\",e.parser.tokenize(e,t,r,!0),e.tight&&!v||(E=!1),v=e.line-t>1&&e.isEmpty(e.line-1),e.blkIndent=a,e.tShift[t]=i,e.tight=u,e.parentType=l,e.tokens.push({type:\"list_item_close\",level:--e.level}),o=t=e.line,A[1]=o,m=e.bMarks[t],o>=r)||e.isEmpty(o)||e.tShift[o]<e.blkIndent);){for(C=!1,x=0,w=y.length;x<w;x++)if(y[x](e,o,r,!0)){C=!0;break}if(C)break;if(d){if((p=W(e,o))<0)break}else if((p=Z(e,o))<0)break;if(g!==e.src.charCodeAt(p-1))break}return e.tokens.push({type:d?\"ordered_list_close\":\"bullet_list_close\",level:--e.level}),k[1]=o,e.line=o,E&&function(e,t){var r,n,o=e.level+2;for(r=t+2,n=e.tokens.length-2;r<n;r++)e.tokens[r].level===o&&\"paragraph_open\"===e.tokens[r].type&&(e.tokens[r+2].tight=!0,e.tokens[r].tight=!0,r+=2)}(e,b),!0},[\"paragraph\",\"blockquote\"]],[\"footnote\",function(e,t,r,n){var o,s,i,a,u,l=e.bMarks[t]+e.tShift[t],c=e.eMarks[t];if(l+4>c)return!1;if(91!==e.src.charCodeAt(l))return!1;if(94!==e.src.charCodeAt(l+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(a=l+2;a<c;a++){if(32===e.src.charCodeAt(a))return!1;if(93===e.src.charCodeAt(a))break}return!(a===l+2||a+1>=c||58!==e.src.charCodeAt(++a)||!n&&(a++,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={}),u=e.src.slice(l+2,a-2),e.env.footnotes.refs[\":\"+u]=-1,e.tokens.push({type:\"footnote_reference_open\",label:u,level:e.level++}),o=e.bMarks[t],s=e.tShift[t],i=e.parentType,e.tShift[t]=e.skipSpaces(a)-a,e.bMarks[t]=a,e.blkIndent+=4,e.parentType=\"footnote\",e.tShift[t]<e.blkIndent&&(e.tShift[t]+=e.blkIndent,e.bMarks[t]-=e.blkIndent),e.parser.tokenize(e,t,r,!0),e.parentType=i,e.blkIndent-=4,e.tShift[t]=s,e.bMarks[t]=o,e.tokens.push({type:\"footnote_reference_close\",level:--e.level}),0))},[\"paragraph\"]],[\"heading\",function(e,t,r,n){var o,s,i,a=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(a>=u)return!1;if(35!==(o=e.src.charCodeAt(a))||a>=u)return!1;for(s=1,o=e.src.charCodeAt(++a);35===o&&a<u&&s<=6;)s++,o=e.src.charCodeAt(++a);return!(s>6||a<u&&32!==o||!n&&(u=e.skipCharsBack(u,32,a),(i=e.skipCharsBack(u,35,a))>a&&32===e.src.charCodeAt(i-1)&&(u=i),e.line=t+1,e.tokens.push({type:\"heading_open\",hLevel:s,lines:[t,e.line],level:e.level}),a<u&&e.tokens.push({type:\"inline\",content:e.src.slice(a,u).trim(),level:e.level+1,lines:[t,e.line],children:[]}),e.tokens.push({type:\"heading_close\",hLevel:s,level:e.level}),0))},[\"paragraph\",\"blockquote\"]],[\"lheading\",function(e,t,r){var n,o,s,i=t+1;return!(i>=r||e.tShift[i]<e.blkIndent||e.tShift[i]-e.blkIndent>3||(o=e.bMarks[i]+e.tShift[i])>=(s=e.eMarks[i])||45!==(n=e.src.charCodeAt(o))&&61!==n||(o=e.skipChars(o,n),(o=e.skipSpaces(o))<s||(o=e.bMarks[t]+e.tShift[t],e.line=i+1,e.tokens.push({type:\"heading_open\",hLevel:61===n?1:2,lines:[t,e.line],level:e.level}),e.tokens.push({type:\"inline\",content:e.src.slice(o,e.eMarks[t]).trim(),level:e.level+1,lines:[t,e.line-1],children:[]}),e.tokens.push({type:\"heading_close\",hLevel:61===n?1:2,level:e.level}),0)))}],[\"htmlblock\",function(e,t,r,n){var o,s,i,a=e.bMarks[t],u=e.eMarks[t],l=e.tShift[t];if(a+=l,!e.options.html)return!1;if(l>3||a+2>=u)return!1;if(60!==e.src.charCodeAt(a))return!1;if(33===(o=e.src.charCodeAt(a+1))||63===o){if(n)return!0}else{if(47!==o&&!function(e){var t=32|e;return t>=97&&t<=122}(o))return!1;if(47===o){if(!(s=e.src.slice(a,u).match(K)))return!1}else if(!(s=e.src.slice(a,u).match(Y)))return!1;if(!0!==J[s[1].toLowerCase()])return!1;if(n)return!0}for(i=t+1;i<e.lineMax&&!e.isEmpty(i);)i++;return e.line=i,e.tokens.push({type:\"htmlblock\",level:e.level,lines:[t,e.line],content:e.getLines(t,i,0,!0)}),!0},[\"paragraph\",\"blockquote\"]],[\"table\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g;if(t+2>r)return!1;if(u=t+1,e.tShift[u]<e.blkIndent)return!1;if((i=e.bMarks[u]+e.tShift[u])>=e.eMarks[u])return!1;if(124!==(o=e.src.charCodeAt(i))&&45!==o&&58!==o)return!1;if(s=Q(e,t+1),!/^[-:| ]+$/.test(s))return!1;if((l=s.split(\"|\"))<=2)return!1;for(p=[],a=0;a<l.length;a++){if(!(h=l[a].trim())){if(0===a||a===l.length-1)continue;return!1}if(!/^:?-+:?$/.test(h))return!1;58===h.charCodeAt(h.length-1)?p.push(58===h.charCodeAt(0)?\"center\":\"right\"):58===h.charCodeAt(0)?p.push(\"left\"):p.push(\"\")}if(-1===(s=Q(e,t).trim()).indexOf(\"|\"))return!1;if(l=s.replace(/^\\||\\|$/g,\"\").split(\"|\"),p.length!==l.length)return!1;if(n)return!0;for(e.tokens.push({type:\"table_open\",lines:f=[t,0],level:e.level++}),e.tokens.push({type:\"thead_open\",lines:[t,t+1],level:e.level++}),e.tokens.push({type:\"tr_open\",lines:[t,t+1],level:e.level++}),a=0;a<l.length;a++)e.tokens.push({type:\"th_open\",align:p[a],lines:[t,t+1],level:e.level++}),e.tokens.push({type:\"inline\",content:l[a].trim(),lines:[t,t+1],level:e.level,children:[]}),e.tokens.push({type:\"th_close\",level:--e.level});for(e.tokens.push({type:\"tr_close\",level:--e.level}),e.tokens.push({type:\"thead_close\",level:--e.level}),e.tokens.push({type:\"tbody_open\",lines:g=[t+2,0],level:e.level++}),u=t+2;u<r&&!(e.tShift[u]<e.blkIndent)&&-1!==(s=Q(e,u).trim()).indexOf(\"|\");u++){for(l=s.replace(/^\\||\\|$/g,\"\").split(\"|\"),e.tokens.push({type:\"tr_open\",level:e.level++}),a=0;a<l.length;a++)e.tokens.push({type:\"td_open\",align:p[a],level:e.level++}),c=l[a].substring(124===l[a].charCodeAt(0)?1:0,124===l[a].charCodeAt(l[a].length-1)?l[a].length-1:l[a].length).trim(),e.tokens.push({type:\"inline\",content:c,level:e.level,children:[]}),e.tokens.push({type:\"td_close\",level:--e.level});e.tokens.push({type:\"tr_close\",level:--e.level})}return e.tokens.push({type:\"tbody_close\",level:--e.level}),e.tokens.push({type:\"table_close\",level:--e.level}),f[1]=g[1]=u,e.line=u,!0},[\"paragraph\"]],[\"deflist\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g,d,m,b;if(n)return!(e.ddIndent<0)&&X(e,t)>=0;if(c=t+1,e.isEmpty(c)&&++c>r)return!1;if(e.tShift[c]<e.blkIndent)return!1;if((o=X(e,c))<0)return!1;if(e.level>=e.options.maxNesting)return!1;l=e.tokens.length,e.tokens.push({type:\"dl_open\",lines:u=[t,0],level:e.level++}),i=t,s=c;e:for(;;){for(b=!0,m=!1,e.tokens.push({type:\"dt_open\",lines:[i,i],level:e.level++}),e.tokens.push({type:\"inline\",content:e.getLines(i,i+1,e.blkIndent,!1).trim(),level:e.level+1,lines:[i,i],children:[]}),e.tokens.push({type:\"dt_close\",level:--e.level});;){if(e.tokens.push({type:\"dd_open\",lines:a=[c,0],level:e.level++}),d=e.tight,h=e.ddIndent,p=e.blkIndent,g=e.tShift[s],f=e.parentType,e.blkIndent=e.ddIndent=e.tShift[s]+2,e.tShift[s]=o-e.bMarks[s],e.tight=!0,e.parentType=\"deflist\",e.parser.tokenize(e,s,r,!0),e.tight&&!m||(b=!1),m=e.line-s>1&&e.isEmpty(e.line-1),e.tShift[s]=g,e.tight=d,e.parentType=f,e.blkIndent=p,e.ddIndent=h,e.tokens.push({type:\"dd_close\",level:--e.level}),a[1]=c=e.line,c>=r)break e;if(e.tShift[c]<e.blkIndent)break e;if((o=X(e,c))<0)break;s=c}if(c>=r)break;if(i=c,e.isEmpty(i))break;if(e.tShift[i]<e.blkIndent)break;if((s=i+1)>=r)break;if(e.isEmpty(s)&&s++,s>=r)break;if(e.tShift[s]<e.blkIndent)break;if((o=X(e,s))<0)break}return e.tokens.push({type:\"dl_close\",level:--e.level}),u[1]=c,e.line=c,b&&function(e,t){var r,n,o=e.level+2;for(r=t+2,n=e.tokens.length-2;r<n;r++)e.tokens[r].level===o&&\"paragraph_open\"===e.tokens[r].type&&(e.tokens[r+2].tight=!0,e.tokens[r].tight=!0,r+=2)}(e,l),!0},[\"paragraph\"]],[\"paragraph\",function(e,t){var r,n,o,s,i,a,u=t+1;if(u<(r=e.lineMax)&&!e.isEmpty(u))for(a=e.parser.ruler.getRules(\"paragraph\");u<r&&!e.isEmpty(u);u++)if(!(e.tShift[u]-e.blkIndent>3)){for(o=!1,s=0,i=a.length;s<i;s++)if(a[s](e,u,r,!0)){o=!0;break}if(o)break}return n=e.getLines(t,u,e.blkIndent,!1).trim(),e.line=u,n.length&&(e.tokens.push({type:\"paragraph_open\",tight:!1,lines:[t,e.line],level:e.level}),e.tokens.push({type:\"inline\",content:n,level:e.level+1,lines:[t,e.line],children:[]}),e.tokens.push({type:\"paragraph_close\",tight:!1,level:e.level})),!0}]];function te(){this.ruler=new C;for(var e=0;e<ee.length;e++)this.ruler.push(ee[e][0],ee[e][1],{alt:(ee[e][2]||[]).slice()})}te.prototype.tokenize=function(e,t,r){for(var n,o=this.ruler.getRules(\"\"),s=o.length,i=t,a=!1;i<r&&(e.line=i=e.skipEmptyLines(i),!(i>=r))&&!(e.tShift[i]<e.blkIndent);){for(n=0;n<s&&!o[n](e,i,r,!1);n++);if(e.tight=!a,e.isEmpty(e.line-1)&&(a=!0),(i=e.line)<r&&e.isEmpty(i)){if(a=!0,++i<r&&\"list\"===e.parentType&&e.isEmpty(i))break;e.line=i}}};var re=/[\\n\\t]/g,ne=/\\r[\\n\\u0085]|[\\u2424\\u2028\\u0085]/g,oe=/\\u00a0/g;function se(e){switch(e){case 10:case 92:case 96:case 42:case 95:case 94:case 91:case 93:case 33:case 38:case 60:case 62:case 123:case 125:case 36:case 37:case 64:case 126:case 43:case 61:case 58:return!0;default:return!1}}te.prototype.parse=function(e,t,r,n){var o,s=0,i=0;if(!e)return[];(e=(e=e.replace(oe,\" \")).replace(ne,\"\\n\")).indexOf(\"\\t\")>=0&&(e=e.replace(re,function(t,r){var n;return 10===e.charCodeAt(r)?(s=r+1,i=0,t):(n=\" \".slice((r-s-i)%4),i=r-s+1,n)})),o=new $(e,this,t,r,n),this.tokenize(o,o.line,o.lineMax)};for(var ie=[],ae=0;ae<256;ae++)ie.push(0);function ue(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function le(e,t){var r,n,o,s=t,i=!0,a=!0,u=e.posMax,l=e.src.charCodeAt(t);for(r=t>0?e.src.charCodeAt(t-1):-1;s<u&&e.src.charCodeAt(s)===l;)s++;return s>=u&&(i=!1),(o=s-t)>=4?i=a=!1:(32!==(n=s<u?e.src.charCodeAt(s):-1)&&10!==n||(i=!1),32!==r&&10!==r||(a=!1),95===l&&(ue(r)&&(i=!1),ue(n)&&(a=!1))),{can_open:i,can_close:a,delims:o}}\"\\\\!\\\"#$%&'()*+,./:;<=>?@[]^_`{|}~-\".split(\"\").forEach(function(e){ie[e.charCodeAt(0)]=1});var ce=/\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;var pe=/\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;var he=[\"coap\",\"doi\",\"javascript\",\"aaa\",\"aaas\",\"about\",\"acap\",\"cap\",\"cid\",\"crid\",\"data\",\"dav\",\"dict\",\"dns\",\"file\",\"ftp\",\"geo\",\"go\",\"gopher\",\"h323\",\"http\",\"https\",\"iax\",\"icap\",\"im\",\"imap\",\"info\",\"ipp\",\"iris\",\"iris.beep\",\"iris.xpc\",\"iris.xpcs\",\"iris.lwz\",\"ldap\",\"mailto\",\"mid\",\"msrp\",\"msrps\",\"mtqp\",\"mupdate\",\"news\",\"nfs\",\"ni\",\"nih\",\"nntp\",\"opaquelocktoken\",\"pop\",\"pres\",\"rtsp\",\"service\",\"session\",\"shttp\",\"sieve\",\"sip\",\"sips\",\"sms\",\"snmp\",\"soap.beep\",\"soap.beeps\",\"tag\",\"tel\",\"telnet\",\"tftp\",\"thismessage\",\"tn3270\",\"tip\",\"tv\",\"urn\",\"vemmi\",\"ws\",\"wss\",\"xcon\",\"xcon-userid\",\"xmlrpc.beep\",\"xmlrpc.beeps\",\"xmpp\",\"z39.50r\",\"z39.50s\",\"adiumxtra\",\"afp\",\"afs\",\"aim\",\"apt\",\"attachment\",\"aw\",\"beshare\",\"bitcoin\",\"bolo\",\"callto\",\"chrome\",\"chrome-extension\",\"com-eventbrite-attendee\",\"content\",\"cvs\",\"dlna-playsingle\",\"dlna-playcontainer\",\"dtn\",\"dvb\",\"ed2k\",\"facetime\",\"feed\",\"finger\",\"fish\",\"gg\",\"git\",\"gizmoproject\",\"gtalk\",\"hcp\",\"icon\",\"ipn\",\"irc\",\"irc6\",\"ircs\",\"itms\",\"jar\",\"jms\",\"keyparc\",\"lastfm\",\"ldaps\",\"magnet\",\"maps\",\"market\",\"message\",\"mms\",\"ms-help\",\"msnim\",\"mumble\",\"mvn\",\"notes\",\"oid\",\"palm\",\"paparazzi\",\"platform\",\"proxy\",\"psyc\",\"query\",\"res\",\"resource\",\"rmi\",\"rsync\",\"rtmp\",\"secondlife\",\"sftp\",\"sgn\",\"skype\",\"smb\",\"soldat\",\"spotify\",\"ssh\",\"steam\",\"svn\",\"teamspeak\",\"things\",\"udp\",\"unreal\",\"ut2004\",\"ventrilo\",\"view-source\",\"webcal\",\"wtai\",\"wyciwyg\",\"xfire\",\"xri\",\"ymsgr\"],fe=/^<([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,ge=/^<([a-zA-Z.\\-]{1,25}):([^<>\\x00-\\x20]*)>/;function de(e,t){return e=e.source,t=t||\"\",function r(n,o){return n?(o=o.source||o,e=e.replace(n,o),r):new RegExp(e,t)}}var me=de(/(?:unquoted|single_quoted|double_quoted)/)(\"unquoted\",/[^\"'=<>`\\x00-\\x20]+/)(\"single_quoted\",/'[^']*'/)(\"double_quoted\",/\"[^\"]*\"/)(),be=de(/(?:\\s+attr_name(?:\\s*=\\s*attr_value)?)/)(\"attr_name\",/[a-zA-Z_:][a-zA-Z0-9:._-]*/)(\"attr_value\",me)(),ve=de(/<[A-Za-z][A-Za-z0-9]*attribute*\\s*\\/?>/)(\"attribute\",be)(),ke=de(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)(\"open_tag\",ve)(\"close_tag\",/<\\/[A-Za-z][A-Za-z0-9]*\\s*>/)(\"comment\",/<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->/)(\"processing\",/<[?].*?[?]>/)(\"declaration\",/<![A-Z]+\\s+[^>]*>/)(\"cdata\",/<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/)();var Ae=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,ye=/^&([a-z][a-z0-9]{1,31});/i;var xe=[[\"text\",function(e,t){for(var r=e.pos;r<e.posMax&&!se(e.src.charCodeAt(r));)r++;return r!==e.pos&&(t||(e.pending+=e.src.slice(e.pos,r)),e.pos=r,!0)}],[\"newline\",function(e,t){var r,n,o=e.pos;if(10!==e.src.charCodeAt(o))return!1;if(r=e.pending.length-1,n=e.posMax,!t)if(r>=0&&32===e.pending.charCodeAt(r))if(r>=1&&32===e.pending.charCodeAt(r-1)){for(var s=r-2;s>=0;s--)if(32!==e.pending.charCodeAt(s)){e.pending=e.pending.substring(0,s+1);break}e.push({type:\"hardbreak\",level:e.level})}else e.pending=e.pending.slice(0,-1),e.push({type:\"softbreak\",level:e.level});else e.push({type:\"softbreak\",level:e.level});for(o++;o<n&&32===e.src.charCodeAt(o);)o++;return e.pos=o,!0}],[\"escape\",function(e,t){var r,n=e.pos,o=e.posMax;if(92!==e.src.charCodeAt(n))return!1;if(++n<o){if((r=e.src.charCodeAt(n))<256&&0!==ie[r])return t||(e.pending+=e.src[n]),e.pos+=2,!0;if(10===r){for(t||e.push({type:\"hardbreak\",level:e.level}),n++;n<o&&32===e.src.charCodeAt(n);)n++;return e.pos=n,!0}}return t||(e.pending+=\"\\\\\"),e.pos++,!0}],[\"backticks\",function(e,t){var r,n,o,s,i,a=e.pos;if(96!==e.src.charCodeAt(a))return!1;for(r=a,a++,n=e.posMax;a<n&&96===e.src.charCodeAt(a);)a++;for(o=e.src.slice(r,a),s=i=a;-1!==(s=e.src.indexOf(\"`\",i));){for(i=s+1;i<n&&96===e.src.charCodeAt(i);)i++;if(i-s===o.length)return t||e.push({type:\"code\",content:e.src.slice(a,s).replace(/[ \\n]+/g,\" \").trim(),block:!1,level:e.level}),e.pos=i,!0}return t||(e.pending+=o),e.pos+=o.length,!0}],[\"del\",function(e,t){var r,n,o,s,i,a=e.posMax,u=e.pos;if(126!==e.src.charCodeAt(u))return!1;if(t)return!1;if(u+4>=a)return!1;if(126!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=u>0?e.src.charCodeAt(u-1):-1,i=e.src.charCodeAt(u+2),126===s)return!1;if(126===i)return!1;if(32===i||10===i)return!1;for(n=u+2;n<a&&126===e.src.charCodeAt(n);)n++;if(n>u+3)return e.pos+=n-u,t||(e.pending+=e.src.slice(u,n)),!0;for(e.pos=u+2,o=1;e.pos+1<a;){if(126===e.src.charCodeAt(e.pos)&&126===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),126!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&126!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){r=!0;break}e.parser.skipToken(e)}return r?(e.posMax=e.pos,e.pos=u+2,t||(e.push({type:\"del_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"del_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=u,!1)}],[\"ins\",function(e,t){var r,n,o,s,i,a=e.posMax,u=e.pos;if(43!==e.src.charCodeAt(u))return!1;if(t)return!1;if(u+4>=a)return!1;if(43!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=u>0?e.src.charCodeAt(u-1):-1,i=e.src.charCodeAt(u+2),43===s)return!1;if(43===i)return!1;if(32===i||10===i)return!1;for(n=u+2;n<a&&43===e.src.charCodeAt(n);)n++;if(n!==u+2)return e.pos+=n-u,t||(e.pending+=e.src.slice(u,n)),!0;for(e.pos=u+2,o=1;e.pos+1<a;){if(43===e.src.charCodeAt(e.pos)&&43===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),43!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&43!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){r=!0;break}e.parser.skipToken(e)}return r?(e.posMax=e.pos,e.pos=u+2,t||(e.push({type:\"ins_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"ins_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=u,!1)}],[\"mark\",function(e,t){var r,n,o,s,i,a=e.posMax,u=e.pos;if(61!==e.src.charCodeAt(u))return!1;if(t)return!1;if(u+4>=a)return!1;if(61!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=u>0?e.src.charCodeAt(u-1):-1,i=e.src.charCodeAt(u+2),61===s)return!1;if(61===i)return!1;if(32===i||10===i)return!1;for(n=u+2;n<a&&61===e.src.charCodeAt(n);)n++;if(n!==u+2)return e.pos+=n-u,t||(e.pending+=e.src.slice(u,n)),!0;for(e.pos=u+2,o=1;e.pos+1<a;){if(61===e.src.charCodeAt(e.pos)&&61===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),61!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&61!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){r=!0;break}e.parser.skipToken(e)}return r?(e.posMax=e.pos,e.pos=u+2,t||(e.push({type:\"mark_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"mark_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=u,!1)}],[\"emphasis\",function(e,t){var r,n,o,s,i,a,u,l=e.posMax,c=e.pos,p=e.src.charCodeAt(c);if(95!==p&&42!==p)return!1;if(t)return!1;if(r=(u=le(e,c)).delims,!u.can_open)return e.pos+=r,t||(e.pending+=e.src.slice(c,e.pos)),!0;if(e.level>=e.options.maxNesting)return!1;for(e.pos=c+r,a=[r];e.pos<l;)if(e.src.charCodeAt(e.pos)!==p)e.parser.skipToken(e);else{if(n=(u=le(e,e.pos)).delims,u.can_close){for(s=a.pop(),i=n;s!==i;){if(i<s){a.push(s-i);break}if(i-=s,0===a.length)break;e.pos+=s,s=a.pop()}if(0===a.length){r=s,o=!0;break}e.pos+=n;continue}u.can_open&&a.push(n),e.pos+=n}return o?(e.posMax=e.pos,e.pos=c+r,t||(2!==r&&3!==r||e.push({type:\"strong_open\",level:e.level++}),1!==r&&3!==r||e.push({type:\"em_open\",level:e.level++}),e.parser.tokenize(e),1!==r&&3!==r||e.push({type:\"em_close\",level:--e.level}),2!==r&&3!==r||e.push({type:\"strong_close\",level:--e.level})),e.pos=e.posMax+r,e.posMax=l,!0):(e.pos=c,!1)}],[\"sub\",function(e,t){var r,n,o=e.posMax,s=e.pos;if(126!==e.src.charCodeAt(s))return!1;if(t)return!1;if(s+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=s+1;e.pos<o;){if(126===e.src.charCodeAt(e.pos)){r=!0;break}e.parser.skipToken(e)}return r&&s+1!==e.pos?(n=e.src.slice(s+1,e.pos)).match(/(^|[^\\\\])(\\\\\\\\)*\\s/)?(e.pos=s,!1):(e.posMax=e.pos,e.pos=s+1,t||e.push({type:\"sub\",level:e.level,content:n.replace(ce,\"$1\")}),e.pos=e.posMax+1,e.posMax=o,!0):(e.pos=s,!1)}],[\"sup\",function(e,t){var r,n,o=e.posMax,s=e.pos;if(94!==e.src.charCodeAt(s))return!1;if(t)return!1;if(s+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=s+1;e.pos<o;){if(94===e.src.charCodeAt(e.pos)){r=!0;break}e.parser.skipToken(e)}return r&&s+1!==e.pos?(n=e.src.slice(s+1,e.pos)).match(/(^|[^\\\\])(\\\\\\\\)*\\s/)?(e.pos=s,!1):(e.posMax=e.pos,e.pos=s+1,t||e.push({type:\"sup\",level:e.level,content:n.replace(pe,\"$1\")}),e.pos=e.posMax+1,e.posMax=o,!0):(e.pos=s,!1)}],[\"links\",function(e,t){var r,n,o,s,i,a,u,l,c=!1,p=e.pos,h=e.posMax,f=e.pos,g=e.src.charCodeAt(f);if(33===g&&(c=!0,g=e.src.charCodeAt(++f)),91!==g)return!1;if(e.level>=e.options.maxNesting)return!1;if(r=f+1,(n=D(e,f))<0)return!1;if((a=n+1)<h&&40===e.src.charCodeAt(a)){for(a++;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);if(a>=h)return!1;for(f=a,q(e,a)?(s=e.linkContent,a=e.pos):s=\"\",f=a;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);if(a<h&&f!==a&&F(e,a))for(i=e.linkContent,a=e.pos;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);else i=\"\";if(a>=h||41!==e.src.charCodeAt(a))return e.pos=p,!1;a++}else{if(e.linkLevel>0)return!1;for(;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);if(a<h&&91===e.src.charCodeAt(a)&&(f=a+1,(a=D(e,a))>=0?o=e.src.slice(f,a++):a=f-1),o||(void 0===o&&(a=n+1),o=e.src.slice(r,n)),!(u=e.env.references[M(o)]))return e.pos=p,!1;s=u.href,i=u.title}return t||(e.pos=r,e.posMax=n,c?e.push({type:\"image\",src:s,title:i,alt:e.src.substr(r,n-r),level:e.level}):(e.push({type:\"link_open\",href:s,title:i,level:e.level++}),e.linkLevel++,e.parser.tokenize(e),e.linkLevel--,e.push({type:\"link_close\",level:--e.level}))),e.pos=a,e.posMax=h,!0}],[\"footnote_inline\",function(e,t){var r,n,o,s,i=e.posMax,a=e.pos;return!(a+2>=i||94!==e.src.charCodeAt(a)||91!==e.src.charCodeAt(a+1)||e.level>=e.options.maxNesting||(r=a+2,(n=D(e,a+1))<0||(t||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),o=e.env.footnotes.list.length,e.pos=r,e.posMax=n,e.push({type:\"footnote_ref\",id:o,level:e.level}),e.linkLevel++,s=e.tokens.length,e.parser.tokenize(e),e.env.footnotes.list[o]={tokens:e.tokens.splice(s)},e.linkLevel--),e.pos=n+1,e.posMax=i,0)))}],[\"footnote_ref\",function(e,t){var r,n,o,s,i=e.posMax,a=e.pos;if(a+3>i)return!1;if(!e.env.footnotes||!e.env.footnotes.refs)return!1;if(91!==e.src.charCodeAt(a))return!1;if(94!==e.src.charCodeAt(a+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(n=a+2;n<i;n++){if(32===e.src.charCodeAt(n))return!1;if(10===e.src.charCodeAt(n))return!1;if(93===e.src.charCodeAt(n))break}return!(n===a+2||n>=i||(n++,r=e.src.slice(a+2,n-1),void 0===e.env.footnotes.refs[\":\"+r]||(t||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[\":\"+r]<0?(o=e.env.footnotes.list.length,e.env.footnotes.list[o]={label:r,count:0},e.env.footnotes.refs[\":\"+r]=o):o=e.env.footnotes.refs[\":\"+r],s=e.env.footnotes.list[o].count,e.env.footnotes.list[o].count++,e.push({type:\"footnote_ref\",id:o,subId:s,level:e.level})),e.pos=n,e.posMax=i,0)))}],[\"autolink\",function(e,t){var r,n,o,s,i,a=e.pos;return!(60!==e.src.charCodeAt(a)||(r=e.src.slice(a)).indexOf(\">\")<0||((n=r.match(ge))?he.indexOf(n[1].toLowerCase())<0||(i=B(s=n[0].slice(1,-1)),!e.parser.validateLink(s)||(t||(e.push({type:\"link_open\",href:i,level:e.level}),e.push({type:\"text\",content:s,level:e.level+1}),e.push({type:\"link_close\",level:e.level})),e.pos+=n[0].length,0)):!(o=r.match(fe))||(i=B(\"mailto:\"+(s=o[0].slice(1,-1))),!e.parser.validateLink(i)||(t||(e.push({type:\"link_open\",href:i,level:e.level}),e.push({type:\"text\",content:s,level:e.level+1}),e.push({type:\"link_close\",level:e.level})),e.pos+=o[0].length,0))))}],[\"htmltag\",function(e,t){var r,n,o,s=e.pos;return!(!e.options.html||(o=e.posMax,60!==e.src.charCodeAt(s)||s+2>=o||33!==(r=e.src.charCodeAt(s+1))&&63!==r&&47!==r&&!function(e){var t=32|e;return t>=97&&t<=122}(r)||!(n=e.src.slice(s).match(ke))||(t||e.push({type:\"htmltag\",content:e.src.slice(s,s+n[0].length),level:e.level}),e.pos+=n[0].length,0)))}],[\"entity\",function(e,t){var r,o,s=e.pos,i=e.posMax;if(38!==e.src.charCodeAt(s))return!1;if(s+1<i)if(35===e.src.charCodeAt(s+1)){if(o=e.src.slice(s).match(Ae))return t||(r=\"x\"===o[1][0].toLowerCase()?parseInt(o[1].slice(1),16):parseInt(o[1],10),e.pending+=l(r)?c(r):c(65533)),e.pos+=o[0].length,!0}else if(o=e.src.slice(s).match(ye)){var a=n(o[1]);if(o[1]!==a)return t||(e.pending+=a),e.pos+=o[0].length,!0}return t||(e.pending+=\"&\"),e.pos++,!0}]];function we(){this.ruler=new C;for(var e=0;e<xe.length;e++)this.ruler.push(xe[e][0],xe[e][1]);this.validateLink=Ce}function Ce(e){var t=e.trim().toLowerCase();return-1===(t=g(t)).indexOf(\":\")||-1===[\"vbscript\",\"javascript\",\"file\",\"data\"].indexOf(t.split(\":\")[0])}we.prototype.skipToken=function(e){var t,r,n=this.ruler.getRules(\"\"),o=n.length,s=e.pos;if((r=e.cacheGet(s))>0)e.pos=r;else{for(t=0;t<o;t++)if(n[t](e,!0))return void e.cacheSet(s,e.pos);e.pos++,e.cacheSet(s,e.pos)}},we.prototype.tokenize=function(e){for(var t,r,n=this.ruler.getRules(\"\"),o=n.length,s=e.posMax;e.pos<s;){for(r=0;r<o&&!(t=n[r](e,!1));r++);if(t){if(e.pos>=s)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},we.prototype.parse=function(e,t,r,n){var o=new E(e,this,t,r,n);this.tokenize(o)};var Ee={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{rules:[\"block\",\"inline\",\"references\",\"replacements\",\"smartquotes\",\"references\",\"abbr2\",\"footnote_tail\"]},block:{rules:[\"blockquote\",\"code\",\"fences\",\"footnote\",\"heading\",\"hr\",\"htmlblock\",\"lheading\",\"list\",\"paragraph\",\"table\"]},inline:{rules:[\"autolink\",\"backticks\",\"del\",\"emphasis\",\"entity\",\"escape\",\"footnote_ref\",\"htmltag\",\"links\",\"newline\",\"text\"]}}},full:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{},block:{},inline:{}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{rules:[\"block\",\"inline\",\"references\",\"abbr2\"]},block:{rules:[\"blockquote\",\"code\",\"fences\",\"heading\",\"hr\",\"htmlblock\",\"lheading\",\"list\",\"paragraph\"]},inline:{rules:[\"autolink\",\"backticks\",\"emphasis\",\"entity\",\"escape\",\"htmltag\",\"links\",\"newline\",\"text\"]}}}};function De(e,t,r){this.src=t,this.env=r,this.options=e.options,this.tokens=[],this.inlineMode=!1,this.inline=e.inline,this.block=e.block,this.renderer=e.renderer,this.typographer=e.typographer}function _e(e,t){\"string\"!=typeof e&&(t=e,e=\"default\"),t&&null!=t.linkify&&console.warn(\"linkify option is removed. Use linkify plugin instead:\\n\\nimport Remarkable from 'remarkable';\\nimport linkify from 'remarkable/linkify';\\nnew Remarkable().use(linkify)\\n\"),this.inline=new we,this.block=new te,this.core=new G,this.renderer=new w,this.ruler=new C,this.options={},this.configure(Ee[e]),this.set(t||{})}function Be(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}function qe(e,t){for(var r=e.length-1;r>=0;r--)!0===t(e[r])&&e.splice(r,1)}function Fe(e){throw new Error(\"Unhandled case for value: '\"+e+\"'\")}_e.prototype.set=function(e){i(this.options,e)},_e.prototype.configure=function(e){var t=this;if(!e)throw new Error(\"Wrong `remarkable` preset, check name/content\");e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(r){e.components[r].rules&&t[r].ruler.enable(e.components[r].rules,!0)})},_e.prototype.use=function(e,t){return e(this,t),this},_e.prototype.parse=function(e,t){var r=new De(this,e,t);return this.core.process(r),r.tokens},_e.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)},_e.prototype.parseInline=function(e,t){var r=new De(this,e,t);return r.inlineMode=!0,this.core.process(r),r.tokens},_e.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};var Me=function(){function e(e){void 0===e&&(e={}),this.tagName=\"\",this.attrs={},this.innerHTML=\"\",this.whitespaceRegex=/\\s+/,this.tagName=e.tagName||\"\",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||\"\"}return e.prototype.setTagName=function(e){return this.tagName=e,this},e.prototype.getTagName=function(){return this.tagName||\"\"},e.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},e.prototype.getAttr=function(e){return this.getAttrs()[e]},e.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(e){return this.setAttr(\"class\",e)},e.prototype.addClass=function(e){for(var t,r=this.getClass(),n=this.whitespaceRegex,o=r?r.split(n):[],s=e.split(n);t=s.shift();)-1===Be(o,t)&&o.push(t);return this.getAttrs().class=o.join(\" \"),this},e.prototype.removeClass=function(e){for(var t,r=this.getClass(),n=this.whitespaceRegex,o=r?r.split(n):[],s=e.split(n);o.length&&(t=s.shift());){var i=Be(o,t);-1!==i&&o.splice(i,1)}return this.getAttrs().class=o.join(\" \"),this},e.prototype.getClass=function(){return this.getAttrs().class||\"\"},e.prototype.hasClass=function(e){return-1!==(\" \"+this.getClass()+\" \").indexOf(\" \"+e+\" \")},e.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},e.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},e.prototype.getInnerHTML=function(){return this.innerHTML||\"\"},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return[\"<\",e,t=t?\" \"+t:\"\",\">\",this.getInnerHtml(),\"</\",e,\">\"].join(\"\")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return\"\";var e=this.getAttrs(),t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(r+'=\"'+e[r]+'\"');return t.join(\" \")},e}();var Se=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className=\"\",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||\"\"}return e.prototype.build=function(e){return new Me({tagName:\"a\",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},r=this.createCssClass(e);return r&&(t.class=r),this.newWindow&&(t.target=\"_blank\",t.rel=\"noopener noreferrer\"),this.truncate&&this.truncate.length&&this.truncate.length<e.getAnchorText().length&&(t.title=e.getAnchorHref()),t},e.prototype.createCssClass=function(e){var t=this.className;if(t){for(var r=[t],n=e.getCssClassSuffixes(),o=0,s=n.length;o<s;o++)r.push(t+\"-\"+n[o]);return r.join(\" \")}return\"\"},e.prototype.processAnchorText=function(e){return e=this.doTruncate(e)},e.prototype.doTruncate=function(e){var t=this.truncate;if(!t||!t.length)return e;var r=t.length,n=t.location;return\"smart\"===n?function(e,t,r){var n,o;null==r?(r=\"…\",o=3,n=8):(o=r.length,n=r.length);var s=function(e){var t=\"\";return e.scheme&&e.host&&(t+=e.scheme+\"://\"),e.host&&(t+=e.host),e.path&&(t+=\"/\"+e.path),e.query&&(t+=\"?\"+e.query),e.fragment&&(t+=\"#\"+e.fragment),t},i=function(e,t){var n=t/2,o=Math.ceil(n),s=-1*Math.floor(n),i=\"\";return s<0&&(i=e.substr(s)),e.substr(0,o)+r+i};if(e.length<=t)return e;var a=t-o,u=function(e){var t={},r=e,n=r.match(/^([a-z]+):\\/\\//i);return n&&(t.scheme=n[1],r=r.substr(n[0].length)),(n=r.match(/^(.*?)(?=(\\?|#|\\/|$))/i))&&(t.host=n[1],r=r.substr(n[0].length)),(n=r.match(/^\\/(.*?)(?=(\\?|#|$))/i))&&(t.path=n[1],r=r.substr(n[0].length)),(n=r.match(/^\\?(.*?)(?=(#|$))/i))&&(t.query=n[1],r=r.substr(n[0].length)),(n=r.match(/^#(.*?)$/i))&&(t.fragment=n[1]),t}(e);if(u.query){var l=u.query.match(/^(.*?)(?=(\\?|\\#))(.*?)$/i);l&&(u.query=u.query.substr(0,l[1].length),e=s(u))}if(e.length<=t)return e;if(u.host&&(u.host=u.host.replace(/^www\\./,\"\"),e=s(u)),e.length<=t)return e;var c=\"\";if(u.host&&(c+=u.host),c.length>=a)return u.host.length==t?(u.host.substr(0,t-o)+r).substr(0,a+n):i(c,a).substr(0,a+n);var p=\"\";if(u.path&&(p+=\"/\"+u.path),u.query&&(p+=\"?\"+u.query),p){if((c+p).length>=a)return(c+p).length==t?(c+p).substr(0,t):(c+i(p,a-c.length)).substr(0,a+n);c+=p}if(u.fragment){var h=\"#\"+u.fragment;if((c+h).length>=a)return(c+h).length==t?(c+h).substr(0,t):(c+i(h,a-c.length)).substr(0,a+n);c+=h}if(u.scheme&&u.host){var f=u.scheme+\"://\";if((c+f).length<a)return(f+c).substr(0,t)}if(c.length<=t)return c;var g=\"\";return a>0&&(g=c.substr(-1*Math.floor(a/2))),(c.substr(0,Math.ceil(a/2))+r+g).substr(0,a+n)}(e,r):\"middle\"===n?function(e,t,r){if(e.length<=t)return e;var n,o;null==r?(r=\"…\",n=8,o=3):(n=r.length,o=r.length);var s=t-o,i=\"\";return s>0&&(i=e.substr(-1*Math.floor(s/2))),(e.substr(0,Math.ceil(s/2))+r+i).substr(0,s+n)}(e,r):function(e,t,r){return function(e,t,r){var n;return e.length>t&&(null==r?(r=\"…\",n=3):n=r.length,e=e.substring(0,t-n)+r),e}(e,t,r)}(e,r)},e}(),Te=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText=\"\",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),Le=function(e,t){return(Le=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function Re(e,t){function r(){this.constructor=e}Le(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var Ne=function(){return(Ne=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},ze=function(e){function t(t){var r=e.call(this,t)||this;return r.email=\"\",r.email=t.email,r}return Re(t,e),t.prototype.getType=function(){return\"email\"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return\"mailto:\"+this.email},t.prototype.getAnchorText=function(){return this.email},t}(Te),Pe=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\"\",r.hashtag=\"\",r.serviceName=t.serviceName,r.hashtag=t.hashtag,r}return Re(t,e),t.prototype.getType=function(){return\"hashtag\"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var e=this.serviceName,t=this.hashtag;switch(e){case\"twitter\":return\"https://twitter.com/hashtag/\"+t;case\"facebook\":return\"https://www.facebook.com/hashtag/\"+t;case\"instagram\":return\"https://instagram.com/explore/tags/\"+t;default:throw new Error(\"Unknown service name to point hashtag to: \"+e)}},t.prototype.getAnchorText=function(){return\"#\"+this.hashtag},t}(Te),je=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\"twitter\",r.mention=\"\",r.mention=t.mention,r.serviceName=t.serviceName,r}return Re(t,e),t.prototype.getType=function(){return\"mention\"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case\"twitter\":return\"https://twitter.com/\"+this.mention;case\"instagram\":return\"https://instagram.com/\"+this.mention;case\"soundcloud\":return\"https://soundcloud.com/\"+this.mention;default:throw new Error(\"Unknown service name to point mention to: \"+this.serviceName)}},t.prototype.getAnchorText=function(){return\"@\"+this.mention},t.prototype.getCssClassSuffixes=function(){var t=e.prototype.getCssClassSuffixes.call(this),r=this.getServiceName();return r&&t.push(r),t},t}(Te),Ie=function(e){function t(t){var r=e.call(this,t)||this;return r.number=\"\",r.plusSign=!1,r.number=t.number,r.plusSign=t.plusSign,r}return Re(t,e),t.prototype.getType=function(){return\"phone\"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return\"tel:\"+(this.plusSign?\"+\":\"\")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t}(Te),Oe=function(e){function t(t){var r=e.call(this,t)||this;return r.url=\"\",r.urlMatchType=\"scheme\",r.protocolUrlMatch=!1,r.protocolRelativeMatch=!1,r.stripPrefix={scheme:!0,www:!0},r.stripTrailingSlash=!0,r.decodePercentEncoding=!0,r.schemePrefixRegex=/^(https?:\\/\\/)?/i,r.wwwPrefixRegex=/^(https?:\\/\\/)?(www\\.)?/i,r.protocolRelativeRegex=/^\\/\\//,r.protocolPrepended=!1,r.urlMatchType=t.urlMatchType,r.url=t.url,r.protocolUrlMatch=t.protocolUrlMatch,r.protocolRelativeMatch=t.protocolRelativeMatch,r.stripPrefix=t.stripPrefix,r.stripTrailingSlash=t.stripTrailingSlash,r.decodePercentEncoding=t.decodePercentEncoding,r}return Re(t,e),t.prototype.getType=function(){return\"url\"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var e=this.url;return this.protocolRelativeMatch||this.protocolUrlMatch||this.protocolPrepended||(e=this.url=\"http://\"+e,this.protocolPrepended=!0),e},t.prototype.getAnchorHref=function(){return this.getUrl().replace(/&/g,\"&\")},t.prototype.getAnchorText=function(){var e=this.getMatchedText();return this.protocolRelativeMatch&&(e=this.stripProtocolRelativePrefix(e)),this.stripPrefix.scheme&&(e=this.stripSchemePrefix(e)),this.stripPrefix.www&&(e=this.stripWwwPrefix(e)),this.stripTrailingSlash&&(e=this.removeTrailingSlash(e)),this.decodePercentEncoding&&(e=this.removePercentEncoding(e)),e},t.prototype.stripSchemePrefix=function(e){return e.replace(this.schemePrefixRegex,\"\")},t.prototype.stripWwwPrefix=function(e){return e.replace(this.wwwPrefixRegex,\"$1\")},t.prototype.stripProtocolRelativePrefix=function(e){return e.replace(this.protocolRelativeRegex,\"\")},t.prototype.removeTrailingSlash=function(e){return\"/\"===e.charAt(e.length-1)&&(e=e.slice(0,-1)),e},t.prototype.removePercentEncoding=function(e){var t=e.replace(/%22/gi,\""\").replace(/%26/gi,\"&\").replace(/%27/gi,\"'\").replace(/%3C/gi,\"<\").replace(/%3E/gi,\">\");try{return decodeURIComponent(t)}catch(e){return t}},t}(Te),Ue=function(e){this.__jsduckDummyDocProp=null,this.tagBuilder=e.tagBuilder},He=/[A-Za-z]/,Ve=/[0-9]/,Ge=/\\s/,$e=/['\"]/,Ze=/[\\x00-\\x1F\\x7F]/,We=/A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC/.source,Je=We+/\\u00a9\\u00ae\\u2000-\\u3300\\ud83c\\ud000-\\udfff\\ud83d\\ud000-\\udfff\\ud83e\\ud000-\\udfff/.source+/\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D4-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F/.source,Ye=/0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19/.source,Ke=Je+Ye,Qe=Je+Ye,Xe=\"(?:[\"+Ye+\"]{1,3}\\\\.){3}[\"+Ye+\"]{1,3}\",et=\"[\"+Qe+\"](?:[\"+Qe+\"\\\\-]{0,61}[\"+Qe+\"])?\",tt=function(e){return\"(?=(\"+et+\"))\\\\\"+e},rt=function(e){return\"(?:\"+tt(e)+\"(?:\\\\.\"+tt(e+1)+\"){0,126}|\"+Xe+\")\"},nt=new RegExp(\"[\"+Qe+\"]\"),ot=/(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--3oq18vl8pn36a|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|spreadbetting|travelchannel|wolterskluwer|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|rightathome|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pbt977c|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nationwide|newholland|nextdirect|onyourside|properties|protection|prudential|realestate|republican|restaurant|schaeffler|swiftcover|tatamotors|technology|telefonica|university|vistaprint|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|fujixerox|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|honeywell|institute|insurance|kuokgroup|ladbrokes|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--tckwe|xn--vhquv|yodobashi|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|chrysler|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|esurance|etisalat|everbank|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|movistar|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|symantec|training|uconnect|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|cartier|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|iselect|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lancome|lanxess|lasalle|latrobe|leclerc|liaison|limited|lincoln|markets|metlife|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|shriram|singles|staples|starhub|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|الجزائر|العليان|پاکستان|كاثوليك|موبايلي|இந்தியா|abarth|abbott|abbvie|active|africa|agency|airbus|airtel|alipay|alsace|alstom|anquan|aramco|author|bayern|beauty|berlin|bharti|blanco|bostik|boston|broker|camera|career|caseih|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|mobily|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|piaget|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|warman|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|dodge|drive|dubai|earth|edeka|email|epost|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|intel|irish|iveco|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|lupin|macys|mango|media|miami|money|mopar|movie|nadex|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|zippo|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|aigo|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|doha|duck|duns|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|rmit|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scor|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|グーグル|クラウド|ポイント|大众汽车|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bnl|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceb|ceo|cfa|cfd|com|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jcp|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|qvc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|srl|srt|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ストア|セール|みんな|中文网|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|工行|广东|微博|慈善|手机|手表|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|珠宝|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/,st=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.localPartCharRegex=new RegExp(\"[\"+Qe+\"!#$%&'*+/=?^_`{|}~-]\"),t.strictTldRegex=new RegExp(\"^\"+ot.source+\"$\"),t}return Re(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,r=this.localPartCharRegex,n=this.strictTldRegex,o=[],s=e.length,i=new it,a={m:\"a\",a:\"i\",i:\"l\",l:\"t\",t:\"o\",o:\":\"},u=0,l=0,c=i;u<s;){var p=e.charAt(u);switch(l){case 0:h(p);break;case 1:f(e.charAt(u-1),p);break;case 2:g(p);break;case 3:d(p);break;case 4:m(p);break;case 5:b(p);break;case 6:v(p);break;case 7:k(p);break;default:Fe(l)}u++}return x(),o;function h(e){\"m\"===e?A(1):r.test(e)&&A()}function f(e,t){\":\"===e?r.test(t)?(l=2,c=new it(Ne({},c,{hasMailtoPrefix:!0}))):y():a[e]===t||(r.test(t)?l=2:\".\"===t?l=3:\"@\"===t?l=4:y())}function g(e){\".\"===e?l=3:\"@\"===e?l=4:r.test(e)||y()}function d(e){\".\"===e?y():\"@\"===e?y():r.test(e)?l=2:y()}function m(e){nt.test(e)?l=5:y()}function b(e){\".\"===e?l=7:\"-\"===e?l=6:nt.test(e)||x()}function v(e){\"-\"===e||\".\"===e?x():nt.test(e)?l=5:x()}function k(e){\".\"===e||\"-\"===e?x():nt.test(e)?(l=5,c=new it(Ne({},c,{hasDomainDot:!0}))):x()}function A(e){void 0===e&&(e=2),l=e,c=new it({idx:u})}function y(){l=0,c=i}function x(){if(c.hasDomainDot){var r=e.slice(c.idx,u);/[-.]$/.test(r)&&(r=r.slice(0,-1));var s=c.hasMailtoPrefix?r.slice(\"mailto:\".length):r;(function(e){var t=(e.split(\".\").pop()||\"\").toLowerCase();return n.test(t)})(s)&&o.push(new ze({tagBuilder:t,matchedText:r,offset:c.idx,email:s}))}y()}},t}(Ue),it=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.hasMailtoPrefix=!!e.hasMailtoPrefix,this.hasDomainDot=!!e.hasDomainDot},at=function(){function e(){}return e.isValid=function(e,t){return!(t&&!this.isValidUriScheme(t)||this.urlMatchDoesNotHaveProtocolOrDot(e,t)||this.urlMatchDoesNotHaveAtLeastOneWordChar(e,t)&&!this.isValidIpAddress(e)||this.containsMultipleDots(e))},e.isValidIpAddress=function(e){var t=new RegExp(this.hasFullProtocolRegex.source+this.ipRegex.source);return null!==e.match(t)},e.containsMultipleDots=function(e){var t=e;return this.hasFullProtocolRegex.test(e)&&(t=e.split(\"://\")[1]),t.split(\"/\")[0].indexOf(\"..\")>-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),r=t&&t[0].toLowerCase();return\"javascript:\"!==r&&\"vbscript:\"!==r},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!(!e||t&&this.hasFullProtocolRegex.test(t)||-1!==e.indexOf(\".\"))},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t)&&!this.hasWordCharAfterProtocolRegex.test(e)},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\\/\\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(\":[^\\\\s]*?[\"+We+\"]\"),e.ipRegex=/[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?(:[0-9]*)?\\/?$/,e}(),ut=function(e){function t(t){var r,n=e.call(this,t)||this;return n.stripPrefix={scheme:!0,www:!0},n.stripTrailingSlash=!0,n.decodePercentEncoding=!0,n.matcherRegex=(r=new RegExp(\"[/?#](?:[\"+Qe+\"\\\\-+&@#/%=~_()|'$*\\\\[\\\\]?!:,.;✓]*[\"+Qe+\"\\\\-+&@#/%=~_()|'$*\\\\[\\\\]✓])?\"),new RegExp([\"(?:\",\"(\",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\\/\\/)(?!\\d+\\/?)(?:\\/\\/)?)/.source,rt(2),\")\",\"|\",\"(\",\"(//)?\",/(?:www\\.)/.source,rt(6),\")\",\"|\",\"(\",\"(//)?\",rt(10)+\"\\\\.\",ot.source,\"(?![-\"+Ke+\"])\",\")\",\")\",\"(?::[0-9]+)?\",\"(?:\"+r.source+\")?\"].join(\"\"),\"gi\")),n.wordCharRegExp=new RegExp(\"[\"+Qe+\"]\"),n.stripPrefix=t.stripPrefix,n.stripTrailingSlash=t.stripTrailingSlash,n.decodePercentEncoding=t.decodePercentEncoding,n}return Re(t,e),t.prototype.parseMatches=function(e){for(var t,r=this.matcherRegex,n=this.stripPrefix,o=this.stripTrailingSlash,s=this.decodePercentEncoding,i=this.tagBuilder,a=[],u=function(){var r=t[0],u=t[1],c=t[4],p=t[5],h=t[9],f=t.index,g=p||h,d=e.charAt(f-1);if(!at.isValid(r,u))return\"continue\";if(f>0&&\"@\"===d)return\"continue\";if(f>0&&g&&l.wordCharRegExp.test(d))return\"continue\";if(/\\?$/.test(r)&&(r=r.substr(0,r.length-1)),l.matchHasUnbalancedClosingParen(r))r=r.substr(0,r.length-1);else{var m=l.matchHasInvalidCharAfterTld(r,u);m>-1&&(r=r.substr(0,m))}var b=[\"http://\",\"https://\"].find(function(e){return!!u&&-1!==u.indexOf(e)});if(b){var v=r.indexOf(b);r=r.substr(v),u=u.substr(v),f+=v}var k=u?\"scheme\":c?\"www\":\"tld\",A=!!u;a.push(new Oe({tagBuilder:i,matchedText:r,offset:f,urlMatchType:k,url:r,protocolUrlMatch:A,protocolRelativeMatch:!!g,stripPrefix:n,stripTrailingSlash:o,decodePercentEncoding:s}))},l=this;null!==(t=r.exec(e));)u();return a},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,r=e.charAt(e.length-1);if(\")\"===r)t=\"(\";else{if(\"]\"!==r)return!1;t=\"[\"}for(var n=0,o=0,s=e.length-1;o<s;o++){var i=e.charAt(o);i===t?n++:i===r&&(n=Math.max(n-1,0))}return 0===n},t.prototype.matchHasInvalidCharAfterTld=function(e,t){if(!e)return-1;var r=0;t&&(r=e.indexOf(\":\"),e=e.slice(r));var n=new RegExp(\"^((.?//)?[-.\"+Qe+\"]*[-\"+Qe+\"]\\\\.[-\"+Qe+\"]+)\").exec(e);return null===n?-1:(r+=n[1].length,e=e.slice(n[1].length),/^[^-.A-Za-z0-9:\\/?#]/.test(e)?r:-1)},t}(Ue),lt=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\"twitter\",r.matcherRegex=new RegExp(\"#[_\"+Qe+\"]{1,139}(?![_\"+Qe+\"])\",\"g\"),r.nonWordCharRegex=new RegExp(\"[^\"+Qe+\"]\"),r.serviceName=t.serviceName,r}return Re(t,e),t.prototype.parseMatches=function(e){for(var t,r=this.matcherRegex,n=this.nonWordCharRegex,o=this.serviceName,s=this.tagBuilder,i=[];null!==(t=r.exec(e));){var a=t.index,u=e.charAt(a-1);if(0===a||n.test(u)){var l=t[0],c=t[0].slice(1);i.push(new Pe({tagBuilder:s,matchedText:l,offset:a,serviceName:o,hashtag:c}))}}return i},t}(Ue),ct=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=/(?:(?:(?:(\\+)?\\d{1,3}[-\\040.]?)?\\(?\\d{3}\\)?[-\\040.]?\\d{3}[-\\040.]?\\d{4})|(?:(\\+)(?:9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\\040.]?(?:\\d[-\\040.]?){6,12}\\d+))([,;]+[0-9]+#?)*/g,t}return Re(t,e),t.prototype.parseMatches=function(e){for(var t,r=this.matcherRegex,n=this.tagBuilder,o=[];null!==(t=r.exec(e));){var s=t[0],i=s.replace(/[^0-9,;#]/g,\"\"),a=!(!t[1]&&!t[2]),u=0==t.index?\"\":e.substr(t.index-1,1),l=e.substr(t.index+s.length,1),c=!u.match(/\\d/)&&!l.match(/\\d/);this.testMatch(t[3])&&this.testMatch(s)&&c&&o.push(new Ie({tagBuilder:n,matchedText:s,offset:t.index,number:i,plusSign:a}))}return o},t.prototype.testMatch=function(e){return/\\D/.test(e)},t}(Ue),pt=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\"twitter\",r.matcherRegexes={twitter:new RegExp(\"@[_\"+Qe+\"]{1,50}(?![_\"+Qe+\"])\",\"g\"),instagram:new RegExp(\"@[_.\"+Qe+\"]{1,30}(?![_\"+Qe+\"])\",\"g\"),soundcloud:new RegExp(\"@[-_.\"+Qe+\"]{1,50}(?![-_\"+Qe+\"])\",\"g\")},r.nonWordCharRegex=new RegExp(\"[^\"+Qe+\"]\"),r.serviceName=t.serviceName,r}return Re(t,e),t.prototype.parseMatches=function(e){var t,r=this.serviceName,n=this.matcherRegexes[this.serviceName],o=this.nonWordCharRegex,s=this.tagBuilder,i=[];if(!n)return i;for(;null!==(t=n.exec(e));){var a=t.index,u=e.charAt(a-1);if(0===a||o.test(u)){var l=t[0].replace(/\\.+$/g,\"\"),c=l.slice(1);i.push(new je({tagBuilder:s,matchedText:l,offset:a,serviceName:r,mention:c}))}}return i},t}(Ue);function ht(e,t){for(var r=t.onOpenTag,n=t.onCloseTag,o=t.onText,s=t.onComment,i=t.onDoctype,a=new ft,u=0,l=e.length,c=0,p=0,h=a;u<l;){var f=e.charAt(u);switch(c){case 0:g(f);break;case 1:d(f);break;case 2:b(f);break;case 3:m(f);break;case 4:v(f);break;case 5:k(f);break;case 6:A(f);break;case 7:y(f);break;case 8:x(f);break;case 9:w(f);break;case 10:C(f);break;case 11:E(f);break;case 12:D(f);break;case 13:_();break;case 14:B(f);break;case 15:q(f);break;case 16:F(f);break;case 17:M(f);break;case 18:S(f);break;case 19:T(f);break;case 20:L(f);break;default:Fe(c)}u++}function g(e){\"<\"===e&&N()}function d(e){\"!\"===e?c=13:\"/\"===e?(c=2,h=new ft(Ne({},h,{isClosing:!0}))):\"<\"===e?N():He.test(e)?(c=3,h=new ft(Ne({},h,{isOpening:!0}))):(c=0,h=a)}function m(e){Ge.test(e)?(h=new ft(Ne({},h,{name:P()})),c=4):\"<\"===e?N():\"/\"===e?(h=new ft(Ne({},h,{name:P()})),c=12):\">\"===e?(h=new ft(Ne({},h,{name:P()})),z()):He.test(e)||Ve.test(e)||\":\"===e||R()}function b(e){\">\"===e?R():He.test(e)?c=3:R()}function v(e){Ge.test(e)||(\"/\"===e?c=12:\">\"===e?z():\"<\"===e?N():\"=\"===e||$e.test(e)||Ze.test(e)?R():c=5)}function k(e){Ge.test(e)?c=6:\"/\"===e?c=12:\"=\"===e?c=7:\">\"===e?z():\"<\"===e?N():$e.test(e)&&R()}function A(e){Ge.test(e)||(\"/\"===e?c=12:\"=\"===e?c=7:\">\"===e?z():\"<\"===e?N():$e.test(e)?R():c=5)}function y(e){Ge.test(e)||('\"'===e?c=8:\"'\"===e?c=9:/[>=`]/.test(e)?R():\"<\"===e?N():c=10)}function x(e){'\"'===e&&(c=11)}function w(e){\"'\"===e&&(c=11)}function C(e){Ge.test(e)?c=4:\">\"===e?z():\"<\"===e&&N()}function E(e){Ge.test(e)?c=4:\"/\"===e?c=12:\">\"===e?z():\"<\"===e?N():(c=4,u--)}function D(e){\">\"===e?(h=new ft(Ne({},h,{isClosing:!0})),z()):c=4}function _(t){\"--\"===e.substr(u,2)?(u+=2,h=new ft(Ne({},h,{type:\"comment\"})),c=14):\"DOCTYPE\"===e.substr(u,7).toUpperCase()?(u+=7,h=new ft(Ne({},h,{type:\"doctype\"})),c=20):R()}function B(e){\"-\"===e?c=15:\">\"===e?R():c=16}function q(e){\"-\"===e?c=18:\">\"===e?R():c=16}function F(e){\"-\"===e&&(c=17)}function M(e){c=\"-\"===e?18:16}function S(e){\">\"===e?z():\"!\"===e?c=19:\"-\"===e||(c=16)}function T(e){\"-\"===e?c=17:\">\"===e?z():c=16}function L(e){\">\"===e?z():\"<\"===e&&N()}function R(){c=0,h=a}function N(){c=1,h=new ft({idx:u})}function z(){var t=e.slice(p,h.idx);t&&o(t,p),\"comment\"===h.type?s(h.idx):\"doctype\"===h.type?i(h.idx):(h.isOpening&&r(h.name,h.idx),h.isClosing&&n(h.name,h.idx)),R(),p=u+1}function P(){var t=h.idx+(h.isClosing?2:1);return e.slice(t,u).toLowerCase()}p<u&&function(){var t=e.slice(p,u);o(t,p),p=u+1}()}var ft=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.type=e.type||\"tag\",this.name=e.name||\"\",this.isOpening=!!e.isOpening,this.isClosing=!!e.isClosing},gt=function(){function e(t){void 0===t&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:\"end\"},this.className=\"\",this.replaceFn=null,this.context=void 0,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(t.urls),this.email=\"boolean\"==typeof t.email?t.email:this.email,this.phone=\"boolean\"==typeof t.phone?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=\"boolean\"==typeof t.newWindow?t.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(t.stripPrefix),this.stripTrailingSlash=\"boolean\"==typeof t.stripTrailingSlash?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=\"boolean\"==typeof t.decodePercentEncoding?t.decodePercentEncoding:this.decodePercentEncoding;var r=this.mention;if(!1!==r&&\"twitter\"!==r&&\"instagram\"!==r&&\"soundcloud\"!==r)throw new Error(\"invalid `mention` cfg - see docs\");var n=this.hashtag;if(!1!==n&&\"twitter\"!==n&&\"facebook\"!==n&&\"instagram\"!==n)throw new Error(\"invalid `hashtag` cfg - see docs\");this.truncate=this.normalizeTruncateCfg(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,r){return new e(r).link(t)},e.parse=function(t,r){return new e(r).parse(t)},e.prototype.normalizeUrlsCfg=function(e){return null==e&&(e=!0),\"boolean\"==typeof e?{schemeMatches:e,wwwMatches:e,tldMatches:e}:{schemeMatches:\"boolean\"!=typeof e.schemeMatches||e.schemeMatches,wwwMatches:\"boolean\"!=typeof e.wwwMatches||e.wwwMatches,tldMatches:\"boolean\"!=typeof e.tldMatches||e.tldMatches}},e.prototype.normalizeStripPrefixCfg=function(e){return null==e&&(e=!0),\"boolean\"==typeof e?{scheme:e,www:e}:{scheme:\"boolean\"!=typeof e.scheme||e.scheme,www:\"boolean\"!=typeof e.www||e.www}},e.prototype.normalizeTruncateCfg=function(e){return\"number\"==typeof e?{length:e,location:\"end\"}:function(e,t){for(var r in t)t.hasOwnProperty(r)&&void 0===e[r]&&(e[r]=t[r]);return e}(e||{},{length:Number.POSITIVE_INFINITY,location:\"end\"})},e.prototype.parse=function(e){var t=this,r=[\"a\",\"style\",\"script\"],n=0,o=[];return ht(e,{onOpenTag:function(e){r.indexOf(e)>=0&&n++},onText:function(e,r){if(0===n){var s=function(e,t){if(!t.global)throw new Error(\"`splitRegex` must have the 'g' flag set\");for(var r,n=[],o=0;r=t.exec(e);)n.push(e.substring(o,r.index)),n.push(r[0]),o=r.index+r[0].length;return n.push(e.substring(o)),n}(e,/( | |<|<|>|>|"|"|')/gi),i=r;s.forEach(function(e,r){if(r%2==0){var n=t.parseText(e,i);o.push.apply(o,n)}i+=e.length})}},onCloseTag:function(e){r.indexOf(e)>=0&&(n=Math.max(n-1,0))},onComment:function(e){},onDoctype:function(e){}}),o=this.compactMatches(o),o=this.removeUnwantedMatches(o)},e.prototype.compactMatches=function(e){e.sort(function(e,t){return e.getOffset()-t.getOffset()});for(var t=0;t<e.length-1;t++){var r=e[t],n=r.getOffset(),o=r.getMatchedText().length,s=n+o;if(t+1<e.length){if(e[t+1].getOffset()===n){var i=e[t+1].getMatchedText().length>o?t:t+1;e.splice(i,1);continue}e[t+1].getOffset()<s&&e.splice(t+1,1)}}return e},e.prototype.removeUnwantedMatches=function(e){return this.hashtag||qe(e,function(e){return\"hashtag\"===e.getType()}),this.email||qe(e,function(e){return\"email\"===e.getType()}),this.phone||qe(e,function(e){return\"phone\"===e.getType()}),this.mention||qe(e,function(e){return\"mention\"===e.getType()}),this.urls.schemeMatches||qe(e,function(e){return\"url\"===e.getType()&&\"scheme\"===e.getUrlMatchType()}),this.urls.wwwMatches||qe(e,function(e){return\"url\"===e.getType()&&\"www\"===e.getUrlMatchType()}),this.urls.tldMatches||qe(e,function(e){return\"url\"===e.getType()&&\"tld\"===e.getUrlMatchType()}),e},e.prototype.parseText=function(e,t){void 0===t&&(t=0),t=t||0;for(var r=this.getMatchers(),n=[],o=0,s=r.length;o<s;o++){for(var i=r[o].parseMatches(e),a=0,u=i.length;a<u;a++)i[a].setOffset(t+i[a].getOffset());n.push.apply(n,i)}return n},e.prototype.link=function(e){if(!e)return\"\";for(var t=this.parse(e),r=[],n=0,o=0,s=t.length;o<s;o++){var i=t[o];r.push(e.substring(n,i.getOffset())),r.push(this.createMatchReturnVal(i)),n=i.getOffset()+i.getMatchedText().length}return r.push(e.substring(n)),r.join(\"\")},e.prototype.createMatchReturnVal=function(e){var t;return this.replaceFn&&(t=this.replaceFn.call(this.context,e)),\"string\"==typeof t?t:!1===t?e.getMatchedText():t instanceof Me?t.toAnchorString():e.buildTag().toAnchorString()},e.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var e=this.getTagBuilder(),t=[new lt({tagBuilder:e,serviceName:this.hashtag}),new st({tagBuilder:e}),new ct({tagBuilder:e}),new pt({tagBuilder:e,serviceName:this.mention}),new ut({tagBuilder:e,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=t},e.prototype.getTagBuilder=function(){var e=this.tagBuilder;return e||(e=this.tagBuilder=new Se({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),e},e.version=\"3.11.0\",e.AnchorTagBuilder=Se,e.HtmlTag=Me,e.matcher={Email:st,Hashtag:lt,Matcher:Ue,Mention:pt,Phone:ct,Url:ut},e.match={Email:ze,Hashtag:Pe,Match:Te,Mention:je,Phone:Ie,Url:Oe},e}(),dt=/www|@|\\:\\/\\//;function mt(e){return/^<\\/a\\s*>/i.test(e)}function bt(){var e=[],t=new gt({stripPrefix:!1,url:!0,email:!0,replaceFn:function(t){switch(t.getType()){case\"url\":e.push({text:t.matchedText,url:t.getUrl()});break;case\"email\":e.push({text:t.matchedText,url:\"mailto:\"+t.getEmail().replace(/^mailto:/i,\"\")})}return!1}});return{links:e,autolinker:t}}function vt(e){var t,r,n,o,s,i,a,u,l,c,p,h,f,g,d=e.tokens,m=null;for(r=0,n=d.length;r<n;r++)if(\"inline\"===d[r].type)for(p=0,t=(o=d[r].children).length-1;t>=0;t--)if(\"link_close\"!==(s=o[t]).type){if(\"htmltag\"===s.type&&(g=s.content,/^<a[>\\s]/i.test(g)&&p>0&&p--,mt(s.content)&&p++),!(p>0)&&\"text\"===s.type&&dt.test(s.content)){if(m||(h=(m=bt()).links,f=m.autolinker),i=s.content,h.length=0,f.link(i),!h.length)continue;for(a=[],c=s.level,u=0;u<h.length;u++)e.inline.validateLink(h[u].url)&&((l=i.indexOf(h[u].text))&&a.push({type:\"text\",content:i.slice(0,l),level:c}),a.push({type:\"link_open\",href:h[u].url,title:\"\",level:c++}),a.push({type:\"text\",content:h[u].text,level:c}),a.push({type:\"link_close\",level:--c}),i=i.slice(l+h[u].text.length));i.length&&a.push({type:\"text\",content:i,level:c}),d[r].children=o=[].concat(o.slice(0,t),a,o.slice(t+1))}}else for(t--;o[t].level!==s.level&&\"link_open\"!==o[t].type;)t--}e.Remarkable=_e,e.linkify=function(e){e.core.ruler.push(\"linkify\",vt)},e.utils=A,Object.defineProperty(e,\"__esModule\",{value:!0})});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/markdown/remarkable.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/markdown/images/new-markdown-button": {
"title": "$:/plugins/tiddlywiki/markdown/images/new-markdown-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-new-markdown-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <rect x=\"80\" y=\"96\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"96\" y=\"80\" width=\"16\" height=\"48\" rx=\"8\"></rect>\n <path d=\"M3.23876972,39.5396716 C3.23876972,35.9653274 6.13586353,33.0691646 9.7141757,33.0691646 L98.1283744,33.0691646 C101.706101,33.0691646 104.60378,35.9646626 104.60378,39.5396716 L104.60378,84.8296213 C104.60378,88.4039654 101.706687,91.3001282 98.1283744,91.3001282 L9.7141757,91.3001282 C6.13644944,91.3001282 3.23876972,88.4046302 3.23876972,84.8296213 L3.23876972,39.5396716 L3.23876972,39.5396716 Z M-2.15298617,39.5396716 L-2.15298617,84.8296213 C-2.15298617,91.3833243 3.15957363,96.6918841 9.7141757,96.6918841 L98.1283744,96.6918841 C104.684083,96.6918841 109.995536,91.382138 109.995536,84.8296213 L109.995536,39.5396716 C109.995536,32.9859686 104.682977,27.6774087 98.1283744,27.6774087 L9.7141757,27.6774087 C3.15846686,27.6774087 -2.15298617,32.9871549 -2.15298617,39.5396716 Z M14.0222815,80.5166164 L14.0222815,43.8526764 L24.8057933,43.8526764 L35.589305,57.3320661 L46.3728168,43.8526764 L57.1563286,43.8526764 L57.1563286,80.5166164 L46.3728168,80.5166164 L46.3728168,59.4887685 L35.589305,72.9681582 L24.8057933,59.4887685 L24.8057933,80.5166164 L14.0222815,80.5166164 Z M81.4192301,80.5166164 L65.2439624,62.723822 L76.0274742,62.723822 L76.0274742,43.8526764 L86.810986,43.8526764 L86.810986,62.723822 L97.5944978,62.723822 L81.4192301,80.5166164 Z\"transform=\"translate(53.921275, 62.184646) rotate(-60.000000) translate(-53.921275, -62.184646) \"></path>\n </g>\n</svg>"
},
"$:/plugins/tiddlywiki/markdown/new-markdown-button": {
"title": "$:/plugins/tiddlywiki/markdown/new-markdown-button",
"tags": "$:/tags/PageControls",
"caption": "{{$:/plugins/tiddlywiki/markdown/images/new-markdown-button}} {{$:/language/Buttons/NewMarkdown/Caption}}",
"description": "{{$:/language/Buttons/NewMarkdown/Hint}}",
"list-after": "$:/core/ui/Buttons/new-tiddler",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/NewMarkdown/Hint}} aria-label={{$:/language/Buttons/NewMarkdown/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=\"text/x-markdown\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/plugins/tiddlywiki/markdown/images/new-markdown-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewMarkdown/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/plugins/tiddlywiki/markdown/readme": {
"title": "$:/plugins/tiddlywiki/markdown/readme",
"text": "This is a TiddlyWiki plugin for parsing Markdown text, using the [[Remarkable|https://github.com/jonschlinkert/remarkable]] library.\n\nIt is completely self-contained, and doesn't need an Internet connection in order to work. It works both in the browser and under Node.js.\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/markdown]]\n"
},
"$:/plugins/tiddlywiki/markdown/usage": {
"title": "$:/plugins/tiddlywiki/markdown/usage",
"text": "! Plugin Configuration\n\n|!Config |!Default |!Description |\n| <code>[[breaks|$:/config/markdown/breaks]]</code>| ``false``|Remarkable library config: Convert '\\n' in paragraphs into ``<br>`` |\n| <code>[[linkify|$:/config/markdown/linkify]]</code>| ``false``|Remarkable library config: Autoconvert URL-like text to links |\n| <code>[[linkNewWindow|$:/config/markdown/linkNewWindow]]</code>| ``true``|For external links, should clicking on them open a new window/tab automatically? |\n| <code>[[quotes|$:/config/markdown/quotes]]</code>| ``“”‘’``|Remarkable library config: Double + single quotes replacement pairs, when ``typographer`` enabled |\n| <code>[[renderWikiText|$:/config/markdown/renderWikiText]]</code>| ``true``|After Markdown is parsed, should any text elements be handed off to the ~WikiText parser for further processing? |\n| <code>[[renderWikiTextPragma|$:/config/markdown/renderWikiTextPragma]]</code>| ``\\rules only html image macrocallinline syslink transcludeinline wikilink filteredtranscludeblock macrocallblock transcludeblock``|When handing off to the ~WikiText parser, what pragma rules should it follow? |\n| <code>[[typographer|$:/config/markdown/typographer]]</code>| ``false``|Remarkable library config: Enable some language-neutral replacement + quotes beautification |\n\n! Creating ~WikiLinks\n\nCreate wiki links with the usual Markdown link syntax targeting `#` and the target tiddler title:\n\n```\n[link text](#TiddlerTitle)\n```\n\nIf the target tiddler has a space in its name, that name must be URL-escaped to be detected as a URL:\n\n```\n[link text](#Test%20Tiddler)\n```\n\n! Images\n\nMarkdown image syntax can be used to reference images by tiddler title or an external URI. For example:\n\n```\n\n\n\n```\n"
},
"$:/plugins/tiddlywiki/markdown/wrapper.js": {
"title": "$:/plugins/tiddlywiki/markdown/wrapper.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/markdown/wrapper.js\ntype: application/javascript\nmodule-type: parser\n\nWraps up the remarkable parser for use as a Parser in TiddlyWiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar r = require(\"$:/plugins/tiddlywiki/markdown/remarkable.js\");\n\nvar Remarkable = r.Remarkable,\n\tlinkify = r.linkify,\n\tutils = r.utils;\n\n///// Set up configuration options /////\nfunction parseAsBoolean(tiddlerName) {\n\treturn $tw.wiki.getTiddlerText(tiddlerName).toLowerCase() === \"true\";\n}\nvar pluginOpts = {\n\tlinkNewWindow: parseAsBoolean(\"$:/config/markdown/linkNewWindow\"),\n\trenderWikiText: parseAsBoolean(\"$:/config/markdown/renderWikiText\"),\n\trenderWikiTextPragma: $tw.wiki.getTiddlerText(\"$:/config/markdown/renderWikiTextPragma\").trim()\n};\nvar remarkableOpts = {\n\tbreaks: parseAsBoolean(\"$:/config/markdown/breaks\"),\n\tquotes: $tw.wiki.getTiddlerText(\"$:/config/markdown/quotes\"),\n\ttypographer: parseAsBoolean(\"$:/config/markdown/typographer\")\n};\nvar accumulatingTypes = {\n\t\"text\": true,\n\t\"softbreak\": true\n};\n\nvar md = new Remarkable(remarkableOpts);\n\nif (parseAsBoolean(\"$:/config/markdown/linkify\")) {\n\tmd = md.use(linkify);\n}\n\nfunction findTagWithType(nodes, startPoint, type, level) {\n\tfor (var i = startPoint; i < nodes.length; i++) {\n\t\tif (nodes[i].type === type && nodes[i].level === level) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Remarkable creates nodes that look like:\n * [\n * { type: 'paragraph_open'},\n * { type: 'inline', content: 'Hello World', children:[{type: 'text', content: 'Hello World'}]},\n * { type: 'paragraph_close'}\n * ]\n *\n * But TiddlyWiki wants the Parser (https://tiddlywiki.com/dev/static/Parser.html) to emit nodes like:\n *\n * [\n * { type: 'element', tag: 'p', children: [{type: 'text', text: 'Hello World'}]}\n * ]\n */\nfunction convertNodes(remarkableTree, isStartOfInline) {\n\tlet out = [];\n\tvar accumulatedText = '';\n\tfunction withChildren(currentIndex, currentLevel, closingType, nodes, callback) {\n\t\tvar j = findTagWithType(nodes, currentIndex + 1, closingType, currentLevel);\n\t\tif (j === false) {\n\t\t\tconsole.error(\"Failed to find a \" + closingType + \" node after position \" + currentIndex);\n\t\t\tconsole.log(nodes);\n\t\t\treturn currentIndex + 1;\n\t\t}\n\t\tlet children = convertNodes(nodes.slice(currentIndex + 1, j));\n\t\tcallback(children);\n\t\treturn j;\n\t}\n\tfunction wrappedElement(elementTag, currentIndex, currentLevel, closingType, nodes) {\n\t\treturn withChildren(currentIndex, currentLevel, closingType, nodes, function(children) {\n\t\t\tout.push({\n\t\t\t\ttype: \"element\",\n\t\t\t\ttag: elementTag,\n\t\t\t\tchildren: children\n\t\t\t});\n\t\t});\n\t}\n\n\tfor (var i = 0; i < remarkableTree.length; i++) {\n\t\tvar currentNode = remarkableTree[i];\n\t\tswitch (currentNode.type) {\n\t\tcase \"paragraph_open\":\n\t\t\ti = wrappedElement(\"p\", i, currentNode.level, \"paragraph_close\", remarkableTree);\n\t\t\tbreak;\n\n\t\tcase \"heading_open\":\n\t\t\ti = wrappedElement(\"h\" + currentNode.hLevel, i, currentNode.level, \"heading_close\", remarkableTree);\n\t\t\tbreak;\n\n\t\tcase \"bullet_list_open\":\n\t\t\ti = wrappedElement(\"ul\", i, currentNode.level, \"bullet_list_close\", remarkableTree);\n\t\t\tbreak;\n\n\t\tcase \"ordered_list_open\":\n\t\t\ti = wrappedElement('ol', i, currentNode.level,'ordered_list_close', remarkableTree);\n\t\t\tbreak;\n\n\t\tcase \"list_item_open\":\n\t\t\ti = wrappedElement(\"li\", i, currentNode.level, \"list_item_close\", remarkableTree);\n\t\t\tbreak;\n\n\t\tcase \"link_open\":\n\t\t\ti = withChildren(i, currentNode.level, \"link_close\", remarkableTree, function(children) {\n\t\t\t\tif (currentNode.href[0] !== \"#\") {\n\t\t\t\t\t// External link\n\t\t\t\t\tvar attributes = {\n\t\t\t\t\t\tclass: { type: \"string\", value: \"tc-tiddlylink-external\" },\n\t\t\t\t\t\thref: { type: \"string\", value: currentNode.href },\n\t\t\t\t\t\trel: { type: \"string\", value: \"noopener noreferrer\" }\n\t\t\t\t\t};\n\t\t\t\t\tif (pluginOpts.linkNewWindow) {\n\t\t\t\t\t\tattributes.target = { type: \"string\", value: \"_blank\" };\n\t\t\t\t\t}\n\t\t\t\t\tout.push({\n\t\t\t\t\t\ttype: \"element\",\n\t\t\t\t\t\ttag: \"a\",\n\t\t\t\t\t\tattributes: attributes,\n\t\t\t\t\t\tchildren: children\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Internal link\n\t\t\t\t\tout.push({\n\t\t\t\t\t\ttype: \"link\",\n\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\tto: { type: \"string\", value: decodeURI(currentNode.href.substr(1)) }\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: children\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\tbreak;\n\n\t\tcase \"code\":\n\t\t\tout.push({\n\t\t\t\ttype: \"element\",\n\t\t\t\ttag: currentNode.block ? \"pre\" : \"code\",\n\t\t\t\tchildren: [{ type: \"text\", text: currentNode.content }]\n\t\t\t});\n\t\t\tbreak;\n\n\t\tcase \"fence\":\n\t\t\tout.push({\n\t\t\t\ttype: \"codeblock\",\n\t\t\t\tattributes: {\n\t\t\t\t\tlanguage: { type: \"string\", value: currentNode.params },\n\t\t\t\t\tcode: { type: \"string\", value: currentNode.content }\n\t\t\t\t}\n\t\t\t});\n\t\t\tbreak;\n\n\t\tcase \"image\":\n\t\t\tout.push({\n\t\t\t\ttype: \"image\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttooltip: { type: \"string\", value: currentNode.alt },\n\t\t\t\t\tsource: { type: \"string\", value: decodeURIComponent(currentNode.src) }\n\t\t\t\t}\n\t\t\t});\n\t\t\tbreak;\n\n\t\tcase \"softbreak\":\n\t\t\tif (remarkableOpts.breaks) {\n\t\t\t\tout.push({\n\t\t\t\t\ttype: \"element\",\n\t\t\t\t\ttag: \"br\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\taccumulatedText = accumulatedText + '\\n';\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"hardbreak\":\n\t\t\tout.push({\n\t\t\t\ttype: \"element\",\n\t\t\t\ttag: \"br\",\n\t\t\t});\n\t\t\tbreak;\n\n\t\tcase \"th_open\":\n\t\tcase \"td_open\":\n\t\t\tvar elementTag = currentNode.type.slice(0, 2);\n\t\t\ti = withChildren(i, currentNode.level, elementTag + \"_close\", remarkableTree, function(children) {\n\t\t\t\tvar attributes = {};\n\t\t\t\tif (currentNode.align) {\n\t\t\t\t\tattributes.style = { type: \"string\", value: \"text-align:\" + currentNode.align };\n\t\t\t\t}\n\t\t\t\tout.push({\n\t\t\t\t\ttype: \"element\",\n\t\t\t\t\ttag: elementTag,\n\t\t\t\t\tattributes: attributes,\n\t\t\t\t\tchildren: children\n\t\t\t\t});\n\t\t\t});\n\t\t\tbreak;\n\n\t\tcase \"hr\":\n\t\t\tout.push({\n\t\t\t\ttype: 'element',\n\t\t\t\ttag: 'hr',\n\t\t\t});\n\t\t\tbreak;\n\n\t\tcase \"inline\":\n\t\t\tout = out.concat(convertNodes(currentNode.children, true));\n\t\t\tbreak;\n\n\t\tcase \"text\":\n\t\t\t// We need to merge this text block with the upcoming text block and parse it all together.\n\t\t\taccumulatedText = accumulatedText + currentNode.content;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tif (currentNode.type.substr(currentNode.type.length - 5) === \"_open\") {\n\t\t\t\tvar tagName = currentNode.type.substr(0, currentNode.type.length - 5);\n\t\t\t\ti = wrappedElement(tagName, i, currentNode.level, tagName + \"_close\", remarkableTree);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Unknown node type: \" + currentNode.type, currentNode);\n\t\t\t\tout.push({\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: currentNode.content\n\t\t\t\t});\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\t// We test to see if we process the block now, or if there's\n\t\t// more to accumulate first.\n\t\tif (accumulatedText\n\t\t\t&& (\n\t\t\t\tremarkableOpts.breaks ||\n\t\t\t\t(i+1) >= remarkableTree.length ||\n\t\t\t\t!accumulatingTypes[remarkableTree[i+1].type]\n\t\t\t)\n\t\t) {\n\t\t\t// The Markdown compiler thinks this is just text.\n\t\t\t// Hand off to the WikiText parser to see if there's more to render\n\t\t\t// But only if it's configured to, and we have more than whitespace\n\t\t\tif (!pluginOpts.renderWikiText || accumulatedText.match(/^\\s*$/)) {\n\t\t\t\tout.push({\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: accumulatedText\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// If we're inside a block element (div, p, td, h1), and this is the first child in the tree,\n\t\t\t\t// handle as a block-level parse. Otherwise not.\n\t\t\t\tvar parseAsInline = !(isStartOfInline && i === 0);\n\t\t\t\tvar textToParse = accumulatedText;\n\t\t\t\tif (pluginOpts.renderWikiTextPragma !== \"\") {\n\t\t\t\t\ttextToParse = pluginOpts.renderWikiTextPragma + \"\\n\" + textToParse;\n\t\t\t\t}\n\t\t\t\tvar wikiParser = $tw.wiki.parseText(\"text/vnd.tiddlywiki\", textToParse, {\n\t\t\t\t\tparseAsInline: parseAsInline\n\t\t\t\t});\n\t\t\t\tvar rs = wikiParser.tree;\n\n\t\t\t\t// If we parsed as a block, but the root element the WikiText parser gave is a paragraph,\n\t\t\t\t// we should discard the paragraph, since the way Remarkable nests its nodes, this \"inline\"\n\t\t\t\t// node is always inside something else that's a block-level element\n\t\t\t\tif (!parseAsInline\n\t\t\t\t\t&& rs.length === 1\n\t\t\t\t\t&& rs[0].type === \"element\"\n\t\t\t\t\t&& rs[0].tag === \"p\"\n\t\t\t\t) {\n\t\t\t\t\trs = rs[0].children;\n\t\t\t\t}\n\n\t\t\t\t// If the original text element started with a space, add it back in\n\t\t\t\tif (rs.length > 0\n\t\t\t\t\t&& rs[0].type === \"text\"\n\t\t\t\t\t&& (accumulatedText[0] === \" \" || accumulatedText[0] === \"\\n\")\n\t\t\t\t) {\n\t\t\t\t\trs[0].text = \" \" + rs[0].text;\n\t\t\t\t}\n\t\t\t\tout = out.concat(rs);\n\t\t\t}\n\t\t\taccumulatedText = '';\n\t\t}\n\t}\n\treturn out;\n}\n\nvar MarkdownParser = function(type, text, options) {\n\tvar tree = md.parse(text, {});\n\t//console.debug(tree);\n\ttree = convertNodes(tree);\n\t//console.debug(tree);\n\n\tthis.tree = tree;\n};\n\nexports[\"text/x-markdown\"] = MarkdownParser;\n\n})();\n",
"type": "application/javascript",
"module-type": "parser"
}
}
}
<center>
''编辑器快捷键速记'': <kbd>Ctrl</kbd>+<kbd>H</kbd>
|!格式|!快捷键|
|{{$:/language/Buttons/Bold/Caption}}|<kbd>Ctrl</kbd>+<kbd>B</kbd>|
|{{$:/language/Buttons/Italic/Caption}}|<kbd>Ctrl</kbd>+<kbd>I</kbd>|
|{{$:/language/Buttons/MonoLine/Caption}}|<kbd>Ctrl</kbd>+<kbd>M</kbd>|
|{{$:/language/Buttons/Quote/Caption}}|<kbd>Ctrl</kbd>+<kbd>Q</kbd>|
|{{$:/language/Buttons/Link/Caption}}|<kbd>Ctrl</kbd>+<kbd>L</kbd>|
|{{$:/language/Buttons/ListBullet/Caption}}|<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>L</kbd>|
|{{$:/language/Buttons/ListNumber/Caption}}|<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>N</kbd>|
|{{$:/language/Buttons/Heading1/Caption}}|<kbd>Ctrl</kbd>+<kbd>1</kbd>|
|{{$:/language/Buttons/Heading2/Caption}}|<kbd>Ctrl</kbd>+<kbd>2</kbd>|
|{{$:/language/Buttons/Heading3/Caption}}|<kbd>Ctrl</kbd>+<kbd>3</kbd>|
|{{$:/language/Buttons/Heading4/Caption}}|<kbd>Ctrl</kbd>+<kbd>4</kbd>|
|{{$:/language/Buttons/Heading5/Caption}}|<kbd>Ctrl</kbd>+<kbd>5</kbd>|
|{{$:/language/Buttons/Heading6/Caption}}|<kbd>Ctrl</kbd>+<kbd>6</kbd>|
|{{$:/language/Buttons/Excise/Caption}}|<kbd>Ctrl</kbd>+<kbd>E</kbd>|
|{{$:/language/Buttons/Picture/Caption}}|<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>I</kbd>|
|{{$:/language/Buttons/Stamp/Caption}}|<kbd>Ctrl</kbd>+<kbd>S</kbd>|
|{{$:/language/Buttons/Preview/Caption}}|<kbd>Alt</kbd>+<kbd>P</kbd>|
</center>
{
"tiddlers": {
"$:/config/plugins/menubar/breakpoint": {
"title": "$:/config/plugins/menubar/breakpoint",
"text": "620px"
},
"$:/config/DefaultColourMappings/menubar-foreground": {
"title": "$:/config/DefaultColourMappings/menubar-foreground",
"text": "#fff"
},
"$:/config/DefaultColourMappings/menubar-background": {
"title": "$:/config/DefaultColourMappings/menubar-background",
"text": "#5778d8"
},
"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/pagecontrols": {
"title": "$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/pagecontrols",
"text": "hide"
},
"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/server": {
"title": "$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/server",
"text": "hide"
},
"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/sidebar": {
"title": "$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/sidebar",
"text": "hide"
},
"$:/config/plugins/menubar/TableOfContents/Tag": {
"title": "$:/config/plugins/menubar/TableOfContents/Tag",
"text": "TableOfContents"
},
"$:/plugins/tiddlywiki/menubar/config": {
"title": "$:/plugins/tiddlywiki/menubar/config",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "Menu Bar",
"text": "\\define config-base() $:/config/plugins/menubar/MenuItems/Visibility/\n\n! Menu Bar Configuration\n\n!! Menu Items\n\nSelect which menu items will be shown. You can also drag items to reorder them.\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/MenuBar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n\n!! Breakpoint Position\n\nThe breakpoint position between narrow and wide screens. Should include CSS units (eg. `400px`).\n\n<$edit-text tiddler=\"$:/config/plugins/menubar/breakpoint\" default=\"\" tag=\"input\"/>\n\n!! Contents Tag\n\nThe tag for the ~TableOfContents used in the Contents dropdown\n\n<$edit-text tiddler=\"$:/config/plugins/menubar/TableOfContents/Tag\" default=\"\" tag=\"input\"/>\n\n!! Menu Bar Colours\n\nTo change the colour of the menu bar, define the colours `menubar-foreground` and `menubar-background` in the currently selected palette\n"
},
"$:/plugins/tiddlywiki/menubar/items/contents": {
"title": "$:/plugins/tiddlywiki/menubar/items/contents",
"caption": "Contents",
"description": "Table of Contents",
"is-dropdown": "yes",
"tags": "$:/tags/MenuBar",
"text": "<div class=\"tc-table-of-contents\">\n\n<$macrocall $name=\"toc-selective-expandable\" tag={{$:/config/plugins/menubar/TableOfContents/Tag}}/>\n\n</div>\n"
},
"$:/plugins/tiddlywiki/menubar/items/hamburger": {
"title": "$:/plugins/tiddlywiki/menubar/items/hamburger",
"tags": "$:/tags/MenuBar",
"caption": "Hamburger",
"description": "Show the full menu bar on a narrow screen",
"custom-menu-content": "{{$:/plugins/tiddlywiki/menubar/items/hamburger}}",
"show-when": "narrow",
"text": "<$list filter=\"[[$:/state/popup/menubar/hamburger]get[text]else[no]match[no]]\">\n<$button set=\"$:/state/popup/menubar/hamburger\" setTo=\"yes\">\n{{$:/core/images/menu-button}}\n</$button>\n</$list>\n<$list filter=\"[[$:/state/popup/menubar/hamburger]get[text]else[no]match[yes]]\">\n<$button set=\"$:/state/popup/menubar/hamburger\" setTo=\"no\">\n{{$:/core/images/close-button}}\n</$button>\n</$list>\n"
},
"$:/plugins/tiddlywiki/menubar/items/pagecontrols": {
"title": "$:/plugins/tiddlywiki/menubar/items/pagecontrols",
"tags": "$:/tags/MenuBar",
"description": "Page controls from the sidebar",
"caption": "Page controls",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/pagecontrols\" mode=\"inline\"/>",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"hidden\" value=<<config-title>>>\n<$list filter=\"[<hidden>!text[hide]]\" storyview=\"pop\" variable=\"ignore\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$list>\n</$set>\n</$list>\n"
},
"$:/plugins/tiddlywiki/menubar/items/search": {
"title": "$:/plugins/tiddlywiki/menubar/items/search",
"custom-menu-content": "{{$:/plugins/tiddlywiki/menubar/items/search}}",
"description": "Search",
"caption": "Search",
"tags": "$:/tags/MenuBar",
"text": "\\define cancel-search-actions()\n<$set name=\"userInput\" value={{{ [<__storeTitle__>get[text]] }}}>\n<$list filter=\"[<__tiddler__>get[text]!match<userInput>]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[<__storeTitle__>] [<__tiddler__>] [<__selectionStateTitle__>]\"/>\"\"\">\n<$action-setfield $tiddler=<<__tiddler__>> text=<<userInput>>/><$action-setfield $tiddler=<<__refreshTitle__>> text=\"yes\"/>\n</$list>\n</$set>\n\\end\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/sidebar\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\whitespace trim\n<$vars searchTiddler=\"$:/temp/menubarsearch/input\" searchListState=<<qualify \"$:/state/search-list/selected-item\">>>\n<span style=\"margin: 0 0.5em;\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/menubarsearch\" storeTitle=<<searchTiddler>> selectionStateTitle=<<searchListState>> \n\t\trefreshTitle=\"$:/temp/menubarsearch/refresh\" tag=\"input\" type=\"search\" focusPopup=\"$:/state/popup/menubar-search-dropdown\" \n\t\tclass=\"tc-popup-handle tc-menu-show-when-wide\" placeholder=\"Search...\" default=\"\" cancelPopups=\"yes\" \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> inputCancelActions=<<cancel-search-actions>> \n\t\tfilterMinLength={{$:/config/Search/MinLength}} configTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\" />\n</$keyboard>\n</$keyboard>\n</span>\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/state/popup/menubar-search-dropdown\" type=\"nomatch\" text=\"\" default=\"\">\n\n<div class=\"tc-block-dropdown tc-search-drop-down\">\n\n<$list filter=\"[<searchTiddler>get[text]minlength[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">Type your search terms</div>\"\"\" variable=\"ignore\">\n\n<$list filter=\"[<searchTiddler>get[text]minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$vars configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} userInput={{{ [<searchTiddler>get[text]] }}}>\n\n{{$:/core/ui/SearchResults}}\n\n</$vars>\n\n</$list>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n</$vars>\n"
},
"$:/plugins/tiddlywiki/menubar/items/server": {
"title": "$:/plugins/tiddlywiki/menubar/items/server",
"tags": "$:/tags/MenuBar",
"description": "Server options",
"caption": "Server",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/server\" mode=\"inline\"/>",
"text": "<$list filter=\"[[$:/status/IsLoggedIn]get[text]else[no]match[yes]]\" variable=\"ignore\">\n<$transclude tiddler=\"$:/core/ui/Buttons/save-wiki\" mode=\"inline\"/>\n</$list>\n<$list filter=\"[[$:/status/IsLoggedIn]get[text]else[no]match[no]]\" variable=\"ignore\">\n<$button message=\"tm-login\">\nLogin\n</$button>\n</$list>\n"
},
"$:/plugins/tiddlywiki/menubar/items/sidebar": {
"title": "$:/plugins/tiddlywiki/menubar/items/sidebar",
"caption": "Sidebar",
"description": "Sidebar",
"is-dropdown": "yes",
"tags": "$:/tags/MenuBar",
"text": "<$scrollable fallthrough=\"none\" class=\"tc-popup-keep tc-menubar-dropdown-sidebar\">\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\" mode=\"inline\"/>\n\n</$scrollable>\n"
},
"$:/plugins/tiddlywiki/menubar/items/topleftbar": {
"title": "$:/plugins/tiddlywiki/menubar/items/topleftbar",
"tags": "$:/tags/MenuBar",
"description": "Items from $:/tags/TopLeftBar",
"caption": "Legacy Top Left Bar",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/topleftbar\" mode=\"inline\"/>",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>"
},
"$:/plugins/tiddlywiki/menubar/items/toprightbar": {
"title": "$:/plugins/tiddlywiki/menubar/items/toprightbar",
"tags": "$:/tags/MenuBar",
"description": "Items from $:/tags/TopRightBar",
"caption": "Legacy Top Right Bar",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/toprightbar\" mode=\"inline\"/>",
"custom-menu-styles-wide": "float: right;",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]reverse[]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>"
},
"$:/plugins/tiddlywiki/menubar/menu": {
"title": "$:/plugins/tiddlywiki/menubar/menu",
"tags": "$:/tags/PageTemplate",
"text": "\\define menubar-inner(size)\n<ul class=\"tc-menubar-list\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]] -[all[tiddlers+shadows]tag[$:/tags/TopLeftBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/topleftbar]] -[all[tiddlers+shadows]tag[$:/tags/TopRightBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/toprightbar]]\">\n<$list filter=\"[<currentTiddler>addprefix[$:/config/plugins/menubar/MenuItems/Visibility/]get[text]] ~show +[match[show]]\" variable=\"ignore\">\n<$list filter=\"[[$size$]match[wide]] ~[<currentTiddler>get[show-when]match[$size$]] ~[{$:/state/popup/menubar/hamburger}match[yes]]\" variable=\"ignore\">\n<li style={{!!custom-menu-styles-$size$}} class={{{ [<currentTiddler>get[show-when]addprefix[tc-menubar-]] tc-menubar-item +[join[ ]] }}}>\n<$list filter=\"[<currentTiddler>!is-dropdown[yes]]\" variable=\"listItem\" emptyMessage=\"\"\"\n\t<!-- Dropdown -->\n\t<$set name=\"dropdown-state\" value=<<qualify \"$:/state/popup/topmenu/dropdown/\">>>\n\t<$set name=\"dropdown-state\" value={{{ [<dropdown-state>addsuffix<currentTiddler>] }}}>\n\t<$button popup=<<dropdown-state>> selectedClass=\"tc-selected\">\n\t<$set name=\"tv-wikilinks\" value=\"no\">\n\t<$transclude field=\"caption\" mode=\"inline\"/>\n\t<$text text=\" \"/>\n\t<span class=\"tc-menubar-dropdown-arrow\">\n\t<$transclude tiddler=\"$:/core/images/down-arrow\" mode=\"inline\"/>\n\t</span>\n\t</$set>\n\t</$button>\n\t</$set>\n\t</$set>\n\"\"\">\n<$list filter=\"[<currentTiddler>has[custom-menu-content]]\" variable=\"listItem\" emptyMessage=\"\"\"\n\t<!-- Link -->\n\t<$link to={{!!target}}>\n\t<$set name=\"tv-wikilinks\" value=\"no\">\n\t<$transclude field=\"caption\" mode=\"inline\"/>\n\t</$set>\n\t</$link>\n\"\"\">\n<!-- Custom content -->\n<$transclude field=\"custom-menu-content\" mode=\"inline\"/>\n</$list>\n</$list>\n</li>\n</$list>\n</$list>\n</$list>\n</ul>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]] -[all[tiddlers+shadows]tag[$:/tags/TopLeftBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/topleftbar]] -[all[tiddlers+shadows]tag[$:/tags/TopRightBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/toprightbar]] +[limit[1]]\" variable=\"listItem\">\n<nav class=\"tc-menubar tc-adjust-top-of-scroll\">\n<div class=\"tc-menubar-narrow\">\n<<menubar-inner narrow>>\n</div>\n<div class=\"tc-menubar-wide\">\n<<menubar-inner wide>>\n</div>\n<div style=\"clear:both;\"/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]is-dropdown[yes]]\">\n<$list filter=\"[<currentTiddler>addprefix[$:/config/plugins/menubar/MenuItems/Visibility/]get[text]] ~show +[match[show]]\" variable=\"ignore\">\n<$set name=\"dropdown-state\" value=<<qualify \"$:/state/popup/topmenu/dropdown/\">>>\n<$set name=\"dropdown-state\" value={{{ [<dropdown-state>addsuffix<currentTiddler>] }}}>\n<$reveal type=\"popup\" state=<<dropdown-state>> position={{{ [<currentTiddler>get[dropdown-position]else[below]] }}} class={{{ [<currentTiddler>get[dropdown]get[class]] }}} tag=\"div\">\n<div class=\"tc-drop-down\">\n<$transclude/>\n</div>\n</$reveal>\n</$set>\n</$set>\n</$list>\n</$list>\n</nav>\n</$list>\n"
},
"$:/core/ui/PageTemplate/topleftbar": {
"title": "$:/core/ui/PageTemplate/topleftbar",
"text": "<!-- The menubar plugin overrides this tiddler to remove the core top left menu. The menu items that it would include are instead included in the menubar -->"
},
"$:/core/ui/PageTemplate/toprightbar": {
"title": "$:/core/ui/PageTemplate/toprightbar",
"text": "<!-- The menubar plugin overrides this tiddler to remove the core top right menu. The menu items that it would include are instead included in the menubar -->"
},
"$:/plugins/tiddlywiki/menubar/readme": {
"title": "$:/plugins/tiddlywiki/menubar/readme",
"text": "!! Introduction\n\nThis plugin provides a menu bar with the following features:\n\n* Menu items take the form of simple text links, dropdowns, or entirely custom content\n* Menu items can be individually enabled via the control panel\n* Responds to reduced screen width by abbreviating the menu items to a \"hamburger\" dropdown\n\n!! Menu Item Tiddlers\n\nMenu items are tagged <<tag $:/tags/MenuBar>>. The following fields are used by this plugin:\n\n|!Field Name |!Purpose |\n|title |Each menu item must have a unique title (not shown to the user) |\n|description |Description for use in listings |\n|tags |Must contain `$:/tags/MenuBar` |\n|caption |The text that is displayed for the menu item. Avoid links, using `~` to suppress CamelCase links if required |\n|target |For simple link menu items specifies a tiddler title as the target of the link |\n|is-dropdown |Set to `yes` to indicate a dropdown menu item |\n|dropdown-position |Optional position for the dropdown (can be ''left'', ''above'', ''aboveleft'', ''aboveright'', ''right'', ''belowleft'', ''belowright'' or ''below'') |\n|text |For dropdown menu items, specifies the body of the dropdown |\n|custom-menu-content |Optional wikitext to be displayed in place of the caption |\n|custom-menu-styles-wide |Optional string of styles to be applied to menu item when the menubar is wide |\n|custom-menu-styles-narrow |Optional string of styles to be applied to menu item when the menubar is narrow |\n\nCustom menu items should make sure that the clickable link or button is an immediate child, and not wrapped in another element.\n\nNote that menu items can be pushed to the right of the menu bar setting the ''custom-menu-styles'' field to `float: right;`.\n"
},
"$:/plugins/tiddlywiki/menubar/styles": {
"title": "$:/plugins/tiddlywiki/menubar/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define breakpoint-plus-one()\n<$text text={{{ [{$:/config/plugins/menubar/breakpoint}removesuffix[px]add[1]addsuffix[px]] ~[{$:/config/plugins/menubar/breakpoint}] }}} />\n\\end\n\n\\define sidebarbreakpoint-minus-one()\n<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}} />\n\\end\n\n\\define set-sidebar-scrollable-top-if-hamburger()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/MenuBar]] -[all[tiddlers+shadows]prefix[$:/config/plugins/menubar/MenuItems/Visibility/]regexp:text[hide]removeprefix[$:/config/plugins/menubar/MenuItems/Visibility/]] -[all[tiddlers+shadows]tag[$:/tags/TopLeftBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/topleftbar]] -[all[tiddlers+shadows]tag[$:/tags/TopRightBar]limit[1]then[$:/plugins/tiddlywiki/menubar/items/toprightbar]] -$:/plugins/tiddlywiki/menubar/items/hamburger +[limit[1]]\">\n\n\t.tc-sidebar-scrollable {\n\t\tmargin-top: 2em;\n\t}\n\n</$list>\n\\end\n\n\\define set-sidebar-scrollable-top()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/MenuBar]] -[all[tiddlers+shadows]prefix[$:/config/plugins/menubar/MenuItems/Visibility/]regexp:text[hide]removeprefix[$:/config/plugins/menubar/MenuItems/Visibility/]] -[all[tiddlers+shadows]tag[$:/tags/TopLeftBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/topleftbar]] -[all[tiddlers+shadows]tag[$:/tags/TopRightBar]limit[1]then[$:/plugins/tiddlywiki/menubar/items/toprightbar]] +[limit[1]]\">\n\n\t.tc-sidebar-scrollable {\n\t\tmargin-top: 2em;\n\t}\n\n</$list>\n<$reveal state=\"$:/state/popup/menubar/hamburger\" type=\"match\" text=\"yes\">\n\n\t<$set name=\"itemCount\" value={{{ [all[tiddlers+shadows]tag[$:/tags/MenuBar]] -[all[tiddlers+shadows]prefix[$:/config/plugins/menubar/MenuItems/Visibility/]regexp:text[hide]removeprefix[$:/config/plugins/menubar/MenuItems/Visibility/]] -[all[tiddlers+shadows]tag[$:/tags/TopLeftBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/topleftbar]] -[all[tiddlers+shadows]tag[$:/tags/TopRightBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/toprightbar]] +[count[]] }}}>\n\n\t\t.tc-sidebar-scrollable {\n\t\t\tmargin-top: calc(<<itemCount>> * 2em);\n\t\t}\n\n\t</$set>\n\n</$reveal>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\nnav.tc-menubar {\n\tposition: fixed;\n\tz-index: 850;\n\tdisplay: inline-block;\n\ttop: 0;\n\tright: 0;\n\tleft: 0;\n}\n\nnav.tc-menubar ul.tc-menubar-list {\n\tposition: relative;\n\tlist-style-type: none;\n\tmargin: 0;\n\tpadding: 0 0 0 42px;\n\tbackground: <<colour background>>;\n\tbackground: <<colour menubar-background>>;\n\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\thtml nav.tc-menubar ul.tc-menubar-list {\n\t\tpadding: 0 0 0 8px;\n\t}\n\n}\n\nnav.tc-menubar li.tc-menubar-item {\n\tdisplay: inline-block;\n\tmargin: 0;\n\tpadding: 0;\n}\n\nnav.tc-menubar .tc-menubar-narrow li.tc-menubar-item {\n\tdisplay: block;\n}\n\nnav.tc-menubar li.tc-menubar-item > a,\nnav.tc-menubar li.tc-menubar-item > button {\n\tdisplay: inline-block;\n/*\ttext-transform: uppercase; */\n\tline-height: 1;\n\tfont-weight: 700;\n\tcolor: <<colour foreground>>;\n\tcolor: <<colour menubar-foreground>>;\n\tfill: <<colour foreground>>;\n\tfill: <<colour menubar-foreground>>;\n\ttext-decoration: none;\n\tpadding: 0.5em;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\tcursor: pointer;\n\tborder-radius: 0;\n\ttext-decoration: none;\n}\n\nnav.tc-menubar li.tc-menubar-item > a.tc-selected,\nnav.tc-menubar li.tc-menubar-item > button.tc-selected {\n\tbackground: <<colour foreground>>;\n\tbackground: <<colour menubar-foreground>>;\n\tcolor: <<colour background>>;\n\tcolor: <<colour menubar-background>>;\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n}\n\nnav.tc-menubar li.tc-menubar-item svg {\n\ttransition: none;\n\twidth: 1em;\n\theight: 1em;\n\tfill: <<colour foreground>>;\n\tfill: <<colour menubar-foreground>>;\n}\n\nnav.tc-menubar li.tc-menubar-item .tc-menubar-dropdown-arrow svg {\n\twidth: 0.5em;\n\theight: 0.5em;\n}\n\nnav.tc-menubar li.tc-menubar-item > a.tc-selected svg,\nnav.tc-menubar li.tc-menubar-item > button.tc-selected svg {\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n}\n\nnav.tc-menubar li.tc-menubar-item > a:hover,\nnav.tc-menubar li.tc-menubar-item > button:hover svg,\nnav.tc-menubar li.tc-menubar-item > button:hover {\n\tbackground: <<colour foreground>>;\n\tbackground: <<colour menubar-foreground>>;\n\tcolor: <<colour background>>;\n\tcolor: <<colour menubar-background>>;\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n\tborder-radius: 0;\n\ttext-decoration: none;\n}\n\nnav.tc-menubar li.tc-menubar-item > a:active,\nnav.tc-menubar li.tc-menubar-item > button:active svg,\nnav.tc-menubar li.tc-menubar-item > button:active {\n\tbackground: <<colour foreground>>;\n\tbackground: <<colour menubar-foreground>>;\n\tcolor: <<colour background>>;\n\tcolor: <<colour menubar-background>>;\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n\tborder-radius: 0;\n\ttext-decoration: none;\n}\n\nnav.tc-menubar .tc-drop-down,\nnav.tc-menubar .tc-block-dropdown {\n\tmax-width: 70vw;\n\tmax-height: 70vh;\n\toverflow: auto;\n}\n\nnav.tc-menubar .tc-drop-down a {\n\ttext-decoration: none;\n}\n\nnav.tc-menubar .tc-drop-down .tc-table-of-contents button {\n\tdisplay: inline-block;\n\twidth: auto;\n}\n\nnav.tc-menubar .tc-drop-down ol {\n\tmargin: 0;\n}\n\nnav.tc-menubar .tc-drop-down .tc-menubar-dropdown-sidebar a,\nnav.tc-menubar .tc-drop-down .tc-menubar-dropdown-sidebar button {\n\tdisplay: inline;\n\twidth: auto;\n}\n\nnav.tc-menubar .tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (max-width: {{$:/config/plugins/menubar/breakpoint}}) {\n\n\t.tc-menubar-wide {\n\t\tdisplay: none;\n\t}\n\n}\n\n@media (min-width: <<breakpoint-plus-one>>) {\n\n\tnav.tc-menubar li.tc-menubar-item.tc-menubar-narrow,\n\t.tc-menubar-narrow {\n\t\tdisplay: none;\n\t}\n\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t<<set-sidebar-scrollable-top-if-hamburger>>\n\n}\n\n@media (max-width: {{$:/config/plugins/menubar/breakpoint}}) {\n\n\t<<set-sidebar-scrollable-top>>\n\n}\n@media print {\n\n\tnav.tc-menubar {\n\t\tdisplay: none;\n\t}\n\n}\n"
},
"$:/tags/MenuBar": {
"title": "$:/tags/MenuBar",
"list": "$:/plugins/tiddlywiki/menubar/items/hamburger $:/plugins/tiddlywiki/menubar/items/topleftbar $:/plugins/tiddlywiki/menubar/items/contents $:/plugins/tiddlywiki/menubar/items/search $:/plugins/tiddlywiki/menubar/items/pagecontrols $:/plugins/tiddlywiki/menubar/items/server $:/plugins/tiddlywiki/menubar/items/toprightbar"
}
}
}
<div class="tc-table-of-contents">
<<toc-selective-expandable 'TableOfContents'>>
</div>
<$list filter="[[$:/state/popup/menubar/hamburger]get[text]else[no]match[no]]">
<$button set="$:/state/popup/menubar/hamburger" setTo="yes">
{{$:/core/images/menu-button}}
</$button>
</$list>
<$list filter="[[$:/state/popup/menubar/hamburger]get[text]else[no]match[yes]]">
<$button set="$:/state/popup/menubar/hamburger" setTo="no">
{{$:/core/images/close-button}}
</$button>
</$list>
\whitespace trim
\define config-title()
$:/config/PageControlButtons/Visibility/$(listItem)$
\end
<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">
<$set name="hidden" value=<<config-title>>>
<$list filter="[<hidden>!text[hide]]" storyview="pop" variable="ignore">
<$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]">
<$transclude tiddler=<<listItem>> mode="inline"/>
</$set>
</$list>
</$set>
</$list>
\define cancel-search-actions()
<$set name="userInput" value={{{ [<__storeTitle__>get[text]] }}}>
<$list filter="[<__tiddler__>get[text]!match<userInput>]" emptyMessage="""<$action-deletetiddler $filter="[<__storeTitle__>] [<__tiddler__>] [<__selectionStateTitle__>]"/>""">
<$action-setfield $tiddler=<<__tiddler__>> text=<<userInput>>/><$action-setfield $tiddler=<<__refreshTitle__>> text="yes"/>
</$list>
</$set>
\end
\define input-accept-actions() <$list filter="[{$:/config/Search/NavigateOnEnter/enable}match[yes]]" emptyMessage="""<$list filter="[<__tiddler__>get[text]!is[missing]]"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>"""><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>
\define input-accept-variant-actions() <$list filter="[{$:/config/Search/NavigateOnEnter/enable}match[yes]]" emptyMessage="""<$list filter="[<__tiddler__>get[text]!is[missing]]"><$list filter="[<__tiddler__>get[text]minlength[1]]"><$action-sendmessage $message="tm-edit-tiddler" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>"""><$list filter="[<__tiddler__>get[text]minlength[1]]"><$action-sendmessage $message="tm-edit-tiddler" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>
\define set-next-input-tab(beforeafter:"after") <$macrocall $name="change-input-tab" stateTitle="$:/state/tab/search-results/sidebar" tag="$:/tags/SearchResults" beforeafter="$beforeafter$" defaultState={{$:/config/SearchResults/Default}} actions="""<$action-setfield $tiddler="$:/state/search/currentTab" text=<<nextTab>>/>"""/>
\whitespace trim
<$vars searchTiddler="$:/temp/menubarsearch/input" searchListState=<<qualify "$:/state/search-list/selected-item">>>
<span style="margin: 0 0.5em;">
<$keyboard key="((input-tab-right))" actions=<<set-next-input-tab>>>
<$keyboard key="((input-tab-left))" actions=<<set-next-input-tab "before">>>
<$macrocall $name="keyboard-driven-input" tiddler="$:/temp/menubarsearch" storeTitle=<<searchTiddler>> selectionStateTitle=<<searchListState>>
refreshTitle="$:/temp/menubarsearch/refresh" tag="input" type="search" focusPopup="$:/state/popup/menubar-search-dropdown"
class="tc-popup-handle tc-menu-show-when-wide" placeholder="查找..." default="" cancelPopups="yes"
inputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> inputCancelActions=<<cancel-search-actions>>
filterMinLength={{$:/config/Search/MinLength}} configTiddlerFilter="[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]" />
</$keyboard>
</$keyboard>
</span>
<$reveal tag="div" class="tc-block-dropdown-wrapper" state="$:/state/popup/menubar-search-dropdown" type="nomatch" text="" default="">
<div class="tc-block-dropdown tc-search-drop-down">
<$list filter="[<searchTiddler>get[text]minlength[1]]" emptyMessage="""<div class="tc-search-results">输入您查找的字词</div>""" variable="ignore">
<$list filter="[<searchTiddler>get[text]minlength{$:/config/Search/MinLength}limit[1]]" emptyMessage="""<div class="tc-search-results">{{$:/language/Search/Search/TooShort}}</div>""" variable="listItem">
<$vars configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} userInput={{{ [<searchTiddler>get[text]] }}}>
{{$:/core/ui/SearchResults}}
</$vars>
</$list>
</$list>
</div>
</$reveal>
</$vars>
<$list filter="[[$:/status/IsLoggedIn]get[text]else[no]match[yes]]" variable="ignore">
<$transclude tiddler="$:/core/ui/Buttons/save-wiki" mode="inline"/>
</$list>
<$list filter="[[$:/status/IsLoggedIn]get[text]else[no]match[no]]" variable="ignore">
<$button message="tm-login">
登录
</$button>
</$list>
<$scrollable fallthrough="none" class="tc-popup-keep tc-menubar-dropdown-sidebar">
<$transclude tiddler="$:/core/ui/SideBarSegments/tabs" mode="inline"/>
</$scrollable>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]" variable="listItem" storyview="pop">
<$transclude tiddler=<<listItem>> mode="inline"/>
</$list>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]reverse[]]" variable="listItem" storyview="pop">
<$transclude tiddler=<<listItem>> mode="inline"/>
</$list>
\define config-base() $:/config/plugins/menubar/MenuItems/Visibility/
! 菜单栏配置
!! 菜单项目
选择将显示哪些菜单项目。您还可以拖动项目以重新排序。
<$set name="tv-config-toolbar-icons" value="yes">
<$set name="tv-config-toolbar-text" value="yes">
<$macrocall $name="list-tagged-draggable" tag="$:/tags/MenuBar" itemTemplate="$:/core/ui/ControlPanel/Toolbars/ItemTemplate"/>
</$set>
</$set>
!! 中断点位置
窄屏和宽屏之间的中断点位置。应包括 CSS 单位(例如 `400px`)。
<$edit-text tiddler="$:/config/plugins/menubar/breakpoint" default="" tag="input"/>
!! 菜单栏颜色
要更改菜单栏的颜色,请定义当前所选调色盘中的颜色 `menubar-foreground` 和 `menubar-background`
{
"tiddlers": {
"$:/plugins/tiddlywiki/mobiledragdrop/ios-drag-drop.js": {
"text": "(function(doc) {\n\nfunction _exposeIosHtml5DragDropShim(config) {\n log = noop; // noOp, remove this line to enable debugging\n\n var coordinateSystemForElementFromPoint;\n\n var DRAG_OVER_EMIT_FREQ = 50;\n\n function main() {\n config = config || {};\n if (!config.hasOwnProperty(\"simulateAnchorClick\")) config.simulateAnchorClick = true;\n\n coordinateSystemForElementFromPoint = navigator.userAgent.match(/OS [1-4](?:_\\d+)+ like Mac/) ? \"page\" : \"client\";\n\n var div = doc.createElement('div');\n var dragDiv = 'draggable' in div;\n var evts = 'ondragstart' in div && 'ondrop' in div;\n\n var needsPatch = !(dragDiv || evts) || /iPad|iPhone|iPod|Android/.test(navigator.userAgent);\n log((needsPatch ? \"\" : \"not \") + \"patching html5 drag drop\");\n\n if(!needsPatch) {\n return;\n }\n\n if(!config.enableEnterLeave) {\n DragDrop.prototype.synthesizeEnterLeave = noop;\n }\n\n if(config.holdToDrag){\n doc.addEventListener(\"touchstart\", touchstartDelay(config.holdToDrag), {passive:false});\n }\n else {\n doc.addEventListener(\"touchstart\", touchstart, {passive:false});\n }\n }\n\n function DragDrop(event, el) {\n\n this.dragData = {};\n this.dragDataTypes = [];\n this.dragImage = null;\n this.dragImageTransform = null;\n this.dragImageWebKitTransform = null;\n this.customDragImage = null;\n this.customDragImageX = null;\n this.customDragImageY = null;\n this.el = el || event.target;\n this.dragOverTimer = null;\n this.lastMoveEvent = null;\n\n log(\"dragstart\");\n\n if (this.dispatchDragStart()) {\n this.createDragImage();\n this.listen();\n }\n }\n\n DragDrop.prototype = {\n listen: function() {\n var move = onEvt(doc, \"touchmove\", this.move, this);\n var end = onEvt(doc, \"touchend\", ontouchend, this);\n var cancel = onEvt(doc, \"touchcancel\", cleanup, this);\n\n function ontouchend(event) {\n this.dragend(event, event.target);\n cleanup.call(this);\n }\n function cleanup() {\n log(\"cleanup\");\n this.dragDataTypes = [];\n if (this.dragImage !== null) {\n this.dragImage.parentNode.removeChild(this.dragImage);\n this.dragImage = null;\n this.dragImageTransform = null;\n this.dragImageWebKitTransform = null;\n }\n this.customDragImage = null;\n this.customDragImageX = null;\n this.customDragImageY = null;\n this.el = this.dragData = null;\n return [move, end, cancel].forEach(function(handler) {\n return handler.off();\n });\n }\n },\n move: function(event) {\n event.preventDefault();\n var pageXs = [], pageYs = [];\n [].forEach.call(event.changedTouches, function(touch) {\n pageXs.push(touch.pageX);\n pageYs.push(touch.pageY);\n });\n\n var x = average(pageXs) - (this.customDragImageX || parseInt(this.dragImage.offsetWidth, 10) / 2);\n var y = average(pageYs) - (this.customDragImageY || parseInt(this.dragImage.offsetHeight, 10) / 2);\n this.translateDragImage(x, y);\n\n this.synthesizeEnterLeave(event);\n this.synthesizeOver(event);\n },\n // We use translate instead of top/left because of sub-pixel rendering and for the hope of better performance\n // http://www.paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/\n translateDragImage: function(x, y) {\n var translate = \"translate(\" + x + \"px,\" + y + \"px) \";\n\n if (this.dragImageWebKitTransform !== null) {\n this.dragImage.style[\"-webkit-transform\"] = translate + this.dragImageWebKitTransform;\n }\n if (this.dragImageTransform !== null) {\n this.dragImage.style.transform = translate + this.dragImageTransform;\n }\n },\n synthesizeEnterLeave: function(event) {\n var target = elementFromTouchEvent(this.el,event)\n if (target != this.lastEnter) {\n if (this.lastEnter) {\n this.dispatchLeave(event);\n }\n this.lastEnter = target;\n if (this.lastEnter) {\n this.dispatchEnter(event);\n }\n }\n },\n synthesizeOver: function(event) {\n this.lastMoveEvent = event;\n if(this.lastEnter && !this.dragOverTimer) {\n this.dragOverTimer = setInterval(this.dispatchOver.bind(this), DRAG_OVER_EMIT_FREQ);\n }\n },\n clearDragOverTimer: function() {\n if(this.dragOverTimer) {\n clearInterval(this.dragOverTimer);\n this.dragOverTimer = null;\n }\n },\n dragend: function(event) {\n\n // we'll dispatch drop if there's a target, then dragEnd.\n // drop comes first http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#drag-and-drop-processing-model\n log(\"dragend\");\n\n if (this.lastEnter) {\n this.dispatchLeave(event);\n }\n\n var target = elementFromTouchEvent(this.el,event)\n if (target) {\n log(\"found drop target \" + target.tagName);\n this.dispatchDrop(target, event);\n } else {\n log(\"no drop target\");\n }\n\n var dragendEvt = doc.createEvent(\"Event\");\n dragendEvt.initEvent(\"dragend\", true, true);\n this.el.dispatchEvent(dragendEvt);\n this.clearDragOverTimer();\n },\n dispatchDrop: function(target, event) {\n var dropEvt = doc.createEvent(\"Event\");\n dropEvt.initEvent(\"drop\", true, true);\n\n var touch = event.changedTouches[0];\n var x = touch[coordinateSystemForElementFromPoint + 'X'];\n var y = touch[coordinateSystemForElementFromPoint + 'Y'];\n\n var targetOffset = getOffset(target);\n\n dropEvt.offsetX = x - targetOffset.x;\n dropEvt.offsetY = y - targetOffset.y;\n\n dropEvt.dataTransfer = {\n types: this.dragDataTypes,\n getData: function(type) {\n return this.dragData[type];\n }.bind(this),\n dropEffect: \"move\"\n };\n dropEvt.preventDefault = function() {\n // https://www.w3.org/Bugs/Public/show_bug.cgi?id=14638 - if we don't cancel it, we'll snap back\n }.bind(this);\n\n once(doc, \"drop\", function() {\n log(\"drop event not canceled\");\n },this);\n\n target.dispatchEvent(dropEvt);\n },\n dispatchEnter: function(event) {\n\n var enterEvt = doc.createEvent(\"Event\");\n enterEvt.initEvent(\"dragenter\", true, true);\n enterEvt.dataTransfer = {\n types: this.dragDataTypes,\n getData: function(type) {\n return this.dragData[type];\n }.bind(this)\n };\n\n var touch = event.changedTouches[0];\n enterEvt.pageX = touch.pageX;\n enterEvt.pageY = touch.pageY;\n enterEvt.clientX = touch.clientX;\n enterEvt.clientY = touch.clientY;\n\n this.lastEnter.dispatchEvent(enterEvt);\n },\n dispatchOver: function() {\n\n var overEvt = doc.createEvent(\"Event\");\n overEvt.initEvent(\"dragover\", true, true);\n overEvt.dataTransfer = {\n types: this.dragDataTypes,\n getData: function(type) {\n return this.dragData[type];\n }.bind(this)\n };\n\n var touch = this.lastMoveEvent.changedTouches[0];\n overEvt.pageX = touch.pageX;\n overEvt.pageY = touch.pageY;\n overEvt.clientX = touch.clientX;\n overEvt.clientY = touch.clientY;\n\n this.lastEnter.dispatchEvent(overEvt);\n },\n dispatchLeave: function(event) {\n\n var leaveEvt = doc.createEvent(\"Event\");\n leaveEvt.initEvent(\"dragleave\", true, true);\n leaveEvt.dataTransfer = {\n types: this.dragDataTypes,\n getData: function(type) {\n return this.dragData[type];\n }.bind(this)\n };\n\n var touch = event.changedTouches[0];\n leaveEvt.pageX = touch.pageX;\n leaveEvt.pageY = touch.pageY;\n leaveEvt.clientX = touch.clientX;\n leaveEvt.clientY = touch.clientY;\n\n this.lastEnter.dispatchEvent(leaveEvt);\n this.lastEnter = null;\n this.clearDragOverTimer();\n },\n dispatchDragStart: function() {\n var evt = doc.createEvent(\"Event\");\n evt.initEvent(\"dragstart\", true, true);\n evt.dataTransfer = {\n setData: function(type, val) {\n this.dragData[type] = val;\n if (this.dragDataTypes.indexOf(type) == -1) {\n this.dragDataTypes[this.dragDataTypes.length] = type;\n }\n return val;\n }.bind(this),\n setDragImage: function(el, x, y){\n this.customDragImage = el;\n this.customDragImageX = x\n this.customDragImageY = y\n }.bind(this),\n dropEffect: \"move\"\n };\n return this.el.dispatchEvent(evt);\n },\n createDragImage: function() {\n if (this.customDragImage) {\n this.dragImage = this.customDragImage.cloneNode(true);\n duplicateStyle(this.customDragImage, this.dragImage);\n } else {\n this.dragImage = this.el.cloneNode(true);\n duplicateStyle(this.el, this.dragImage);\n }\n this.dragImage.style.opacity = \"0.5\";\n this.dragImage.style.position = \"absolute\";\n this.dragImage.style.left = \"0px\";\n this.dragImage.style.top = \"0px\";\n this.dragImage.style.zIndex = \"999999\";\n\n var transform = this.dragImage.style.transform;\n if (typeof transform !== \"undefined\") {\n this.dragImageTransform = \"\";\n if (transform != \"none\") {\n this.dragImageTransform = transform.replace(/translate\\(\\D*\\d+[^,]*,\\D*\\d+[^,]*\\)\\s*/g, '');\n }\n }\n\n var webkitTransform = this.dragImage.style[\"-webkit-transform\"];\n if (typeof webkitTransform !== \"undefined\") {\n this.dragImageWebKitTransform = \"\";\n if (webkitTransform != \"none\") {\n this.dragImageWebKitTransform = webkitTransform.replace(/translate\\(\\D*\\d+[^,]*,\\D*\\d+[^,]*\\)\\s*/g, '');\n }\n }\n\n this.translateDragImage(-9999, -9999);\n\n doc.body.appendChild(this.dragImage);\n }\n };\n\n // delayed touch start event\n function touchstartDelay(delay) {\n return function(evt){\n var el = evt.target;\n\n do {\n if (elementIsDraggable(el)) {\n var heldItem = function() {\n end.off();\n cancel.off();\n scroll.off();\n touchstart(evt);\n };\n\n var onReleasedItem = function() {\n end.off();\n cancel.off();\n scroll.off();\n clearTimeout(timer);\n };\n\n var timer = setTimeout(heldItem, delay);\n\n var end = onEvt(el, 'touchend', onReleasedItem, this);\n var cancel = onEvt(el, 'touchcancel', onReleasedItem, this);\n var scroll = onEvt(window, 'scroll', onReleasedItem, this);\n break;\n }\n } while ((el = el.parentNode) && el !== doc.body);\n };\n };\n\n // event listeners\n function touchstart(evt) {\n var el = evt.target;\n do {\n if (elementIsDraggable(el)) {\n handleTouchStartOnAnchor(evt, el);\n\n evt.preventDefault();\n new DragDrop(evt,el);\n break;\n }\n } while((el = el.parentNode) && el !== doc.body);\n }\n\n function elementIsDraggable(el){\n // if an element is not draggable either explicitly or implicitly we can exit immediately\n if(!el.draggable) return false;\n\n // if an element has been explicitly set to be draggable we're good to go\n if(el.hasAttribute(\"draggable\")) return true;\n\n // otherwise we investigate the implicit option\n return (!config.requireExplicitDraggable);\n }\n\n function elementIsAnchor(el){\n return el.tagName.toLowerCase() == \"a\";\n }\n\n function handleTouchStartOnAnchor(evt, el){\n // If draggable isn't explicitly set for anchors, then simulate a click event.\n // Otherwise plain old vanilla links will stop working.\n // https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Touch_events#Handling_clicks\n if (!el.hasAttribute(\"draggable\") && elementIsAnchor(el) && config.simulateAnchorClick) {\n var clickEvt = document.createEvent(\"MouseEvents\");\n clickEvt.initMouseEvent(\"click\", true, true, el.ownerDocument.defaultView, 1,\n evt.screenX, evt.screenY, evt.clientX, evt.clientY,\n evt.ctrlKey, evt.altKey, evt.shiftKey, evt.metaKey, 0, null);\n el.dispatchEvent(clickEvt);\n log(\"Simulating click to anchor\");\n }\n }\n\n // DOM helpers\n function elementFromTouchEvent(el,event) {\n var touch = event.changedTouches[0];\n var target = doc.elementFromPoint(\n touch[coordinateSystemForElementFromPoint + \"X\"],\n touch[coordinateSystemForElementFromPoint + \"Y\"]\n );\n return target;\n }\n\n //calculate the offset position of an element (relative to the window, not the document)\n function getOffset(el) {\n var rect = el.getBoundingClientRect();\n return {\n \"x\": rect.left,\n \"y\": rect.top\n };\n }\n\n function onEvt(el, event, handler, context) {\n if(context) {\n handler = handler.bind(context);\n }\n el.addEventListener(event, handler, {passive:false});\n return {\n off: function() {\n return el.removeEventListener(event, handler, {passive:false});\n }\n };\n }\n\n function once(el, event, handler, context) {\n if(context) {\n handler = handler.bind(context);\n }\n function listener(evt) {\n handler(evt);\n return el.removeEventListener(event,listener);\n }\n return el.addEventListener(event,listener);\n }\n\n // duplicateStyle expects dstNode to be a clone of srcNode\n function duplicateStyle(srcNode, dstNode) {\n // Is this node an element?\n if (srcNode.nodeType == 1) {\n // Remove any potential conflict attributes\n dstNode.removeAttribute(\"id\");\n dstNode.removeAttribute(\"class\");\n dstNode.removeAttribute(\"style\");\n dstNode.removeAttribute(\"draggable\");\n\n // Clone the style\n var cs = window.getComputedStyle(srcNode);\n for (var i = 0; i < cs.length; i++) {\n var csName = cs[i];\n dstNode.style.setProperty(csName, cs.getPropertyValue(csName), cs.getPropertyPriority(csName));\n }\n\n // Pointer events as none makes the drag image transparent to document.elementFromPoint()\n dstNode.style.pointerEvents = \"none\";\n }\n\n // Do the same for the children\n if (srcNode.hasChildNodes()) {\n for (var j = 0; j < srcNode.childNodes.length; j++) {\n duplicateStyle(srcNode.childNodes[j], dstNode.childNodes[j]);\n }\n }\n }\n\n // general helpers\n function log(msg) {\n console.log(msg);\n }\n\n function average(arr) {\n if (arr.length === 0) return 0;\n return arr.reduce((function(s, v) {\n return v + s;\n }), 0) / arr.length;\n }\n\n function noop() {}\n\n main();\n\n};\n\nif (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = _exposeIosHtml5DragDropShim;\n} else if (typeof window !== 'undefined') {\n _exposeIosHtml5DragDropShim(window.iosDragDropShim);\n}\n})(document);",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/mobiledragdrop/ios-drag-drop.js"
},
"$:/plugins/tiddlywiki/mobiledragdrop/license": {
"text": "Copyright (c) 2013 Tim Ruffles\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
"type": "text/plain",
"title": "$:/plugins/tiddlywiki/mobiledragdrop/license"
},
"$:/plugins/tiddlywiki/mobiledragdrop/rawmarkup": {
"title": "$:/plugins/tiddlywiki/mobiledragdrop/rawmarkup",
"tags": "$:/tags/RawMarkupWikified",
"text": "`<script>\nvar iosDragDropShim = { enableEnterLeave: true, holdToDrag: 300 };`\n{{$:/plugins/tiddlywiki/mobiledragdrop/ios-drag-drop.js}}\n`</script>`\n"
},
"$:/plugins/tiddlywiki/mobiledragdrop/readme": {
"title": "$:/plugins/tiddlywiki/mobiledragdrop/readme",
"text": "This plugin provides a \"shim\" that enables HTML 5 compatible drag and drop operations on mobile browsers, including iOS and Android. The shim was created by Tim Ruffles and is published at https://github.com/timruffles/ios-html5-drag-drop-shim.\n\nAfter installing the plugin it is necessary to save the HTML file a second time before it will be fully enabled.\n"
},
"$:/plugins/tiddlywiki/mobiledragdrop/startup.js": {
"title": "$:/plugins/tiddlywiki/mobiledragdrop/startup.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/mobiledragdrop/startup.js\ntype: application/javascript\nmodule-type: startup\n\nStartup initialisation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"mobiledragdrop\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\twindow.addEventListener(\"touchmove\", function() {});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/powered-by-tiddlywiki/banner": {
"title": "$:/plugins/tiddlywiki/powered-by-tiddlywiki/banner",
"tags": "$:/tags/PageTemplate",
"text": "<a href=\"https://tiddlywiki.com\" target=\"_blank\" rel=\"noopener noreferrer\">\n[img width=\"160px\" class=\"tc-powered-by-tiddlywiki-banner\" [$:/plugins/tiddlywiki/powered-by-tiddlywiki/powered-by-tiddlywiki.svg]]\n</a>\n"
},
"$:/plugins/tiddlywiki/powered-by-tiddlywiki/powered-by-tiddlywiki.svg": {
"title": "$:/plugins/tiddlywiki/powered-by-tiddlywiki/powered-by-tiddlywiki.svg",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg width=\"896px\" height=\"176px\" viewBox=\"0 0 896 176\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <rect fill=\"#5778D8\" x=\"0\" y=\"48\" width=\"896\" height=\"96\" rx=\"40\"></rect>\n <rect fill=\"#5778D8\" x=\"0\" y=\"107\" width=\"896\" height=\"69\"></rect>\n <path d=\"M509.45407,145.5 C500.298981,145.241109 496.272153,145.263373 491.609634,137.593336 L487.975741,137.697483 C483.746,137.509579 485.508738,137.594751 482.686885,137.454206 C477.968863,137.270547 478.724653,132.785957 477.894634,130.416559 C476.566884,122.373568 479.651651,114.28901 479.554337,106.244432 C479.519884,103.388798 475.480522,93.280884 474.037432,89.6670908 C469.513527,90.5191636 464.96508,90.681618 460.375565,90.9103975 C449.796709,90.8844742 439.289599,89.5885307 428.858455,87.9428201 C426.825687,96.3431567 420.783512,108.100814 425.777847,116.63814 C431.840041,125.46901 436.094195,127.915557 442.688237,128.448018 C449.282207,128.980047 450.771171,136.427581 449.175852,139.087582 C447.763804,140.925935 445.282044,141.259629 443.173485,141.705005 L438.9558,141.903312 C435.636833,141.791616 432.670288,140.89517 429.712926,139.51262 C424.77415,136.754658 419.673308,131.020977 415.883481,126.904585 C416.765781,128.548388 417.29205,131.757406 416.491791,133.250744 C414.251086,136.426166 404.560015,136.406765 400.12185,134.433533 C395.080168,132.192397 382.897505,116.456261 381.013953,104.670599 C386.024891,95.1907919 393.32484,86.9333052 397.018106,76.6112137 C388.96777,71.4725082 384.656121,63.1071256 385.215841,53.6312616 L385.417868,52.5343641 C377.496702,54.0178049 381.604436,53.4658821 373.083336,54.1107205 C345.946392,54.0276592 322.081628,35.6209152 335.519519,7.01357089 C336.393386,5.31957309 337.22468,3.77943723 338.706061,4.51496674 C339.895034,5.10516147 339.724245,7.47267561 339.126195,10.0981299 C331.444909,44.2800486 368.986482,44.541671 392.063954,38.2164846 C394.354375,37.5885907 398.909687,33.3597492 402.065239,31.9578456 C407.223273,29.6664872 412.821793,28.7368246 418.377878,28.0669527 C432.196953,26.4917086 448.805787,33.7743125 457.244692,34.0121086 C465.683696,34.2498951 477.68849,31.9906839 485.057739,32.4663611 C490.404756,32.7111006 495.655194,33.6766118 500.814217,35.0519721 C504.15359,18.7743924 504.389678,6.77738508 512.306113,4 C516.952271,4.73410247 520.532435,11.0679387 523.182469,14.4521241 C528.590341,14.2372222 533.726214,15.6070021 538.832705,17.1272571 C548.077718,15.8147836 555.835649,10.6211429 564,6.58095832 C555.726838,13.3374633 554.604541,24.3296396 555.549873,34.4945636 C555.901428,39.7692086 554.411518,45.4959316 552.56964,50.8964678 C549.122861,59.6952657 542.466357,68.969826 534.740599,68.4941441 C531.819966,68.4017255 530.123302,66.7473485 527.952583,64.9810904 C527.531491,68.5586705 525.876481,71.7509522 524.281076,74.9149914 C520.596809,81.9303216 510.969052,85.0217786 502.054286,92.5127055 C493.140125,100.003746 504.906806,126.757399 507.75979,131.632016 C510.612311,136.507097 518.575572,138.290532 515.485563,142.690409 C514.54025,144.143492 513.094823,144.663196 511.550039,145.2269 L509.45407,145.5 Z M406.857056,123.298483 L408.270768,123.654421 C410.047226,122.976086 413.618139,124.024471 415.512346,124.537037 C412.024332,121.236977 406.769383,116.390903 402.983374,113.335801 C401.740688,109.637126 402.270922,105.91532 402.538288,102.139524 L402.591916,101.82716 C401.099565,104.849781 399.20572,107.787956 398.187823,110.969578 C396.996657,115.26186 403.481867,119.893011 405.996567,122.547196 L406.857056,123.298483 Z\" stroke=\"#FFFFFF\" stroke-width=\"3\" fill=\"#000000\"></path>\n <path d=\"M539.512,88.304 L576.504,88.304 L576.504,95.216 L561.976,95.216 L561.976,134 L553.976,134 L553.976,95.216 L539.512,95.216 L539.512,88.304 Z M580.984,88.304 L588.28,88.304 L588.28,95.216 L580.984,95.216 L580.984,88.304 Z M580.984,100.912 L588.28,100.912 L588.28,134 L580.984,134 L580.984,100.912 Z M627.384,134 L620.472,134 L620.472,129.52 L620.344,129.52 C619.362662,131.44001 617.933343,132.815996 616.056,133.648 C614.178657,134.480004 612.194677,134.896 610.104,134.896 C607.50132,134.896 605.229343,134.437338 603.288,133.52 C601.346657,132.602662 599.736006,131.354675 598.456,129.776 C597.175994,128.197325 596.216003,126.330677 595.576,124.176 C594.935997,122.021323 594.616,119.706679 594.616,117.232 C594.616,114.245318 595.021329,111.664011 595.832,109.488 C596.642671,107.311989 597.719993,105.520007 599.064,104.112 C600.408007,102.703993 601.943991,101.669337 603.672,101.008 C605.400009,100.346663 607.159991,100.016 608.952,100.016 C609.976005,100.016 611.021328,100.111999 612.088,100.304 C613.154672,100.496001 614.178662,100.805331 615.16,101.232 C616.141338,101.658669 617.047996,102.202663 617.88,102.864 C618.712004,103.525337 619.405331,104.303996 619.96,105.2 L620.088,105.2 L620.088,88.304 L627.384,88.304 L627.384,134 Z M601.912,117.808 C601.912,119.216007 602.093332,120.60266 602.456,121.968 C602.818668,123.33334 603.37333,124.549328 604.12,125.616 C604.86667,126.682672 605.815994,127.535997 606.968,128.176 C608.120006,128.816003 609.485325,129.136 611.064,129.136 C612.685341,129.136 614.082661,128.79467 615.256,128.112 C616.429339,127.42933 617.38933,126.533339 618.136,125.424 C618.88267,124.314661 619.437332,123.066674 619.8,121.68 C620.162668,120.293326 620.344,118.874674 620.344,117.424 C620.344,113.754648 619.522675,110.89601 617.88,108.848 C616.237325,106.79999 614.008014,105.776 611.192,105.776 C609.485325,105.776 608.045339,106.127996 606.872,106.832 C605.698661,107.536004 604.73867,108.453328 603.992,109.584 C603.24533,110.714672 602.712002,111.99466 602.392,113.424 C602.071998,114.85334 601.912,116.314659 601.912,117.808 L601.912,117.808 Z M666.488,134 L659.576,134 L659.576,129.52 L659.448,129.52 C658.466662,131.44001 657.037343,132.815996 655.16,133.648 C653.282657,134.480004 651.298677,134.896 649.208,134.896 C646.60532,134.896 644.333343,134.437338 642.392,133.52 C640.450657,132.602662 638.840006,131.354675 637.56,129.776 C636.279994,128.197325 635.320003,126.330677 634.68,124.176 C634.039997,122.021323 633.72,119.706679 633.72,117.232 C633.72,114.245318 634.125329,111.664011 634.936,109.488 C635.746671,107.311989 636.823993,105.520007 638.168,104.112 C639.512007,102.703993 641.047991,101.669337 642.776,101.008 C644.504009,100.346663 646.263991,100.016 648.056,100.016 C649.080005,100.016 650.125328,100.111999 651.192,100.304 C652.258672,100.496001 653.282662,100.805331 654.264,101.232 C655.245338,101.658669 656.151996,102.202663 656.984,102.864 C657.816004,103.525337 658.509331,104.303996 659.064,105.2 L659.192,105.2 L659.192,88.304 L666.488,88.304 L666.488,134 Z M641.016,117.808 C641.016,119.216007 641.197332,120.60266 641.56,121.968 C641.922668,123.33334 642.47733,124.549328 643.224,125.616 C643.97067,126.682672 644.919994,127.535997 646.072,128.176 C647.224006,128.816003 648.589325,129.136 650.168,129.136 C651.789341,129.136 653.186661,128.79467 654.36,128.112 C655.533339,127.42933 656.49333,126.533339 657.24,125.424 C657.98667,124.314661 658.541332,123.066674 658.904,121.68 C659.266668,120.293326 659.448,118.874674 659.448,117.424 C659.448,113.754648 658.626675,110.89601 656.984,108.848 C655.341325,106.79999 653.112014,105.776 650.296,105.776 C648.589325,105.776 647.149339,106.127996 645.976,106.832 C644.802661,107.536004 643.84267,108.453328 643.096,109.584 C642.34933,110.714672 641.816002,111.99466 641.496,113.424 C641.175998,114.85334 641.016,116.314659 641.016,117.808 L641.016,117.808 Z M674.616,88.304 L681.912,88.304 L681.912,134 L674.616,134 L674.616,88.304 Z M686.2,100.912 L694.2,100.912 L702.84,125.616 L702.968,125.616 L711.352,100.912 L718.968,100.912 L706.104,135.792 C705.506664,137.285341 704.920003,138.71466 704.344,140.08 C703.767997,141.44534 703.064004,142.650661 702.232,143.696 C701.399996,144.741339 700.36534,145.57333 699.128,146.192 C697.89066,146.81067 696.31201,147.12 694.392,147.12 C692.685325,147.12 691.000008,146.992001 689.336,146.736 L689.336,140.592 C689.933336,140.677334 690.509331,140.773333 691.064,140.88 C691.618669,140.986667 692.194664,141.04 692.792,141.04 C693.645338,141.04 694.349331,140.933334 694.904,140.72 C695.458669,140.506666 695.917332,140.197335 696.28,139.792 C696.642668,139.386665 696.951999,138.906669 697.208,138.352 C697.464001,137.797331 697.698666,137.157337 697.912,136.432 L698.744,133.872 L686.2,100.912 Z M719.608,88.304 L727.736,88.304 L735.992,123.248 L736.12,123.248 L745.336,88.304 L753.528,88.304 L762.488,123.248 L762.616,123.248 L771.128,88.304 L779.256,88.304 L766.648,134 L758.52,134 L749.368,99.056 L749.24,99.056 L739.896,134 L731.64,134 L719.608,88.304 Z M783.672,88.304 L790.968,88.304 L790.968,95.216 L783.672,95.216 L783.672,88.304 Z M783.672,100.912 L790.968,100.912 L790.968,134 L783.672,134 L783.672,100.912 Z M799.096,88.304 L806.392,88.304 L806.392,114.288 L819.576,100.912 L828.536,100.912 L815.864,113.072 L829.752,134 L820.856,134 L810.744,117.936 L806.392,122.16 L806.392,134 L799.096,134 L799.096,88.304 Z M833.464,88.304 L840.76,88.304 L840.76,95.216 L833.464,95.216 L833.464,88.304 Z M833.464,100.912 L840.76,100.912 L840.76,134 L833.464,134 L833.464,100.912 Z\" fill=\"#FFFFFF\"></path>\n <path d=\"M48.592,108.656 L48.72,108.656 C48.9760013,107.845329 49.4026637,106.949338 50,105.968 C50.5973363,104.986662 51.3866618,104.080004 52.368,103.248 C53.3493382,102.415996 54.5333264,101.722669 55.92,101.168 C57.3066736,100.613331 58.895991,100.336 60.688,100.336 C63.2053459,100.336 65.3919907,100.805329 67.248,101.744 C69.1040093,102.682671 70.6399939,103.941325 71.856,105.52 C73.0720061,107.098675 73.9786637,108.933323 74.576,111.024 C75.1733363,113.114677 75.472,115.311988 75.472,117.616 C75.472,120.133346 75.1733363,122.437323 74.576,124.528 C73.9786637,126.618677 73.0720061,128.421326 71.856,129.936 C70.6399939,131.450674 69.1040093,132.634662 67.248,133.488 C65.3919907,134.341338 63.2053459,134.768 60.688,134.768 C57.9573197,134.768 55.525344,134.170673 53.392,132.976 C51.258656,131.781327 49.7013382,129.840013 48.72,127.152 L48.592,127.152 L48.592,145.776 L46.16,145.776 L46.16,101.104 L48.592,101.104 L48.592,108.656 Z M60.688,132.656 C62.821344,132.656 64.6666589,132.250671 66.224,131.44 C67.7813411,130.629329 69.0613283,129.54134 70.064,128.176 C71.0666717,126.81066 71.8133309,125.221342 72.304,123.408 C72.7946691,121.594658 73.04,119.66401 73.04,117.616 C73.04,115.738657 72.8053357,113.893342 72.336,112.08 C71.8666643,110.266658 71.1413382,108.64534 70.16,107.216 C69.1786618,105.78666 67.9093411,104.634671 66.352,103.76 C64.7946589,102.885329 62.9066778,102.448 60.688,102.448 C58.5119891,102.448 56.6560077,102.874662 55.12,103.728 C53.5839923,104.581338 52.3360048,105.711993 51.376,107.12 C50.4159952,108.528007 49.7226688,110.138658 49.296,111.952 C48.8693312,113.765342 48.656,115.653324 48.656,117.616 C48.656,119.578676 48.8479981,121.466658 49.232,123.28 C49.6160019,125.093342 50.2666621,126.693326 51.184,128.08 C52.1013379,129.466674 53.3386589,130.575996 54.896,131.408 C56.4533411,132.240004 58.3839885,132.656 60.688,132.656 L60.688,132.656 Z M79.632,117.552 C79.632,115.205322 79.9626634,112.997344 80.624,110.928 C81.2853366,108.858656 82.2559936,107.034675 83.536,105.456 C84.8160064,103.877325 86.3946573,102.629338 88.272,101.712 C90.1493427,100.794662 92.3039878,100.336 94.736,100.336 C97.1680122,100.336 99.3226573,100.794662 101.2,101.712 C103.077343,102.629338 104.655994,103.877325 105.936,105.456 C107.216006,107.034675 108.186663,108.858656 108.848,110.928 C109.509337,112.997344 109.84,115.205322 109.84,117.552 C109.84,119.898678 109.509337,122.117323 108.848,124.208 C108.186663,126.298677 107.216006,128.122659 105.936,129.68 C104.655994,131.237341 103.077343,132.474662 101.2,133.392 C99.3226573,134.309338 97.1680122,134.768 94.736,134.768 C92.3039878,134.768 90.1493427,134.309338 88.272,133.392 C86.3946573,132.474662 84.8160064,131.237341 83.536,129.68 C82.2559936,128.122659 81.2853366,126.298677 80.624,124.208 C79.9626634,122.117323 79.632,119.898678 79.632,117.552 L79.632,117.552 Z M82.064,117.552 C82.064,119.514676 82.3413306,121.402658 82.896,123.216 C83.4506694,125.029342 84.261328,126.639993 85.328,128.048 C86.394672,129.456007 87.7173254,130.575996 89.296,131.408 C90.8746746,132.240004 92.6879898,132.656 94.736,132.656 C96.7840102,132.656 98.5973254,132.240004 100.176,131.408 C101.754675,130.575996 103.077328,129.456007 104.144,128.048 C105.210672,126.639993 106.021331,125.029342 106.576,123.216 C107.130669,121.402658 107.408,119.514676 107.408,117.552 C107.408,115.589324 107.130669,113.701342 106.576,111.888 C106.021331,110.074658 105.210672,108.464007 104.144,107.056 C103.077328,105.647993 101.754675,104.528004 100.176,103.696 C98.5973254,102.863996 96.7840102,102.448 94.736,102.448 C92.6879898,102.448 90.8746746,102.863996 89.296,103.696 C87.7173254,104.528004 86.394672,105.647993 85.328,107.056 C84.261328,108.464007 83.4506694,110.074658 82.896,111.888 C82.3413306,113.701342 82.064,115.589324 82.064,117.552 L82.064,117.552 Z M123.728,131.184 L123.856,131.184 L132.816,101.104 L136.08,101.104 L145.104,131.184 L145.232,131.184 L154.448,101.104 L157.136,101.104 L146.576,134 L143.568,134 L134.544,104.176 L134.416,104.176 L125.328,134 L122.256,134 L111.824,101.104 L114.448,101.104 L123.728,131.184 Z M161.552,117.872 L161.552,118.256 C161.552,120.17601 161.807997,122.010658 162.32,123.76 C162.832003,125.509342 163.589328,127.045327 164.592,128.368 C165.594672,129.690673 166.853326,130.735996 168.368,131.504 C169.882674,132.272004 171.642657,132.656 173.648,132.656 C176.93335,132.656 179.53599,131.792009 181.456,130.064 C183.37601,128.335991 184.698663,125.936015 185.424,122.864 L187.856,122.864 C187.130663,126.704019 185.562679,129.64799 183.152,131.696 C180.741321,133.74401 177.55202,134.768 173.584,134.768 C171.151988,134.768 169.029342,134.330671 167.216,133.456 C165.402658,132.581329 163.888006,131.386674 162.672,129.872 C161.455994,128.357326 160.549336,126.565344 159.952,124.496 C159.354664,122.426656 159.056,120.197345 159.056,117.808 C159.056,115.503988 159.36533,113.296011 159.984,111.184 C160.60267,109.071989 161.53066,107.216008 162.768,105.616 C164.00534,104.015992 165.551991,102.736005 167.408,101.776 C169.264009,100.815995 171.450654,100.336 173.968,100.336 C176.272012,100.336 178.309324,100.762662 180.08,101.616 C181.850676,102.469338 183.333327,103.631993 184.528,105.104 C185.722673,106.576007 186.62933,108.282657 187.248,110.224 C187.86667,112.165343 188.176,114.245322 188.176,116.464 C188.176,116.677334 188.165333,116.922665 188.144,117.2 C188.122667,117.477335 188.112,117.701332 188.112,117.872 L161.552,117.872 Z M185.68,115.76 C185.594666,113.967991 185.296003,112.272008 184.784,110.672 C184.271997,109.071992 183.514672,107.664006 182.512,106.448 C181.509328,105.231994 180.29334,104.261337 178.864,103.536 C177.43466,102.810663 175.802676,102.448 173.968,102.448 C172.005324,102.448 170.277341,102.82133 168.784,103.568 C167.290659,104.31467 166.032005,105.295994 165.008,106.512 C163.983995,107.728006 163.194669,109.146659 162.64,110.768 C162.085331,112.389341 161.744001,114.053325 161.616,115.76 L185.68,115.76 Z M196.24,108.4 L196.432,108.4 C196.730668,107.333328 197.274663,106.330671 198.064,105.392 C198.853337,104.453329 199.813328,103.64267 200.944,102.96 C202.074672,102.27733 203.333326,101.754668 204.72,101.392 C206.106674,101.029332 207.546659,100.869333 209.04,100.912 L209.04,103.344 C207.759994,103.173332 206.298675,103.301331 204.656,103.728 C203.013325,104.154669 201.445341,105.093326 199.952,106.544 C199.354664,107.184003 198.832002,107.802664 198.384,108.4 C197.935998,108.997336 197.562668,109.658663 197.264,110.384 C196.965332,111.109337 196.730668,111.919996 196.56,112.816 C196.389332,113.712004 196.282667,114.77866 196.24,116.016 L196.24,134 L193.808,134 L193.808,101.104 L196.24,101.104 L196.24,108.4 Z M211.792,117.872 L211.792,118.256 C211.792,120.17601 212.047997,122.010658 212.56,123.76 C213.072003,125.509342 213.829328,127.045327 214.832,128.368 C215.834672,129.690673 217.093326,130.735996 218.608,131.504 C220.122674,132.272004 221.882657,132.656 223.888,132.656 C227.17335,132.656 229.77599,131.792009 231.696,130.064 C233.61601,128.335991 234.938663,125.936015 235.664,122.864 L238.096,122.864 C237.370663,126.704019 235.802679,129.64799 233.392,131.696 C230.981321,133.74401 227.79202,134.768 223.824,134.768 C221.391988,134.768 219.269342,134.330671 217.456,133.456 C215.642658,132.581329 214.128006,131.386674 212.912,129.872 C211.695994,128.357326 210.789336,126.565344 210.192,124.496 C209.594664,122.426656 209.296,120.197345 209.296,117.808 C209.296,115.503988 209.60533,113.296011 210.224,111.184 C210.84267,109.071989 211.77066,107.216008 213.008,105.616 C214.24534,104.015992 215.791991,102.736005 217.648,101.776 C219.504009,100.815995 221.690654,100.336 224.208,100.336 C226.512012,100.336 228.549324,100.762662 230.32,101.616 C232.090676,102.469338 233.573327,103.631993 234.768,105.104 C235.962673,106.576007 236.86933,108.282657 237.488,110.224 C238.10667,112.165343 238.416,114.245322 238.416,116.464 C238.416,116.677334 238.405333,116.922665 238.384,117.2 C238.362667,117.477335 238.352,117.701332 238.352,117.872 L211.792,117.872 Z M235.92,115.76 C235.834666,113.967991 235.536003,112.272008 235.024,110.672 C234.511997,109.071992 233.754672,107.664006 232.752,106.448 C231.749328,105.231994 230.53334,104.261337 229.104,103.536 C227.67466,102.810663 226.042676,102.448 224.208,102.448 C222.245324,102.448 220.517341,102.82133 219.024,103.568 C217.530659,104.31467 216.272005,105.295994 215.248,106.512 C214.223995,107.728006 213.434669,109.146659 212.88,110.768 C212.325331,112.389341 211.984001,114.053325 211.856,115.76 L235.92,115.76 Z M269.456,126.96 L269.328,126.96 C267.96266,129.56268 266.25601,131.51466 264.208,132.816 C262.15999,134.11734 259.664015,134.768 256.72,134.768 C254.245321,134.768 252.112009,134.298671 250.32,133.36 C248.527991,132.421329 247.056006,131.162675 245.904,129.584 C244.751994,128.005325 243.898669,126.181344 243.344,124.112 C242.789331,122.042656 242.512,119.877345 242.512,117.616 C242.512,115.183988 242.810664,112.912011 243.408,110.8 C244.005336,108.687989 244.911994,106.864008 246.128,105.328 C247.344006,103.791992 248.869324,102.576004 250.704,101.68 C252.538676,100.783996 254.693321,100.336 257.168,100.336 C258.490673,100.336 259.791994,100.517332 261.072,100.88 C262.352006,101.242668 263.535995,101.76533 264.624,102.448 C265.712005,103.13067 266.661329,103.983995 267.472,105.008 C268.282671,106.032005 268.901331,107.183994 269.328,108.464 L269.456,108.464 L269.456,88.304 L271.888,88.304 L271.888,134 L269.456,134 L269.456,126.96 Z M257.232,132.656 C259.322677,132.656 261.125326,132.229338 262.64,131.376 C264.154674,130.522662 265.413328,129.392007 266.416,127.984 C267.418672,126.575993 268.165331,124.965342 268.656,123.152 C269.146669,121.338658 269.392,119.493343 269.392,117.616 C269.392,115.69599 269.146669,113.829342 268.656,112.016 C268.165331,110.202658 267.429338,108.58134 266.448,107.152 C265.466662,105.72266 264.197341,104.581338 262.64,103.728 C261.082659,102.874662 259.258677,102.448 257.168,102.448 C254.991989,102.448 253.136008,102.863996 251.6,103.696 C250.063992,104.528004 248.794672,105.647993 247.792,107.056 C246.789328,108.464007 246.064002,110.085324 245.616,111.92 C245.167998,113.754676 244.944,115.653324 244.944,117.616 C244.944,119.53601 245.189331,121.402658 245.68,123.216 C246.170669,125.029342 246.917328,126.639993 247.92,128.048 C248.922672,129.456007 250.191992,130.575996 251.728,131.408 C253.264008,132.240004 255.098656,132.656 257.232,132.656 L257.232,132.656 Z M298,88.304 L300.432,88.304 L300.432,108.08 L300.56,108.08 C301.029336,106.799994 301.690662,105.680005 302.544,104.72 C303.397338,103.759995 304.378661,102.949337 305.488,102.288 C306.597339,101.626663 307.791994,101.136002 309.072,100.816 C310.352006,100.495998 311.67466,100.336 313.04,100.336 C315.472012,100.336 317.573324,100.762662 319.344,101.616 C321.114676,102.469338 322.597327,103.642659 323.792,105.136 C324.986673,106.629341 325.871997,108.36799 326.448,110.352 C327.024003,112.33601 327.312,114.479988 327.312,116.784 C327.312,120.709353 326.778672,123.855988 325.712,126.224 C324.645328,128.592012 323.365341,130.405327 321.872,131.664 C320.378659,132.922673 318.821341,133.754665 317.2,134.16 C315.578659,134.565335 314.192006,134.768 313.04,134.768 C310.863989,134.768 309.018674,134.42667 307.504,133.744 C305.989326,133.06133 304.741338,132.261338 303.76,131.344 C302.778662,130.426662 302.032003,129.520004 301.52,128.624 C301.007997,127.727996 300.688001,127.066669 300.56,126.64 L300.432,126.64 L300.432,134 L298,134 L298,88.304 Z M313.04,132.656 C315.216011,132.656 317.050659,132.186671 318.544,131.248 C320.037341,130.309329 321.253329,129.082674 322.192,127.568 C323.130671,126.053326 323.813331,124.346676 324.24,122.448 C324.666669,120.549324 324.88,118.661343 324.88,116.784 C324.88,114.949324 324.634669,113.178675 324.144,111.472 C323.653331,109.765325 322.906672,108.240007 321.904,106.896 C320.901328,105.551993 319.664007,104.474671 318.192,103.664 C316.719993,102.853329 315.002676,102.448 313.04,102.448 C310.906656,102.448 309.050675,102.810663 307.472,103.536 C305.893325,104.261337 304.592005,105.263994 303.568,106.544 C302.543995,107.824006 301.776003,109.338658 301.264,111.088 C300.751997,112.837342 300.496,114.73599 300.496,116.784 C300.496,118.789343 300.730664,120.75199 301.2,122.672 C301.669336,124.59201 302.405328,126.287993 303.408,127.76 C304.410672,129.232007 305.701325,130.415996 307.28,131.312 C308.858675,132.208004 310.778655,132.656 313.04,132.656 L313.04,132.656 Z M329.04,101.104 L331.92,101.104 L344.144,131.12 L355.408,101.104 L358.16,101.104 L344.08,137.52 C343.39733,139.141341 342.768003,140.538661 342.192,141.712 C341.615997,142.885339 340.965337,143.749331 340.24,144.304 C339.386662,144.98667 338.373339,145.402666 337.2,145.552 C336.026661,145.701334 334.48001,145.776 332.56,145.776 L332.56,143.664 C334.309342,143.664 335.674662,143.525335 336.656,143.248 C337.637338,142.970665 338.554662,142.405338 339.408,141.552 C339.877336,141.082664 340.367997,140.218673 340.88,138.96 C341.392003,137.701327 342.031996,135.984011 342.8,133.808 L329.04,101.104 Z\" fill=\"#FFFFFF\"></path>\n </g>\n</svg>\n"
},
"$:/plugins/tiddlywiki/powered-by-tiddlywiki/readme": {
"title": "$:/plugins/tiddlywiki/powered-by-tiddlywiki/readme",
"text": "This plugin adds a \"Powered by ~TiddlyWiki\" banner that links back to https://tiddlywiki.com\n\nIt's very basic at the moment, but the plan is to improve it by making it more customisable.\n"
},
"$:/plugins/tiddlywiki/powered-by-tiddlywiki/styles": {
"title": "$:/plugins/tiddlywiki/powered-by-tiddlywiki/styles",
"tags": "$:/tags/Stylesheet",
"text": ".tc-powered-by-tiddlywiki-banner {\n\tposition: fixed;\n\tright: 1em;\n\tbottom: 0;\n z-index: 2000;\n}"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/qrcode/examples": {
"title": "$:/plugins/tiddlywiki/qrcode/examples",
"text": "<<tabs \"[all[shadows+tiddlers]tag[$:/tags/MakeQR]!has[draft.of]]\" \"$:/plugins/tiddlywiki/qrcode/MakeGenericQR\">>"
},
"$:/plugins/tiddlywiki/qrcode/readme": {
"title": "$:/plugins/tiddlywiki/qrcode/readme",
"text": "The QR code plugin provides a macro that enables any text to be rendered as a [[QR code|https://en.wikipedia.org/wiki/QR_code]]. QR codes are a type of 2-dimensional bar code that encodes arbitrary data: text, numbers, links. QR code readers are available or built-in for smartphones, making them a convenient means to transfer information between devices\n\nThe QR code plugin adds the following features to TiddlyWiki:\n\n* A new [[makeqr Macro]] that renders specified text as a QR code image that can be displayed or printed\n* A new toolbar button that can display several QR code renderings of the content of a tiddler:\n** Raw content\n** Rendered, formatted content\n** URL of tiddler\n\nThe QR code plugin is based on the library [[qrcode.js by Zeno Zeng|https://github.com/zenozeng/node-yaqrcode]]."
},
"$:/plugins/tiddlywiki/qrcode/usage": {
"title": "$:/plugins/tiddlywiki/qrcode/usage",
"text": "! `makeqr` Macro\n\nThe <<.def makeqr>> [[macro|Macros]] converts text data into an image of the corresponding QR code. The image is returned as [[base64-encoded data URI|https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs]].\n\n!! Parameters\n\n;text\n: The text to encode\n;size\n: The size of the image in pixels (defaults to 500)\n;errorCorrectLevel\n: Determines the amount of error correction applied to the image; see below (defaults to \"M\").\n;fallback\n: The fallback image to be returned in case of an error (see below)\n\nThe conversion will fail if the text is too long and/or complex and the macro will return the provided fallback image. If no fallback image is provided then an error image is generated.\n\nThe error correction level is a [[QR code feature|http://www.qrcode.com/en/about/error_correction.html]]:\n\n<<<\nQR Code has error correction capability to restore data if the code is dirty or damaged. ... Level Q or H may be selected for factory environment where QR Code get dirty, whereas Level L may be selected for clean environment with the large amount of data. Typically, Level M (15%) is most frequently selected.\n<<<\n\n!! Examples\n\nMaking a QR code for a simple string of text:\n\n```\n<<makeqr \"Hello there!\">>\n```\n\nMaking a QR code for the URL field of the current tiddler:\n\n```\n<$macrocall $name=\"makeqr\" text={{!!url}}/>\n```\n\nMaking a QR code for the URL of the current wiki:\n\n```\n<$macrocall $name=\"makeqr\" text={{$:/info/url/full}}/>\n```\n"
},
"$:/plugins/tiddlywiki/qrcode/qrcode.js": {
"text": "//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//\thttp://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n//\thttp://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\n//---------------------------------------------------------------------\n// qrcode\n//---------------------------------------------------------------------\n\n/**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectLevel 'L','M','Q','H'\n */\nvar qrcode = function(typeNumber, errorCorrectLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectLevel = QRErrorCorrectLevel[errorCorrectLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = new Array();\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n\t_moduleCount = _typeNumber * 4 + 17;\n\t_modules = function(moduleCount) {\n\t var modules = new Array(moduleCount);\n\t for (var row = 0; row < moduleCount; row += 1) {\n\t\tmodules[row] = new Array(moduleCount);\n\t\tfor (var col = 0; col < moduleCount; col += 1) {\n\t\t modules[row][col] = null;\n\t\t}\n\t }\n\t return modules;\n\t}(_moduleCount);\n\n\tsetupPositionProbePattern(0, 0);\n\tsetupPositionProbePattern(_moduleCount - 7, 0);\n\tsetupPositionProbePattern(0, _moduleCount - 7);\n\tsetupPositionAdjustPattern();\n\tsetupTimingPattern();\n\tsetupTypeInfo(test, maskPattern);\n\n\tif (_typeNumber >= 7) {\n\t setupTypeNumber(test);\n\t}\n\n\tif (_dataCache == null) {\n\t _dataCache = createData(_typeNumber, _errorCorrectLevel, _dataList);\n\t}\n\n\tmapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n\tfor (var r = -1; r <= 7; r += 1) {\n\n\t if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n\t for (var c = -1; c <= 7; c += 1) {\n\n\t\tif (col + c <= -1 || _moduleCount <= col + c) continue;\n\n\t\tif ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n\t\t || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n\t\t || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n\t\t _modules[row + r][col + c] = true;\n\t\t} else {\n\t\t _modules[row + r][col + c] = false;\n\t\t}\n\t }\n\t}\n };\n\n var getBestMaskPattern = function() {\n\n\tvar minLostPoint = 0;\n\tvar pattern = 0;\n\n\tfor (var i = 0; i < 8; i += 1) {\n\n\t makeImpl(true, i);\n\n\t var lostPoint = QRUtil.getLostPoint(_this);\n\n\t if (i == 0 || minLostPoint > lostPoint) {\n\t\tminLostPoint = lostPoint;\n\t\tpattern = i;\n\t }\n\t}\n\n\treturn pattern;\n };\n\n var setupTimingPattern = function() {\n\n\tfor (var r = 8; r < _moduleCount - 8; r += 1) {\n\t if (_modules[r][6] != null) {\n\t\tcontinue;\n\t }\n\t _modules[r][6] = (r % 2 == 0);\n\t}\n\n\tfor (var c = 8; c < _moduleCount - 8; c += 1) {\n\t if (_modules[6][c] != null) {\n\t\tcontinue;\n\t }\n\t _modules[6][c] = (c % 2 == 0);\n\t}\n };\n\n var setupPositionAdjustPattern = function() {\n\n\tvar pos = QRUtil.getPatternPosition(_typeNumber);\n\n\tfor (var i = 0; i < pos.length; i += 1) {\n\n\t for (var j = 0; j < pos.length; j += 1) {\n\n\t\tvar row = pos[i];\n\t\tvar col = pos[j];\n\n\t\tif (_modules[row][col] != null) {\n\t\t continue;\n\t\t}\n\n\t\tfor (var r = -2; r <= 2; r += 1) {\n\n\t\t for (var c = -2; c <= 2; c += 1) {\n\n\t\t\tif (r == -2 || r == 2 || c == -2 || c == 2\n\t\t\t || (r == 0 && c == 0) ) {\n\t\t\t _modules[row + r][col + c] = true;\n\t\t\t} else {\n\t\t\t _modules[row + r][col + c] = false;\n\t\t\t}\n\t\t }\n\t\t}\n\t }\n\t}\n };\n\n var setupTypeNumber = function(test) {\n\n\tvar bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n\tfor (var i = 0; i < 18; i += 1) {\n\t var mod = (!test && ( (bits >> i) & 1) == 1);\n\t _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n\t}\n\n\tfor (var i = 0; i < 18; i += 1) {\n\t var mod = (!test && ( (bits >> i) & 1) == 1);\n\t _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n\t}\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n\tvar data = (_errorCorrectLevel << 3) | maskPattern;\n\tvar bits = QRUtil.getBCHTypeInfo(data);\n\n\t// vertical\n\tfor (var i = 0; i < 15; i += 1) {\n\n\t var mod = (!test && ( (bits >> i) & 1) == 1);\n\n\t if (i < 6) {\n\t\t_modules[i][8] = mod;\n\t } else if (i < 8) {\n\t\t_modules[i + 1][8] = mod;\n\t } else {\n\t\t_modules[_moduleCount - 15 + i][8] = mod;\n\t }\n\t}\n\n\t// horizontal\n\tfor (var i = 0; i < 15; i += 1) {\n\n\t var mod = (!test && ( (bits >> i) & 1) == 1);\n\n\t if (i < 8) {\n\t\t_modules[8][_moduleCount - i - 1] = mod;\n\t } else if (i < 9) {\n\t\t_modules[8][15 - i - 1 + 1] = mod;\n\t } else {\n\t\t_modules[8][15 - i - 1] = mod;\n\t }\n\t}\n\n\t// fixed module\n\t_modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n\tvar inc = -1;\n\tvar row = _moduleCount - 1;\n\tvar bitIndex = 7;\n\tvar byteIndex = 0;\n\tvar maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n\tfor (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n\t if (col == 6) col -= 1;\n\n\t while (true) {\n\n\t\tfor (var c = 0; c < 2; c += 1) {\n\n\t\t if (_modules[row][col - c] == null) {\n\n\t\t\tvar dark = false;\n\n\t\t\tif (byteIndex < data.length) {\n\t\t\t dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n\t\t\t}\n\n\t\t\tvar mask = maskFunc(row, col - c);\n\n\t\t\tif (mask) {\n\t\t\t dark = !dark;\n\t\t\t}\n\n\t\t\t_modules[row][col - c] = dark;\n\t\t\tbitIndex -= 1;\n\n\t\t\tif (bitIndex == -1) {\n\t\t\t byteIndex += 1;\n\t\t\t bitIndex = 7;\n\t\t\t}\n\t\t }\n\t\t}\n\n\t\trow += inc;\n\n\t\tif (row < 0 || _moduleCount <= row) {\n\t\t row -= inc;\n\t\t inc = -inc;\n\t\t break;\n\t\t}\n\t }\n\t}\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n\tvar offset = 0;\n\n\tvar maxDcCount = 0;\n\tvar maxEcCount = 0;\n\n\tvar dcdata = new Array(rsBlocks.length);\n\tvar ecdata = new Array(rsBlocks.length);\n\n\tfor (var r = 0; r < rsBlocks.length; r += 1) {\n\n\t var dcCount = rsBlocks[r].dataCount;\n\t var ecCount = rsBlocks[r].totalCount - dcCount;\n\n\t maxDcCount = Math.max(maxDcCount, dcCount);\n\t maxEcCount = Math.max(maxEcCount, ecCount);\n\n\t dcdata[r] = new Array(dcCount);\n\n\t for (var i = 0; i < dcdata[r].length; i += 1) {\n\t\tdcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n\t }\n\t offset += dcCount;\n\n\t var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n\t var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n\t var modPoly = rawPoly.mod(rsPoly);\n\t ecdata[r] = new Array(rsPoly.getLength() - 1);\n\t for (var i = 0; i < ecdata[r].length; i += 1) {\n\t\tvar modIndex = i + modPoly.getLength() - ecdata[r].length;\n\t\tecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n\t }\n\t}\n\n\tvar totalCodeCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i += 1) {\n\t totalCodeCount += rsBlocks[i].totalCount;\n\t}\n\n\tvar data = new Array(totalCodeCount);\n\tvar index = 0;\n\n\tfor (var i = 0; i < maxDcCount; i += 1) {\n\t for (var r = 0; r < rsBlocks.length; r += 1) {\n\t\tif (i < dcdata[r].length) {\n\t\t data[index] = dcdata[r][i];\n\t\t index += 1;\n\t\t}\n\t }\n\t}\n\n\tfor (var i = 0; i < maxEcCount; i += 1) {\n\t for (var r = 0; r < rsBlocks.length; r += 1) {\n\t\tif (i < ecdata[r].length) {\n\t\t data[index] = ecdata[r][i];\n\t\t index += 1;\n\t\t}\n\t }\n\t}\n\n\treturn data;\n };\n\n var createData = function(typeNumber, errorCorrectLevel, dataList) {\n\n\tvar rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\n\tvar buffer = qrBitBuffer();\n\n\tfor (var i = 0; i < dataList.length; i += 1) {\n\t var data = dataList[i];\n\t buffer.put(data.getMode(), 4);\n\t buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n\t data.write(buffer);\n\t}\n\n\t// calc num max data.\n\tvar totalDataCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i += 1) {\n\t totalDataCount += rsBlocks[i].dataCount;\n\t}\n\n\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t throw new Error('code length overflow. ('\n\t\t\t + buffer.getLengthInBits()\n\t\t\t + '>'\n\t\t\t + totalDataCount * 8\n\t\t\t + ')');\n\t}\n\n\t// end code\n\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t buffer.put(0, 4);\n\t}\n\n\t// padding\n\twhile (buffer.getLengthInBits() % 8 != 0) {\n\t buffer.putBit(false);\n\t}\n\n\t// padding\n\twhile (true) {\n\n\t if (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\tbreak;\n\t }\n\t buffer.put(PAD0, 8);\n\n\t if (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\tbreak;\n\t }\n\t buffer.put(PAD1, 8);\n\t}\n\n\treturn createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data) {\n\tvar newData = qr8BitByte(data);\n\t_dataList.push(newData);\n\t_dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n\tif (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n\t throw new Error(row + ',' + col);\n\t}\n\treturn _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n\treturn _moduleCount;\n };\n\n _this.make = function() {\n\tmakeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n\tcellSize = cellSize || 2;\n\tmargin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n\tvar qrHtml = '';\n\n\tqrHtml += '<table style=\"';\n\tqrHtml += ' border-width: 0px; border-style: none;';\n\tqrHtml += ' border-collapse: collapse;';\n\tqrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n\tqrHtml += '\">';\n\tqrHtml += '<tbody>';\n\n\tfor (var r = 0; r < _this.getModuleCount(); r += 1) {\n\n\t qrHtml += '<tr>';\n\n\t for (var c = 0; c < _this.getModuleCount(); c += 1) {\n\t\tqrHtml += '<td style=\"';\n\t\tqrHtml += ' border-width: 0px; border-style: none;';\n\t\tqrHtml += ' border-collapse: collapse;';\n\t\tqrHtml += ' padding: 0px; margin: 0px;';\n\t\tqrHtml += ' width: ' + cellSize + 'px;';\n\t\tqrHtml += ' height: ' + cellSize + 'px;';\n\t\tqrHtml += ' background-color: ';\n\t\tqrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n\t\tqrHtml += ';';\n\t\tqrHtml += '\"/>';\n\t }\n\n\t qrHtml += '</tr>';\n\t}\n\n\tqrHtml += '</tbody>';\n\tqrHtml += '</table>';\n\n\treturn qrHtml;\n };\n\n _this.createImgTag = function(cellSize, margin, size) {\n\n\tcellSize = cellSize || 2;\n\tmargin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n\tvar min = margin;\n\tvar max = _this.getModuleCount() * cellSize + margin;\n\n\treturn createImgTag(size, size, function(x, y) {\n\t if (min <= x && x < max && min <= y && y < max) {\n\t\tvar c = Math.floor( (x - min) / cellSize);\n\t\tvar r = Math.floor( (y - min) / cellSize);\n\t\treturn _this.isDark(r, c)? 0 : 1;\n\t } else {\n\t\treturn 1;\n\t }\n\t} );\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrcode.stringToBytes\n//---------------------------------------------------------------------\n\nqrcode.stringToBytes = function(s) {\n var bytes = new Array();\n for (var i = 0; i < s.length; i += 1) {\n\tvar c = s.charCodeAt(i);\n\tbytes.push(c & 0xff);\n }\n return bytes;\n};\n\n//---------------------------------------------------------------------\n// qrcode.createStringToBytes\n//---------------------------------------------------------------------\n\n/**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\nqrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n\tvar bin = base64DecodeInputStream(unicodeData);\n\tvar read = function() {\n\t var b = bin.read();\n\t if (b == -1) throw new Error();\n\t return b;\n\t};\n\n\tvar count = 0;\n\tvar unicodeMap = {};\n\twhile (true) {\n\t var b0 = bin.read();\n\t if (b0 == -1) break;\n\t var b1 = read();\n\t var b2 = read();\n\t var b3 = read();\n\t var k = String.fromCharCode( (b0 << 8) | b1);\n\t var v = (b2 << 8) | b3;\n\t unicodeMap[k] = v;\n\t count += 1;\n\t}\n\tif (count != numChars) {\n\t throw new Error(count + ' != ' + numChars);\n\t}\n\n\treturn unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n\tvar bytes = new Array();\n\tfor (var i = 0; i < s.length; i += 1) {\n\t var c = s.charCodeAt(i);\n\t if (c < 128) {\n\t\tbytes.push(c);\n\t } else {\n\t\tvar b = unicodeMap[s.charAt(i)];\n\t\tif (typeof b == 'number') {\n\t\t if ( (b & 0xff) == b) {\n\t\t\t// 1byte\n\t\t\tbytes.push(b);\n\t\t } else {\n\t\t\t// 2bytes\n\t\t\tbytes.push(b >>> 8);\n\t\t\tbytes.push(b & 0xff);\n\t\t }\n\t\t} else {\n\t\t bytes.push(unknownChar);\n\t\t}\n\t }\n\t}\n\treturn bytes;\n };\n};\n\n//---------------------------------------------------------------------\n// QRMode\n//---------------------------------------------------------------------\n\nvar QRMode = {\n MODE_NUMBER :\t\t1 << 0,\n MODE_ALPHA_NUM : \t1 << 1,\n MODE_8BIT_BYTE : \t1 << 2,\n MODE_KANJI :\t\t1 << 3\n};\n\n//---------------------------------------------------------------------\n// QRErrorCorrectLevel\n//---------------------------------------------------------------------\n\nvar QRErrorCorrectLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n};\n\n//---------------------------------------------------------------------\n// QRMaskPattern\n//---------------------------------------------------------------------\n\nvar QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n};\n\n//---------------------------------------------------------------------\n// QRUtil\n//---------------------------------------------------------------------\n\nvar QRUtil = function() {\n\n var PATTERN_POSITION_TABLE = [\n\t[],\n\t[6, 18],\n\t[6, 22],\n\t[6, 26],\n\t[6, 30],\n\t[6, 34],\n\t[6, 22, 38],\n\t[6, 24, 42],\n\t[6, 26, 46],\n\t[6, 28, 50],\n\t[6, 30, 54],\n\t[6, 32, 58],\n\t[6, 34, 62],\n\t[6, 26, 46, 66],\n\t[6, 26, 48, 70],\n\t[6, 26, 50, 74],\n\t[6, 30, 54, 78],\n\t[6, 30, 56, 82],\n\t[6, 30, 58, 86],\n\t[6, 34, 62, 90],\n\t[6, 28, 50, 72, 94],\n\t[6, 26, 50, 74, 98],\n\t[6, 30, 54, 78, 102],\n\t[6, 28, 54, 80, 106],\n\t[6, 32, 58, 84, 110],\n\t[6, 30, 58, 86, 114],\n\t[6, 34, 62, 90, 118],\n\t[6, 26, 50, 74, 98, 122],\n\t[6, 30, 54, 78, 102, 126],\n\t[6, 26, 52, 78, 104, 130],\n\t[6, 30, 56, 82, 108, 134],\n\t[6, 34, 60, 86, 112, 138],\n\t[6, 30, 58, 86, 114, 142],\n\t[6, 34, 62, 90, 118, 146],\n\t[6, 30, 54, 78, 102, 126, 150],\n\t[6, 24, 50, 76, 102, 128, 154],\n\t[6, 28, 54, 80, 106, 132, 158],\n\t[6, 32, 58, 84, 110, 136, 162],\n\t[6, 26, 54, 82, 110, 138, 166],\n\t[6, 30, 58, 86, 114, 142, 170]\n ];\n var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n\tvar digit = 0;\n\twhile (data != 0) {\n\t digit += 1;\n\t data >>>= 1;\n\t}\n\treturn digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n\tvar d = data << 10;\n\twhile (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n\t d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n\t}\n\treturn ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n\tvar d = data << 12;\n\twhile (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n\t d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n\t}\n\treturn (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n\treturn PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n\tswitch (maskPattern) {\n\n\t case QRMaskPattern.PATTERN000 :\n\t\treturn function(i, j) { return (i + j) % 2 == 0; };\n\t case QRMaskPattern.PATTERN001 :\n\t\treturn function(i, j) { return i % 2 == 0; };\n\t case QRMaskPattern.PATTERN010 :\n\t\treturn function(i, j) { return j % 3 == 0; };\n\t case QRMaskPattern.PATTERN011 :\n\t\treturn function(i, j) { return (i + j) % 3 == 0; };\n\t case QRMaskPattern.PATTERN100 :\n\t\treturn function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n\t case QRMaskPattern.PATTERN101 :\n\t\treturn function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n\t case QRMaskPattern.PATTERN110 :\n\t\treturn function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n\t case QRMaskPattern.PATTERN111 :\n\t\treturn function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n\t\tdefault :\n\t\tthrow new Error('bad maskPattern:' + maskPattern);\n\t}\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n\tvar a = qrPolynomial([1], 0);\n\tfor (var i = 0; i < errorCorrectLength; i += 1) {\n\t a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n\t}\n\treturn a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n\tif (1 <= type && type < 10) {\n\n\t // 1 - 9\n\n\t switch(mode) {\n\t\tcase QRMode.MODE_NUMBER \t: return 10;\n\t\tcase QRMode.MODE_ALPHA_NUM \t: return 9;\n\t\tcase QRMode.MODE_8BIT_BYTE\t: return 8;\n\t\tcase QRMode.MODE_KANJI\t\t: return 8;\n\t\t default :\n\t\t throw new Error('mode:' + mode);\n\t }\n\n\t} else if (type < 27) {\n\n\t // 10 - 26\n\n\t switch(mode) {\n\t\tcase QRMode.MODE_NUMBER \t: return 12;\n\t\tcase QRMode.MODE_ALPHA_NUM \t: return 11;\n\t\tcase QRMode.MODE_8BIT_BYTE\t: return 16;\n\t\tcase QRMode.MODE_KANJI\t\t: return 10;\n\t\t default :\n\t\t throw new Error('mode:' + mode);\n\t }\n\n\t} else if (type < 41) {\n\n\t // 27 - 40\n\n\t switch(mode) {\n\t\tcase QRMode.MODE_NUMBER \t: return 14;\n\t\tcase QRMode.MODE_ALPHA_NUM\t: return 13;\n\t\tcase QRMode.MODE_8BIT_BYTE\t: return 16;\n\t\tcase QRMode.MODE_KANJI\t\t: return 12;\n\t\t default :\n\t\t throw new Error('mode:' + mode);\n\t }\n\n\t} else {\n\t throw new Error('type:' + type);\n\t}\n };\n\n _this.getLostPoint = function(qrcode) {\n\n\tvar moduleCount = qrcode.getModuleCount();\n\n\tvar lostPoint = 0;\n\n\t// LEVEL1\n\n\tfor (var row = 0; row < moduleCount; row += 1) {\n\t for (var col = 0; col < moduleCount; col += 1) {\n\n\t\tvar sameCount = 0;\n\t\tvar dark = qrcode.isDark(row, col);\n\n\t\tfor (var r = -1; r <= 1; r += 1) {\n\n\t\t if (row + r < 0 || moduleCount <= row + r) {\n\t\t\tcontinue;\n\t\t }\n\n\t\t for (var c = -1; c <= 1; c += 1) {\n\n\t\t\tif (col + c < 0 || moduleCount <= col + c) {\n\t\t\t continue;\n\t\t\t}\n\n\t\t\tif (r == 0 && c == 0) {\n\t\t\t continue;\n\t\t\t}\n\n\t\t\tif (dark == qrcode.isDark(row + r, col + c) ) {\n\t\t\t sameCount += 1;\n\t\t\t}\n\t\t }\n\t\t}\n\n\t\tif (sameCount > 5) {\n\t\t lostPoint += (3 + sameCount - 5);\n\t\t}\n\t }\n\t};\n\n\t// LEVEL2\n\n\tfor (var row = 0; row < moduleCount - 1; row += 1) {\n\t for (var col = 0; col < moduleCount - 1; col += 1) {\n\t\tvar count = 0;\n\t\tif (qrcode.isDark(row, col) ) count += 1;\n\t\tif (qrcode.isDark(row + 1, col) ) count += 1;\n\t\tif (qrcode.isDark(row, col + 1) ) count += 1;\n\t\tif (qrcode.isDark(row + 1, col + 1) ) count += 1;\n\t\tif (count == 0 || count == 4) {\n\t\t lostPoint += 3;\n\t\t}\n\t }\n\t}\n\n\t// LEVEL3\n\n\tfor (var row = 0; row < moduleCount; row += 1) {\n\t for (var col = 0; col < moduleCount - 6; col += 1) {\n\t\tif (qrcode.isDark(row, col)\n\t\t && !qrcode.isDark(row, col + 1)\n\t\t && qrcode.isDark(row, col + 2)\n\t\t && qrcode.isDark(row, col + 3)\n\t\t && qrcode.isDark(row, col + 4)\n\t\t && !qrcode.isDark(row, col + 5)\n\t\t && qrcode.isDark(row, col + 6) ) {\n\t\t lostPoint += 40;\n\t\t}\n\t }\n\t}\n\n\tfor (var col = 0; col < moduleCount; col += 1) {\n\t for (var row = 0; row < moduleCount - 6; row += 1) {\n\t\tif (qrcode.isDark(row, col)\n\t\t && !qrcode.isDark(row + 1, col)\n\t\t && qrcode.isDark(row + 2, col)\n\t\t && qrcode.isDark(row + 3, col)\n\t\t && qrcode.isDark(row + 4, col)\n\t\t && !qrcode.isDark(row + 5, col)\n\t\t && qrcode.isDark(row + 6, col) ) {\n\t\t lostPoint += 40;\n\t\t}\n\t }\n\t}\n\n\t// LEVEL4\n\n\tvar darkCount = 0;\n\n\tfor (var col = 0; col < moduleCount; col += 1) {\n\t for (var row = 0; row < moduleCount; row += 1) {\n\t\tif (qrcode.isDark(row, col) ) {\n\t\t darkCount += 1;\n\t\t}\n\t }\n\t}\n\n\tvar ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n\tlostPoint += ratio * 10;\n\n\treturn lostPoint;\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// QRMath\n//---------------------------------------------------------------------\n\nvar QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n\tEXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n\tEXP_TABLE[i] = EXP_TABLE[i - 4]\n\t ^ EXP_TABLE[i - 5]\n\t ^ EXP_TABLE[i - 6]\n\t ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n\tLOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n\tif (n < 1) {\n\t throw new Error('glog(' + n + ')');\n\t}\n\n\treturn LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n\twhile (n < 0) {\n\t n += 255;\n\t}\n\n\twhile (n >= 256) {\n\t n -= 255;\n\t}\n\n\treturn EXP_TABLE[n];\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrPolynomial\n//---------------------------------------------------------------------\n\nfunction qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n\tthrow new Error(num.length + '/' + shift);\n }\n\n var _num = function() {\n\tvar offset = 0;\n\twhile (offset < num.length && num[offset] == 0) {\n\t offset += 1;\n\t}\n\tvar _num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i += 1) {\n\t _num[i] = num[i + offset];\n\t}\n\treturn _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n\treturn _num[index];\n };\n\n _this.getLength = function() {\n\treturn _num.length;\n };\n\n _this.multiply = function(e) {\n\n\tvar num = new Array(_this.getLength() + e.getLength() - 1);\n\n\tfor (var i = 0; i < _this.getLength(); i += 1) {\n\t for (var j = 0; j < e.getLength(); j += 1) {\n\t\tnum[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n\t }\n\t}\n\n\treturn qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n\tif (_this.getLength() - e.getLength() < 0) {\n\t return _this;\n\t}\n\n\tvar ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n\tvar num = new Array(_this.getLength() );\n\tfor (var i = 0; i < _this.getLength(); i += 1) {\n\t num[i] = _this.getAt(i);\n\t}\n\n\tfor (var i = 0; i < e.getLength(); i += 1) {\n\t num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n\t}\n\n\t// recursive call\n\treturn qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// QRRSBlock\n//---------------------------------------------------------------------\n\nvar QRRSBlock = function() {\n\n\n // [1: [L, M, Q, H], ..]\n var RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];\n\n var qrRSBlock = function(totalCount, dataCount) {\n\tvar _this = {};\n\t_this.totalCount = totalCount;\n\t_this.dataCount = dataCount;\n\treturn _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectLevel) {\n\n\tswitch(errorCorrectLevel) {\n\t case QRErrorCorrectLevel.L :\n\t\treturn RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\t case QRErrorCorrectLevel.M :\n\t\treturn RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\t case QRErrorCorrectLevel.Q :\n\t\treturn RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\t case QRErrorCorrectLevel.H :\n\t\treturn RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\t\tdefault :\n\t\treturn undefined;\n\t}\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectLevel) {\n\n\tvar rsBlock = getRsBlockTable(typeNumber, errorCorrectLevel);\n\n\tif (typeof rsBlock == 'undefined') {\n\t throw new Error('bad rs block @ typeNumber:' + typeNumber +\n\t\t\t '/errorCorrectLevel:' + errorCorrectLevel);\n\t}\n\n\tvar length = rsBlock.length / 3;\n\n\tvar list = new Array();\n\n\tfor (var i = 0; i < length; i += 1) {\n\n\t var count = rsBlock[i * 3 + 0];\n\t var totalCount = rsBlock[i * 3 + 1];\n\t var dataCount = rsBlock[i * 3 + 2];\n\n\t for (var j = 0; j < count; j += 1) {\n\t\tlist.push(qrRSBlock(totalCount, dataCount) );\n\t }\n\t}\n\n\treturn list;\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrBitBuffer\n//---------------------------------------------------------------------\n\nvar qrBitBuffer = function() {\n\n var _buffer = new Array();\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n\treturn _buffer;\n };\n\n _this.getAt = function(index) {\n\tvar bufIndex = Math.floor(index / 8);\n\treturn ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n\tfor (var i = 0; i < length; i += 1) {\n\t _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n\t}\n };\n\n _this.getLengthInBits = function() {\n\treturn _length;\n };\n\n _this.putBit = function(bit) {\n\n\tvar bufIndex = Math.floor(_length / 8);\n\tif (_buffer.length <= bufIndex) {\n\t _buffer.push(0);\n\t}\n\n\tif (bit) {\n\t _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n\t}\n\n\t_length += 1;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qr8BitByte\n//---------------------------------------------------------------------\n\nvar qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _parsedData = [];\n\n var _this = {};\n\n\n // Added to support UTF-8 Characters\n for (var i = 0, l = _data.length; i < l; i++) {\n\tvar byteArray = [];\n\tvar code = _data.charCodeAt(i);\n\n\tif (code > 0x10000) {\n\t byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);\n\t byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);\n\t byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);\n\t byteArray[3] = 0x80 | (code & 0x3F);\n\t} else if (code > 0x800) {\n\t byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);\n\t byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);\n\t byteArray[2] = 0x80 | (code & 0x3F);\n\t} else if (code > 0x80) {\n\t byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);\n\t byteArray[1] = 0x80 | (code & 0x3F);\n\t} else {\n\t byteArray[0] = code;\n\t}\n\n // Fix Unicode corruption bug\n _parsedData.push(byteArray);\n }\n\n _parsedData = Array.prototype.concat.apply([], _parsedData);\n\n if (_parsedData.length != _data.length) {\n\t_parsedData.unshift(191);\n\t_parsedData.unshift(187);\n\t_parsedData.unshift(239);\n }\n\n var _bytes = _parsedData;\n\n _this.getMode = function() {\n\treturn _mode;\n };\n\n _this.getLength = function(buffer) {\n\treturn _bytes.length;\n };\n\n _this.write = function(buffer) {\n\tfor (var i = 0; i < _bytes.length; i += 1) {\n\t buffer.put(_bytes[i], 8);\n\t}\n };\n\n return _this;\n};\n\n//=====================================================================\n// GIF Support etc.\n//\n\n//---------------------------------------------------------------------\n// byteArrayOutputStream\n//---------------------------------------------------------------------\n\nvar byteArrayOutputStream = function() {\n\n var _bytes = new Array();\n\n var _this = {};\n\n _this.writeByte = function(b) {\n\t_bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n\t_this.writeByte(i);\n\t_this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n\toff = off || 0;\n\tlen = len || b.length;\n\tfor (var i = 0; i < len; i += 1) {\n\t _this.writeByte(b[i + off]);\n\t}\n };\n\n _this.writeString = function(s) {\n\tfor (var i = 0; i < s.length; i += 1) {\n\t _this.writeByte(s.charCodeAt(i) );\n\t}\n };\n\n _this.toByteArray = function() {\n\treturn _bytes;\n };\n\n _this.toString = function() {\n\tvar s = '';\n\ts += '[';\n\tfor (var i = 0; i < _bytes.length; i += 1) {\n\t if (i > 0) {\n\t\ts += ',';\n\t }\n\t s += _bytes[i];\n\t}\n\ts += ']';\n\treturn s;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// base64EncodeOutputStream\n//---------------------------------------------------------------------\n\nvar base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n\t_base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n\tif (n < 0) {\n\t // error.\n\t} else if (n < 26) {\n\t return 0x41 + n;\n\t} else if (n < 52) {\n\t return 0x61 + (n - 26);\n\t} else if (n < 62) {\n\t return 0x30 + (n - 52);\n\t} else if (n == 62) {\n\t return 0x2b;\n\t} else if (n == 63) {\n\t return 0x2f;\n\t}\n\tthrow new Error('n:' + n);\n };\n\n _this.writeByte = function(n) {\n\n\t_buffer = (_buffer << 8) | (n & 0xff);\n\t_buflen += 8;\n\t_length += 1;\n\n\twhile (_buflen >= 6) {\n\t writeEncoded(_buffer >>> (_buflen - 6) );\n\t _buflen -= 6;\n\t}\n };\n\n _this.flush = function() {\n\n\tif (_buflen > 0) {\n\t writeEncoded(_buffer << (6 - _buflen) );\n\t _buffer = 0;\n\t _buflen = 0;\n\t}\n\n\tif (_length % 3 != 0) {\n\t // padding\n\t var padlen = 3 - _length % 3;\n\t for (var i = 0; i < padlen; i += 1) {\n\t\t_base64 += '=';\n\t }\n\t}\n };\n\n _this.toString = function() {\n\treturn _base64;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// base64DecodeInputStream\n//---------------------------------------------------------------------\n\nvar base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n\twhile (_buflen < 8) {\n\n\t if (_pos >= _str.length) {\n\t\tif (_buflen == 0) {\n\t\t return -1;\n\t\t}\n\t\tthrow new Error('unexpected end of file./' + _buflen);\n\t }\n\n\t var c = _str.charAt(_pos);\n\t _pos += 1;\n\n\t if (c == '=') {\n\t\t_buflen = 0;\n\t\treturn -1;\n\t } else if (c.match(/^\\s$/) ) {\n\t\t// ignore if whitespace.\n\t\tcontinue;\n\t }\n\n\t _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n\t _buflen += 6;\n\t}\n\n\tvar n = (_buffer >>> (_buflen - 8) ) & 0xff;\n\t_buflen -= 8;\n\treturn n;\n };\n\n var decode = function(c) {\n\tif (0x41 <= c && c <= 0x5a) {\n\t return c - 0x41;\n\t} else if (0x61 <= c && c <= 0x7a) {\n\t return c - 0x61 + 26;\n\t} else if (0x30 <= c && c <= 0x39) {\n\t return c - 0x30 + 52;\n\t} else if (c == 0x2b) {\n\t return 62;\n\t} else if (c == 0x2f) {\n\t return 63;\n\t} else {\n\t throw new Error('c:' + c);\n\t}\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// gifImage (B/W)\n//---------------------------------------------------------------------\n\nvar gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n\t_data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n\t//---------------------------------\n\t// GIF Signature\n\n\tout.writeString('GIF87a');\n\n\t//---------------------------------\n\t// Screen Descriptor\n\n\tout.writeShort(_width);\n\tout.writeShort(_height);\n\n\tout.writeByte(0x80); // 2bit\n\tout.writeByte(0);\n\tout.writeByte(0);\n\n\t//---------------------------------\n\t// Global Color Map\n\n\t// black\n\tout.writeByte(0x00);\n\tout.writeByte(0x00);\n\tout.writeByte(0x00);\n\n\t// white\n\tout.writeByte(0xff);\n\tout.writeByte(0xff);\n\tout.writeByte(0xff);\n\n\t//---------------------------------\n\t// Image Descriptor\n\n\tout.writeString(',');\n\tout.writeShort(0);\n\tout.writeShort(0);\n\tout.writeShort(_width);\n\tout.writeShort(_height);\n\tout.writeByte(0);\n\n\t//---------------------------------\n\t// Local Color Map\n\n\t//---------------------------------\n\t// Raster Data\n\n\tvar lzwMinCodeSize = 2;\n\tvar raster = getLZWRaster(lzwMinCodeSize);\n\n\tout.writeByte(lzwMinCodeSize);\n\n\tvar offset = 0;\n\n\twhile (raster.length - offset > 255) {\n\t out.writeByte(255);\n\t out.writeBytes(raster, offset, 255);\n\t offset += 255;\n\t}\n\n\tout.writeByte(raster.length - offset);\n\tout.writeBytes(raster, offset, raster.length - offset);\n\tout.writeByte(0x00);\n\n\t//---------------------------------\n\t// GIF Terminator\n\tout.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n\tvar _out = out;\n\tvar _bitLength = 0;\n\tvar _bitBuffer = 0;\n\n\tvar _this = {};\n\n\t_this.write = function(data, length) {\n\n\t if ( (data >>> length) != 0) {\n\t\tthrow new Error('length over');\n\t }\n\n\t while (_bitLength + length >= 8) {\n\t\t_out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n\t\tlength -= (8 - _bitLength);\n\t\tdata >>>= (8 - _bitLength);\n\t\t_bitBuffer = 0;\n\t\t_bitLength = 0;\n\t }\n\n\t _bitBuffer = (data << _bitLength) | _bitBuffer;\n\t _bitLength = _bitLength + length;\n\t};\n\n\t_this.flush = function() {\n\t if (_bitLength > 0) {\n\t\t_out.writeByte(_bitBuffer);\n\t }\n\t};\n\n\treturn _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n\tvar clearCode = 1 << lzwMinCodeSize;\n\tvar endCode = (1 << lzwMinCodeSize) + 1;\n\tvar bitLength = lzwMinCodeSize + 1;\n\n\t// Setup LZWTable\n\tvar table = lzwTable();\n\n\tfor (var i = 0; i < clearCode; i += 1) {\n\t table.add(String.fromCharCode(i) );\n\t}\n\ttable.add(String.fromCharCode(clearCode) );\n\ttable.add(String.fromCharCode(endCode) );\n\n\tvar byteOut = byteArrayOutputStream();\n\tvar bitOut = bitOutputStream(byteOut);\n\n\t// clear code\n\tbitOut.write(clearCode, bitLength);\n\n\tvar dataIndex = 0;\n\n\tvar s = String.fromCharCode(_data[dataIndex]);\n\tdataIndex += 1;\n\n\twhile (dataIndex < _data.length) {\n\n\t var c = String.fromCharCode(_data[dataIndex]);\n\t dataIndex += 1;\n\n\t if (table.contains(s + c) ) {\n\n\t\ts = s + c;\n\n\t } else {\n\n\t\tbitOut.write(table.indexOf(s), bitLength);\n\n\t\tif (table.size() < 0xfff) {\n\n\t\t if (table.size() == (1 << bitLength) ) {\n\t\t\tbitLength += 1;\n\t\t }\n\n\t\t table.add(s + c);\n\t\t}\n\n\t\ts = c;\n\t }\n\t}\n\n\tbitOut.write(table.indexOf(s), bitLength);\n\n\t// end code\n\tbitOut.write(endCode, bitLength);\n\n\tbitOut.flush();\n\n\treturn byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n\tvar _map = {};\n\tvar _size = 0;\n\n\tvar _this = {};\n\n\t_this.add = function(key) {\n\t if (_this.contains(key) ) {\n\t\tthrow new Error('dup key:' + key);\n\t }\n\t _map[key] = _size;\n\t _size += 1;\n\t};\n\n\t_this.size = function() {\n\t return _size;\n\t};\n\n\t_this.indexOf = function(key) {\n\t return _map[key];\n\t};\n\n\t_this.contains = function(key) {\n\t return typeof _map[key] != 'undefined';\n\t};\n\n\treturn _this;\n };\n\n return _this;\n};\n\nvar createImgTag = function(width, height, getPixel, alt) {\n\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n\tfor (var x = 0; x < width; x += 1) {\n\t gif.setPixel(x, y, getPixel(x, y) );\n\t}\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n\tbase64.writeByte(bytes[i]);\n }\n base64.flush();\n\n var img = '';\n img += 'data:image/gif;base64,';\n img += base64;\n\n return img;\n};\n\n//---------------------------------------------------------------------\n// returns qrcode function.\n\nmodule.exports = qrcode;\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/qrcode/qrcode.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/qrcode/license": {
"text": "The MIT License (MIT)\n\nCopyright (c) 2013 Zeno Zeng\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
"type": "text/plain",
"title": "$:/plugins/tiddlywiki/qrcode/license"
},
"$:/plugins/tiddlywiki/qrcode/icon": {
"title": "$:/plugins/tiddlywiki/qrcode/icon",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-qrcode tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M0,15.9969199 C0,7.16206498 7.16987059,0 15.9969199,0 L64.0030801,0 C72.837935,0 80,7.16987059 80,15.9969199 L80,64.0030801 C80,72.837935 72.8301294,80 64.0030801,80 L15.9969199,80 C7.16206498,80 0,72.8301294 0,64.0030801 L0,15.9969199 Z M16,22.0063866 C16,18.6891509 18.6835413,16 22.0063866,16 L57.9936134,16 C61.3108491,16 64,18.6835413 64,22.0063866 L64,57.9936134 C64,61.3108491 61.3164587,64 57.9936134,64 L22.0063866,64 C18.6891509,64 16,61.3164587 16,57.9936134 L16,22.0063866 Z M28,31.990053 C28,29.7864076 29.7842933,28 31.990053,28 L48.009947,28 C50.2135924,28 52,29.7842933 52,31.990053 L52,48.009947 C52,50.2135924 50.2157067,52 48.009947,52 L31.990053,52 C29.7864076,52 28,50.2157067 28,48.009947 L28,31.990053 Z\"></path>\n <path d=\"M112,16 L112,8.49833453 L112,6.00333095 C112,2.68778282 114.67804,0 118.003331,0 L121.996669,0 C125.312217,0 128,2.67804027 128,6.00333095 L128,8.49833453 L128,23.0016655 L128,25.9966691 C128,29.3122172 125.32196,32 121.996669,32 L119.001665,32 L104.998335,32 L102.003331,32 C98.6877828,32 96,29.3219597 96,25.9966691 L96,22.0033309 C96,18.6877828 98.6780403,16 102.003331,16 L104.998335,16 L112,16 Z\"></path>\n <path d=\"M96,56.9983345 L96,54.0033309 C96,50.6877828 98.6780403,48 102.003331,48 L104.998335,48 L119.001665,48 L121.996669,48 C125.312217,48 128,50.6780403 128,54.0033309 L128,57.9966691 C128,61.3122172 125.32196,64 121.996669,64 L119.001665,64 L112,64 L112,71.0016655 L112,73.9966691 C112,77.3122172 109.32196,80 105.996669,80 L102.003331,80 C98.6877828,80 96,77.3219597 96,73.9966691 L96,71.0016655 L96,56.9983345 Z\"></path>\n <path d=\"M16,112 L23.0016655,112 L24.9983345,112 L32,112 L32,104.998335 L32,102.003331 C32,98.6877828 34.6780403,96 38.0033309,96 L40.9983345,96 L55.0016655,96 L57.9966691,96 C61.3122172,96 64,98.6780403 64,102.003331 L64,105.996669 C64,109.312217 61.3219597,112 57.9966691,112 L55.0016655,112 L48,112 L48,119.001665 L48,121.996669 C48,125.312217 45.3219597,128 41.9966691,128 L39.0016655,128 L24.9983345,128 L23.0016655,128 L8.99833453,128 L6.00333095,128 C2.68778282,128 0,125.32196 0,121.996669 L0,119.001665 L0,104.998335 L0,102.003331 C0,98.6877828 2.67804027,96 6.00333095,96 L9.99666905,96 C13.3122172,96 16,98.6780403 16,102.003331 L16,104.998335 L16,112 Z\"></path>\n <path d=\"M103.001665,96 L105.996669,96 C109.312217,96 112,98.6780403 112,102.003331 L112,105.996669 C112,109.312217 109.32196,112 105.996669,112 L103.001665,112 L88.9983345,112 L86.0033309,112 C82.6877828,112 80,109.32196 80,105.996669 L80,102.003331 C80,98.6877828 82.6780403,96 86.0033309,96 L88.9983345,96 L103.001665,96 Z\"></path>\n <path d=\"M72.9983345,112 L70.0033309,112 C66.6780403,112 64,114.687783 64,118.003331 L64,121.996669 C64,125.32196 66.6877828,128 70.0033309,128 L72.9983345,128 L87.0016655,128 L89.9966691,128 C93.3219597,128 96,125.312217 96,121.996669 L96,118.003331 C96,114.67804 93.3122172,112 89.9966691,112 L87.0016655,112 L72.9983345,112 Z\"></path>\n <rect x=\"112\" y=\"80\" width=\"16\" height=\"16\" rx=\"6\"></rect>\n <rect x=\"112\" y=\"112\" width=\"16\" height=\"16\" rx=\"6\"></rect>\n </g>\n</svg>"
},
"$:/plugins/tiddlywiki/qrcode/MakeContactQR": {
"title": "$:/plugins/tiddlywiki/qrcode/MakeContactQR",
"tags": "$:/tags/MakeQR",
"caption": "Contact",
"text": "\\define wifi-url()\nWIFI:wifi name;T:WPA;S:SSID;P:password;\n\\end\n\n\\define image(firstname,lastname,address,tel,email)\n<img src=<<makeqr text:\"\"\"MECARD:N:$lastname$,$firstname$;ADR:$address$;TEL:$tel$;EMAIL:$email$;;\"\"\" size:\"350\">>/>\n\\end\n\n! Enter the contact details\n\nFirst name: <$edit-text tiddler=\"$:/config/plugins/tiddlywiki/qrcode/contact/firstname\" tag=\"input\" default=\"\"/>\n\nLast name: <$edit-text tiddler=\"$:/config/plugins/tiddlywiki/qrcode/contact/lastname\" tag=\"input\" default=\"\"/>\n\nAddress: <$edit-text tiddler=\"$:/config/plugins/tiddlywiki/qrcode/contact/address\" tag=\"input\" default=\"\"/>\n\nTelephone: <$edit-text tiddler=\"$:/config/plugins/tiddlywiki/qrcode/contact/tel\" tag=\"input\" default=\"\"/>\n\nEmail: <$edit-text tiddler=\"$:/config/plugins/tiddlywiki/qrcode/contact/email\" tag=\"input\" default=\"\"/>\n\n! Here is your QR code\n\n<$macrocall $name=\"image\" firstname={{$:/config/plugins/tiddlywiki/qrcode/contact/firstname}} lastname={{$:/config/plugins/tiddlywiki/qrcode/contact/lastname}} address={{$:/config/plugins/tiddlywiki/qrcode/contact/address}} tel={{$:/config/plugins/tiddlywiki/qrcode/contact/tel}} email={{$:/config/plugins/tiddlywiki/qrcode/contact/email}}/>\n"
},
"$:/plugins/tiddlywiki/qrcode/MakeGenericQR": {
"title": "$:/plugins/tiddlywiki/qrcode/MakeGenericQR",
"tags": "$:/tags/MakeQR",
"caption": "Generic",
"text": "\\define image(content)\n<img src=<<makeqr text:\"\"\"$content$\"\"\" size:\"350\">>/>\n\\end\n\n! Enter the details\n\nYou can also use this form to encode URLs.\n\n<$edit-text tiddler=\"$:/config/plugins/tiddlywiki/qrcode/generic\" default=\"\" class=\"tc-edit-texteditor\"/>\n\n! Here is your QR code\n\n<$macrocall $name=\"image\" content={{$:/config/plugins/tiddlywiki/qrcode/generic}}/>\n"
},
"$:/plugins/tiddlywiki/qrcode/makeqr.js": {
"title": "$:/plugins/tiddlywiki/qrcode/makeqr.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/qrcode/makeqr.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string into a QR Code\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nvar qrcode = require(\"$:/plugins/tiddlywiki/qrcode/qrcode.js\");\n\nvar QRCODE_GENERATION_ERROR_PREFIX = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 300\"><text x=\"0\" y=\"30\" fill=\"red\" font-family=\"Helvetica, sans-serif\" font-size=\"18\">',\n\tQRCODE_GENERATION_ERROR_SUFFIX = '</text></svg>';\n\nexports.name = \"makeqr\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"size\"},\n\t{name: \"errorCorrectLevel\"},\n\t{name: \"fallback\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,size,errorCorrectLevel,fallback) {\n\tvar result;\n\ttry {\n\t\tresult = generateQrCode(text,{size: size, errorCorrectLevel: errorCorrectLevel});\n\t} catch (ex) {\n\t\tconsole.log(\"makeqr error: \" + ex);\n\t\tresult = fallback || (\"data:image/svg+xml,\" + encodeURI(QRCODE_GENERATION_ERROR_PREFIX + ex + QRCODE_GENERATION_ERROR_SUFFIX));\n\t}\n\treturn result || \"\";\n};\n\nfunction generateQrCode(text,options) {\n\toptions = options || {};\n\tvar typeNumber = options.typeNumber || 4,\n\t\terrorCorrectLevel = options.errorCorrectLevel || \"M\",\n\t\tsize = options.size || 500,\n\t\tqr;\n\ttry {\n\t\tqr = qrcode(typeNumber,errorCorrectLevel);\n\t\tqr.addData(text);\n\t\tqr.make();\n\t} catch (e) {\n\t\tif(typeNumber >= 40) {\n\t\t\tthrow new Error(\"Text too long to encode\");\n\t\t} else {\n\t\t\treturn generateQrCode(text, {\n\t\t\t\tsize: size,\n\t\t\t\terrorCorrectLevel: errorCorrectLevel,\n\t\t\t\ttypeNumber: typeNumber + 1\n\t\t\t});\n\t\t}\n\t}\n\tvar cellsize = parseInt(size / qr.getModuleCount()),\n\t\tmargin = parseInt((size - qr.getModuleCount() * cellsize) / 2);\n\treturn qr.createImgTag(cellsize, margin, size);\n}\n\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/plugins/tiddlywiki/qrcode/MakeWifiQR": {
"title": "$:/plugins/tiddlywiki/qrcode/MakeWifiQR",
"tags": "$:/tags/MakeQR",
"caption": "Wifi",
"text": "\\define wifi-url()\nWIFI:T:WPA;S:SSID;P:password;;\n\\end\n\n\\define image(network,encryption,ssid,password)\n<img src=<<makeqr text:\"\"\"WIFI:T:$encryption$;S:$ssid$;P:$password$;;\"\"\" size:\"350\">>/>\n\\end\n\n! Enter the details of your wifi network\n\nEncryption: <$select tiddler=\"$:/config/plugins/tiddlywiki/qrcode/wifi/encryption\" default=\"none\">\n<option value=\"none\">None</option>\n<option value=\"WEP\">WEP</option>\n<option value=\"WPA\">WPA</option>\n<option value=\"WPA2\">WPA2</option>\n</$select>\n\nSSID: <$edit-text tiddler=\"$:/config/plugins/tiddlywiki/qrcode/wifi/ssid\" tag=\"input\" default=\"\"/>\n\nPassword: <$edit-text tiddler=\"$:/config/plugins/tiddlywiki/qrcode/wifi/password\" tag=\"input\" default=\"\"/>\n\n! Here is your QR code\n\n<$macrocall $name=\"image\" network={{$:/config/plugins/tiddlywiki/qrcode/wifi/network}} encryption={{$:/config/plugins/tiddlywiki/qrcode/wifi/encryption}} ssid={{$:/config/plugins/tiddlywiki/qrcode/wifi/ssid}} password={{$:/config/plugins/tiddlywiki/qrcode/wifi/password}}/>\n"
},
"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton": {
"title": "$:/plugins/tiddlywiki/qrcode/ViewToolbarButton",
"tags": "$:/tags/ViewToolbar",
"list-before": "$:/core/ui/Buttons/close",
"caption": "{{$:/plugins/tiddlywiki/qrcode/icon}}",
"short-caption": "QR code",
"description": "Generate QR code for this tiddler",
"text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/qrcode\">> tooltip={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!description}} aria-label={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!short-caption}} class=<<tv-config-toolbar-class>> class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/plugins/tiddlywiki/qrcode/icon}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!short-caption}}/>\n</span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/qrcode\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n{{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton||description}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$set name=\"targetTiddler\" value=<<currentTiddler>>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbarButton/QRcode]!has[draft.of]]\">\n\n<$button popup=<<qualify \"$:/state/popup/qrcode/type\">> class=\"tc-btn-invisible\" selectedClass=\"tc-selected\">\n\n<$action-sendmessage $message=\"tm-modal\" $param=<<currentTiddler>> currentTiddler=<<targetTiddler>>/>\n\n<$transclude field=\"caption\" mode=\"inline\"/>\n\n</$button>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>\n"
},
"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/Raw": {
"title": "$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/Raw",
"tags": "$:/tags/ViewToolbarButton/QRcode",
"caption": "Raw content of this tiddler",
"subtitle": "QR code of raw tiddler content",
"text": "\\define image()\n<img src=<<makeqr text:\"\"\"$(content)$\"\"\" size:\"350\">>/>\n\\end\n\n<$set name=\"content\" value={{!!text}}>\n<<image>>\n</$set>\n"
},
"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/Rendered": {
"title": "$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/Rendered",
"tags": "$:/tags/ViewToolbarButton/QRcode",
"caption": "Rendered content of this tiddler",
"subtitle": "QR code of rendered tiddler content",
"text": "\\define image()\n<img src=<<makeqr text:\"\"\"$(content)$\"\"\" size:\"350\">>/>\n\\end\n\n<$wikify name=\"content\" text={{!!text}} type=\"text\" mode=\"block\" output=\"formattedtext\">\n<<image>>\n</$wikify>\n"
},
"$:/plugins/tiddlywiki/qrcode/styles": {
"title": "$:/plugins/tiddlywiki/qrcode/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-drop-down .tc-qrcode-drop-down img {\n\twidth: 100%;\n\theight: 100%;\n}\n"
},
"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/URL": {
"title": "$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/URL",
"tags": "$:/tags/ViewToolbarButton/QRcode",
"caption": "URL of this tiddler",
"subtitle": "QR code of URL of this tiddler",
"text": "\\define image()\n<img src=<<makeqr text:\"\"\"$(url)$#$(hash)$\"\"\" size:\"350\">>/>\n\\end\n\n<$set name=\"url\" value={{$:/info/url/full}}>\n<$set name=\"hash\" filter=\"[<currentTiddler>encodeuricomponent[]]\" select=\"0\">\n<<image>>\n</$set>\n</$set>\n"
}
}
}
\define wifi-url()
WIFI:wifi name;T:WPA;S:SSID;P:password;
\end
\define image(firstname,lastname,address,tel,email)
<img src=<<makeqr text:"""MECARD:N:$lastname$,$firstname$;ADR:$address$;TEL:$tel$;EMAIL:$email$;;""" size:"350">>/>
\end
! 输入连络人的详细信息
名: <$edit-text tiddler="$:/config/plugins/tiddlywiki/qrcode/contact/firstname" tag="input" default=""/>
姓: <$edit-text tiddler="$:/config/plugins/tiddlywiki/qrcode/contact/lastname" tag="input" default=""/>
地址: <$edit-text tiddler="$:/config/plugins/tiddlywiki/qrcode/contact/address" tag="input" default=""/>
电话: <$edit-text tiddler="$:/config/plugins/tiddlywiki/qrcode/contact/tel" tag="input" default=""/>
电邮: <$edit-text tiddler="$:/config/plugins/tiddlywiki/qrcode/contact/email" tag="input" default=""/>
! 这是您的 QR code
<$macrocall $name="image" firstname={{$:/config/plugins/tiddlywiki/qrcode/contact/firstname}} lastname={{$:/config/plugins/tiddlywiki/qrcode/contact/lastname}} address={{$:/config/plugins/tiddlywiki/qrcode/contact/address}} tel={{$:/config/plugins/tiddlywiki/qrcode/contact/tel}} email={{$:/config/plugins/tiddlywiki/qrcode/contact/email}}/>
\define image(content)
<img src=<<makeqr text:"""$content$""" size:"240">>/>
\end
! 输入详细信息
您也可以使用此表单对网址进行编码。
<$edit-text tiddler="$:/config/plugins/tiddlywiki/qrcode/generic" default="" class="tc-edit-texteditor"/>
! 这是您的 QR code
<$macrocall $name="image" content={{$:/config/plugins/tiddlywiki/qrcode/generic}}/>
\define wifi-url()
WIFI:wifi name;T:WPA;S:SSID;P:password;
\end
\define image(network,encryption,ssid,password)
<img src=<<makeqr text:"""WIFI:$network$;T:$encryption$;S:$ssid$;P:$password$;""" size:"240">>/>
\end
! 输入您的无线网络的详细信息
无线网络的名称︰ <$edit-text tiddler="$:/config/plugins/tiddlywiki/qrcode/wifi/network" tag="input" default=""/>
加密︰ <$select tiddler="$:/config/plugins/tiddlywiki/qrcode/wifi/encryption" default="none">
<option value="none">无</option>
<option value="WEP">WEP</option>
<option value="WPA">WPA</option>
<option value="WPA2">WPA2</option>
</$select>
SSID:<$edit-text tiddler="$:/config/plugins/tiddlywiki/qrcode/wifi/ssid" tag="input" default=""/>
密码︰ <$edit-text tiddler="$:/config/plugins/tiddlywiki/qrcode/wifi/password" tag="input" default=""/>
! 这是您的 QR code
<$macrocall $name="image" network={{$:/config/plugins/tiddlywiki/qrcode/wifi/network}} encryption={{$:/config/plugins/tiddlywiki/qrcode/wifi/encryption}} ssid={{$:/config/plugins/tiddlywiki/qrcode/wifi/ssid}} password={{$:/config/plugins/tiddlywiki/qrcode/wifi/password}}/>
QR code 插件提供了一个宏,允许任何文本呈现为 [[QR code|https://en.wikipedia.org/wiki/QR_code]]。 QR code 是一种二维条码,可对任意数据进行编码:文本、数字、链接。可用 QR code 阅读器或智能型手机内置的,使他们方便于设备之间传输信息。
QR code 插件添加以下功能到 TiddlyWiki:
* 一个新的 [[makeqr 宏|makeqr Macro]] 可将指定的文本呈现为能被显示或打印的 QR code 图像。
* 一个新的工具列按钮,可以显示一个条目内容的的几种 QR code︰
** 原始内容
** 呈现的格式化内容
** 条目的 URL
QR code 插件是基于 [[qrcode.js by Zeno Zeng|https://github.com/zenozeng/node-yaqrcode]] 程序库。
! `makeqr` 宏
<<.def makeqr>> [[宏|Macros]]将文本数据转换成对应的 QR code 图像。图像传回为 [[base64-encoded data URI|https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs]]。
!! 参数
;text
: 要编码的文本
;size
: 图像的大小,以像素为单位(缺省为 500)
;errorCorrectLevel
: 决定套用于图像的误差校正量;见下文 (缺省为 "M")。
;fallback
: 发生错误时,传回的备用图像(见下文)
如果文本太长且/或复杂像,转换将失败,且宏将传回提供的备用图。如果没有提供备用的图像,则生成错误图像。
错误校正等级是 [[QR code 功能|http://www.qrcode.com/en/about/error_correction.html]]:
<<<
QR Code has error correction capability to restore data if the code is dirty or damaged. ... Level Q or H may be selected for factory environment where QR Code get dirty, whereas Level L may be selected for clean environment with the large amount of data. Typically, Level M (15%) is most frequently selected.
<<<
!! 示例
制作一个文本的简单字符串的 QR code︰
```
<<makeqr "Hello there!">>
```
制作一个当前条目的 url 字段的 QR code︰
```
<$macrocall $name="makeqr" text={{!!url}}/>
```
制作一个当前维基网址的 QR code:
```
<$macrocall $name="makeqr" text={{$:/info/url/full}}/>
```
{
"tiddlers": {
"$:/plugins/tiddlywiki/railroad/components.js": {
"title": "$:/plugins/tiddlywiki/railroad/components.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/railroad/components.js\ntype: application/javascript\nmodule-type: library\n\nComponents of a railroad diagram.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar railroad = require(\"$:/plugins/tiddlywiki/railroad/railroad-diagrams.js\");\n\n/////////////////////////// Base component\n\nvar Component = function() {\n\tthis.type = \"Component\";\n};\n\n// Set up a leaf component\nComponent.prototype.initialiseLeaf = function(type,text) {\n\tthis.type = type;\n\tthis.text = text;\n};\n\n// Set up a component with a single child\nComponent.prototype.initialiseWithChild = function(type,content) {\n\tthis.type = type;\n\tthis.child = toSingleChild(content);\n};\n\n// Set up a component with an array of children\nComponent.prototype.initialiseWithChildren = function(type,content) {\n\tthis.type = type;\n\t// Force the content to be an array\n\tthis.children = $tw.utils.isArray(content) ? content : [content];\n}\n\n// Return an array of the SVG strings of an array of children\nComponent.prototype.getSvgOfChildren = function() {\n\treturn this.children.map(function(child) {\n\t\treturn child.toSvg();\n\t});\n}\n\nComponent.prototype.toSvg = function() {\n\treturn \"\";\n}\n\nComponent.prototype.debug = function(output,indent) {\n\toutput.push(indent);\n\toutput.push(this.type);\n\t// Add the text of a leaf component\n\tif(this.text && this.text !== \"\") {\n\t\toutput.push(\": \");\n\t\toutput.push(this.text);\n\t}\n\t// Flag the normal route\n\tif(this.normal !== undefined) {\n\t\tif(this.normal === true) {\n\t\t\toutput.push(\" (normal)\");\n\t\t} else if(this.normal !== false) {\n\t\t\toutput.push(\" (normal: \");\n\t\t\toutput.push(this.normal);\n\t\t\toutput.push(\")\");\n\t\t}\n\t}\n\toutput.push(\"\\n\");\n\tvar contentIndent = indent + \" \";\n\t// Add the one child\n\tif(this.child) {\n\t\tthis.child.debug(output,contentIndent);\n\t}\n\t// Add the array of children\n\tif(this.children) {\n\t\tthis.debugArray(this.children,output,contentIndent);\n\t}\n \t// Add the separator if there is one\n\tif(this.separator) {\n\t\toutput.push(indent);\n\t\toutput.push(\"(separator)\\n\");\n\t\tthis.separator.debug(output,contentIndent);\n\t}\n};\n\nComponent.prototype.debugArray = function(array,output,indent) {\n\tfor(var i=0; i<array.length; i++) {\n\t\tvar item = array[i];\n\t\t// Choice content is a special case: we number the branches\n\t\tif(item.isChoiceBranch) {\n\t\t\toutput.push(indent);\n\t\t\toutput.push(\"(\");\n\t\t\toutput.push(i);\n\t\t\toutput.push(\")\\n\");\n\t\t\titem.debug(output,\" \"+indent);\n\t\t} else {\n\t\t\titem.debug(output,indent);\n\t\t}\n\t}\n}\n\nvar toSingleChild = function(content) {\n\tif($tw.utils.isArray(content)) {\n\t\t// Reduce an array of one child to just the child\n\t\tif(content.length === 1) {\n\t\t\treturn content[0];\n\t\t} else {\n\t\t\t// Never allow an empty sequence\n\t\t \tif(content.length === 0) {\n \t\t\t\tcontent.push(new Dummy());\n\t\t \t}\n\t\t\t// Wrap multiple children into a single sequence component\n\t\t\treturn new Sequence(content);\n\t\t}\n\t} else {\n\t\t// Already single\n\t\treturn content;\n\t}\n}\n\n/////////////////////////// Leaf components\n\nvar Comment = function(text) {\n\tthis.initialiseLeaf(\"Comment\",text);\n};\n\nComment.prototype = new Component();\n\nComment.prototype.toSvg = function() {\n\treturn railroad.Comment(this.text);\n}\n\nvar Dummy = function() {\n\tthis.initialiseLeaf(\"Dummy\");\n};\n\nDummy.prototype = new Component();\n\nDummy.prototype.toSvg = function() {\n\treturn railroad.Skip();\n}\n\nvar Nonterminal = function(text) {\n\tthis.initialiseLeaf(\"Nonterminal\",text);\n};\n\nNonterminal.prototype = new Component();\n\nNonterminal.prototype.toSvg = function() {\n\treturn railroad.NonTerminal(this.text);\n}\n\nvar Terminal = function(text) {\n\tthis.initialiseLeaf(\"Terminal\",text);\n};\n\nTerminal.prototype = new Component();\n\nTerminal.prototype.toSvg = function() {\n\treturn railroad.Terminal(this.text);\n}\n\n/////////////////////////// Components with one child\n\nvar Optional = function(content,normal) {\n\tthis.initialiseWithChild(\"Optional\",content);\n\tthis.normal = normal;\n};\n\nOptional.prototype = new Component();\n\nOptional.prototype.toSvg = function() {\n\t// Call Optional(component,\"skip\")\n\treturn railroad.Optional(this.child.toSvg(), this.normal ? undefined : \"skip\");\n}\n\nvar OptionalRepeated = function(content,separator,normal,wantArrow) {\n\tthis.initialiseWithChild(\"OptionalRepeated\",content);\n\tthis.separator = toSingleChild(separator);\n\tthis.normal = normal;\n\tthis.wantArrow = wantArrow;\n};\n\nOptionalRepeated.prototype = new Component();\n\nOptionalRepeated.prototype.toSvg = function() {\n\t// Call ZeroOrMore(component,separator,\"skip\")\n\tvar separatorSvg = this.separator ? this.separator.toSvg() : null;\n\tvar skip = this.normal ? undefined : \"skip\";\n\treturn railroad.ZeroOrMore(this.child.toSvg(),separatorSvg,skip,this.wantArrow);\n}\n\nvar Repeated = function(content,separator,wantArrow) {\n\tthis.initialiseWithChild(\"Repeated\",content);\n\tthis.separator = toSingleChild(separator);\n\tthis.wantArrow = wantArrow;\n};\n\nRepeated.prototype = new Component();\n\nRepeated.prototype.toSvg = function() {\n\t// Call OneOrMore(component,separator)\n\tvar separatorSvg = this.separator ? this.separator.toSvg() : null;\n\treturn railroad.OneOrMore(this.child.toSvg(),separatorSvg,this.wantArrow);\n}\n\nvar Link = function(content,options) {\n\tthis.initialiseWithChild(\"Link\",content);\n\tthis.options = options;\n};\n\nLink.prototype = new Component();\n\nLink.prototype.toSvg = function() {\n\treturn railroad.Link(this.child.toSvg(),this.options);\n}\n\nvar Transclusion = function(content) {\n\tthis.initialiseWithChild(\"Transclusion\",content);\n};\n\nTransclusion.prototype = new Component();\n\nTransclusion.prototype.toSvg = function() {\n\treturn this.child.toSvg();\n}\n\n/////////////////////////// Components with an array of children\n\nvar Root = function(content) {\n\tthis.initialiseWithChildren(\"Root\",content);\n};\n\nRoot.prototype = new Component();\n\nRoot.prototype.toSvg = function(options) {\n\tvar args = this.getSvgOfChildren();\n\targs.unshift(options);\n\t// Call Diagram(options,component1,component2,...)\n\treturn railroad.Diagram.apply(null,args);\n}\n\nvar Sequence = function(content) {\n\tthis.initialiseWithChildren(\"Sequence\",content);\n};\n\nSequence.prototype = new Component();\n\nSequence.prototype.toSvg = function() {\n\t// Call Sequence(component1,component2,...)\n\treturn railroad.Sequence.apply(null,this.getSvgOfChildren());\n}\n\nvar Choice = function(content,normal) {\n\tthis.initialiseWithChildren(\"Choice\",content.map(toSingleChild));\n\tfor(var i=0; i<this.children.length; i++) {\n\t\tthis.children[i].isChoiceBranch = true;\n\t}\n\tthis.normal = normal;\n};\n\nChoice.prototype = new Component();\n\nChoice.prototype.toSvg = function() {\n\t// Call Choice(normal,component1,component2,...)\n\tvar args = this.getSvgOfChildren();\n\targs.unshift(this.normal);\n\treturn railroad.Choice.apply(null,args);\n}\n\n/////////////////////////// Exports\n\nexports.components = {\n\tChoice: Choice,\n\tComment: Comment,\n\tDummy: Dummy,\n\tLink: Link,\n\tNonterminal: Nonterminal,\n\tOptional: Optional,\n\tOptionalRepeated: OptionalRepeated,\n\tRepeated: Repeated,\n\tRoot: Root,\n\tSequence: Sequence,\n\tTerminal: Terminal,\n\tTransclusion: Transclusion\n};\n\n})();",
"type": "application/javascript",
"module-type": "library"
},
"$:/plugins/tiddlywiki/railroad/example-source": {
"title": "$:/plugins/tiddlywiki/railroad/example-source",
"created": "20150103184022184",
"modified": "20150119214125000",
"tags": "",
"type": "text/vnd.tiddlywiki.railroad",
"text": "[\"+\"]\n({ [[digit|GettingStarted]] } | \"#\" <'escape sequence'>)\n[{(\"@\" name-char | :\"--\" )}]\n"
},
"$:/plugins/tiddlywiki/railroad/example": {
"title": "$:/plugins/tiddlywiki/railroad/example",
"created": "20150102165032410",
"modified": "20150120090735000",
"tags": "",
"text": "Notation:\n\n<pre><code><$text text={{$:/plugins/tiddlywiki/railroad/example-source}}/></code></pre>\n\nDiagram:\n\n{{$:/plugins/tiddlywiki/railroad/example-source}}\n\nDebug mode:\n\n<$railroad debug=\"yes\" text={{$:/plugins/tiddlywiki/railroad/example-source}}/>\n"
},
"$:/plugins/tiddlywiki/railroad/readme": {
"title": "$:/plugins/tiddlywiki/railroad/readme",
"created": "20150102163222184",
"modified": "20150119231005000",
"text": "This plugin provides a `<$railroad>` widget for generating railroad diagrams as SVG images.\n\nAlternatively, the [[diagram notation|$:/plugins/tiddlywiki/railroad/syntax]] can be stored in a dedicated tiddler with its `type` field set to `text/vnd.tiddlywiki.railroad`, and that tiddler can simply be transcluded to wherever it is needed.\n\nThe plugin is based on [[a library by Tab Atkins|https://github.com/tabatkins/railroad-diagrams]], and has been extended to make it more flexible, including allowing components of a diagram to function as links or be transcluded from other tiddlers.\n"
},
"$:/plugins/tiddlywiki/railroad/syntax-string": {
"title": "$:/plugins/tiddlywiki/railroad/syntax-string",
"created": "20150103184022184",
"modified": "20150103184022184",
"text": "('\"' text '\"' | \"'\" text \"'\" | '\"\"\"' text '\"\"\"')"
},
"$:/plugins/tiddlywiki/railroad/syntax": {
"title": "$:/plugins/tiddlywiki/railroad/syntax",
"created": "20150103184022184",
"modified": "20150119220342000",
"text": "The railroad widget uses a special notation to construct the components defined below.\n\n`x` and `y` here stand for any component.\n\nNames (as opposed to quoted strings) are available when a value starts with a letter and contains only letters, digits, underscores, dots and hyphens.\n\n---\n\n; sequence\n: <$railroad text=\"\"\" [\"<-\"] {x} [\"->\"] \"\"\"/>\n* A sequence of components\n* The `<-` and `->` delimiters allow you to force a single component to be treated as a sequence. This is occasionally useful for spacing a diagram out\n\n---\n\n; optional\n: <$railroad text=\"\"\" \"[\" [\":\"] x \"]\" \"\"\"/>\n* A component that can be omitted\n* The colon makes `x` appear straight ahead\n\n---\n\n; repeated\n: <$railroad text=\"\"\" \"{\" x [:\"+\" y] \"}\" \"\"\"/>\n* A list of one or more `x`\n* The `+` suffix adds `y` as a separator between each `x` and the next\n\n---\n\n; optional repeated\n: <$railroad text=\"\"\" \"[{\" [\":\"] x [:\"+\" y] \"}]\" \"\"\"/>\n* An optional list of `x`, i.e. a list of zero or more `x`\n\n---\n\n; choice\n: <$railroad text=\"\"\" \"(\" {[:\":\"] x +\"|\"} \")\" \"\"\"/>\n* A set of alternatives\n* The colon indicates which branch appears straight ahead. By default, it's the first branch\n\n---\n\n; string / terminal\n: <$railroad text={{$:/plugins/tiddlywiki/railroad/syntax-string}}/>\n* A literal or terminal component\n* This follows the normal ~TiddlyWiki rules for quoted strings\n\n---\n\n; nonterminal\n: <$railroad text=\"\"\" (name | \"<\" string \">\") \"\"\"/>\n* A nonterminal component, i.e. the name of another diagram\n\n---\n\n; comment\n: <$railroad text=\"\"\" \"/\" string \"/\" \"\"\"/>\n* A comment\n\n---\n\n; dummy\n: <$railroad text=\"\"\" \"-\" \"\"\"/>\n* The absence of a component\n\n---\n\n; link\n: <$railroad text=\"\"\" \"[[\" x \"|\" (name|string) \"]]\" \"\"\"/>\n* A link to the tiddler title or URI given by the string or name\n\n---\n\n; transclusion\n: <$railroad text=\"\"\" \"{{\" (name|string) \"}}\" \"\"\"/>\n* Treats the content of another tiddler as diagram syntax and transcludes it into the current diagram\n\n---\n\n; arrow pragma\n: <$railroad text=\"\"\" \"\\arrow\" (\"yes\" | \"no\") \"\"\"/>\n* Controls whether repeat paths have an arrow on them\n* Can be toggled on and off in mid-diagram, if desired\n\n---\n\n; debug pragma\n: <$railroad text=\"\"\" \"\\debug\" \"\"\"/>\n* Causes the diagram to display its parse tree\n\n---\n\n; start/end pragma\n: <$railroad text=\"\"\" (\"\\start\" |: \"\\end\") (\"none\" |: \"single\" | \"double\") \"\"\"/>\n* Controls the style of the diagram's startpoint or endpoint\n"
},
"$:/plugins/tiddlywiki/railroad/usage": {
"title": "$:/plugins/tiddlywiki/railroad/usage",
"created": "20150102163222184",
"modified": "20150119231005000",
"text": "The content of the `<$railroad>` widget is ignored.\n\n|!Attribute |!Description |!Default |\n|text |Text in a special notation that defines the diagram's layout |-- |\n|arrow |If set to `no`, repeat paths do not have an arrow on them |`yes` |\n|start |Style of the startpoint: `single`, `double`, `none` |`single` |\n|end |Style of the endpoint: `single`, `double`, `none` |`single` |\n|debug |If set to `yes`, the diagram displays its parse tree |`no` |\n\nThese options can also be specified via pragmas in the diagram notation, or globally via a dictionary tiddler called `$:/config/railroad`:\n\n```\narrow: yes\nstart: single\nend: single\ndebug: no\n```\n"
},
"$:/plugins/tiddlywiki/railroad/railroad-diagrams.css": {
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/* CSS modified for TiddlyWiki */\n\nsvg.railroad-diagram {\n\tbackground-color: <<colour background>>;\n\tborder-radius: 5px;\n}\n/*\nsvg.railroad-diagram:hover {\n\tbackground-color: hsl(30,20%,96%);\n}\n*/\nsvg.railroad-diagram path,\nsvg.railroad-diagram rect {\n\tstroke-width: 2;\n\tstroke: <<colour message-border>>;\n}\nsvg.railroad-diagram path {\n\tfill: <<colour background>>;\n}\nsvg.railroad-diagram rect {\n\tfill: <<colour message-background>>;\n}\nsvg.railroad-diagram text {\n\tfont: 14px monospace;\n\ttext-anchor: middle;\n\tfill: <<colour message-foreground>>;\n}\nsvg.railroad-diagram text.label {\n\ttext-anchor: start;\n}\nsvg.railroad-diagram text.comment {\n\tfont: italic 12px monospace;\n}\nsvg.railroad-diagram path.arrow {\n stroke-width: 2;\n}",
"type": "text/vnd.tiddlywiki",
"title": "$:/plugins/tiddlywiki/railroad/railroad-diagrams.css",
"tags": "$:/tags/Stylesheet"
},
"$:/plugins/tiddlywiki/railroad/railroad-diagrams.js": {
"text": "(function(document) {\n/* TiddlyWiki: modifications to the original library are commented like this */\n\n/*\nRailroad Diagrams\nby Tab Atkins Jr. (and others)\nhttp://xanthir.com\nhttp://twitter.com/tabatkins\nhttp://github.com/tabatkins/railroad-diagrams\n\nThis document and all associated files in the github project are licensed under CC0: http://creativecommons.org/publicdomain/zero/1.0/\nThis means you can reuse, remix, or otherwise appropriate this project for your own use WITHOUT RESTRICTION.\n(The actual legal meaning can be found at the above link.)\nDon't ask me for permission to use any part of this project, JUST USE IT.\nI would appreciate attribution, but that is not required by the license.\n*/\n\n/*\nThis file uses a module pattern to avoid leaking names into the global scope.\nThe only accidental leakage is the name \"temp\".\nThe exported names can be found at the bottom of this file;\nsimply change the names in the array of strings to change what they are called in your application.\n\nAs well, several configuration constants are passed into the module function at the bottom of this file.\nAt runtime, these constants can be found on the Diagram class.\n*/\n\nvar temp = (function(options) {\n\tfunction subclassOf(baseClass, superClass) {\n\t\tbaseClass.prototype = Object.create(superClass.prototype);\n\t\tbaseClass.prototype.$super = superClass.prototype;\n\t}\n\n\tfunction unnull(/* children */) {\n\t\treturn [].slice.call(arguments).reduce(function(sofar, x) { return sofar !== undefined ? sofar : x; });\n\t}\n\n\tfunction determineGaps(outer, inner) {\n\t\tvar diff = outer - inner;\n\t\tswitch(Diagram.INTERNAL_ALIGNMENT) {\n\t\t\tcase 'left': return [0, diff]; break;\n\t\t\tcase 'right': return [diff, 0]; break;\n\t\t\tcase 'center':\n\t\t\tdefault: return [diff/2, diff/2]; break;\n\t\t}\n\t}\n\n\tfunction wrapString(value) {\n\t\treturn ((typeof value) == 'string') ? new Terminal(value) : value;\n\t}\n\n\n\tfunction SVG(name, attrs, text) {\n\t\tattrs = attrs || {};\n\t\ttext = text || '';\n\t\tvar el = document.createElementNS(\"http://www.w3.org/2000/svg\",name);\n\t\tfor(var attr in attrs) {\n\t\t\tel.setAttribute(attr, attrs[attr]);\n\t\t}\n\t\tel.textContent = text;\n\t\treturn el;\n\t}\n\n\tfunction FakeSVG(tagName, attrs, text){\n\t\tif(!(this instanceof FakeSVG)) return new FakeSVG(tagName, attrs, text);\n\t\tif(text) this.children = text;\n\t\telse this.children = [];\n\t\tthis.tagName = tagName;\n\t\tthis.attrs = unnull(attrs, {});\n\t\treturn this;\n\t};\n\tFakeSVG.prototype.format = function(x, y, width) {\n\t\t// Virtual\n\t};\n\tFakeSVG.prototype.addTo = function(parent) {\n\t\tif(parent instanceof FakeSVG) {\n\t\t\tparent.children.push(this);\n\t\t\treturn this;\n\t\t} else {\n\t\t\tvar svg = this.toSVG();\n\t\t\tparent.appendChild(svg);\n\t\t\treturn svg;\n\t\t}\n\t};\n\tFakeSVG.prototype.toSVG = function() {\n\t\tvar el = SVG(this.tagName, this.attrs);\n\t\tif(typeof this.children == 'string') {\n\t\t\tel.textContent = this.children;\n\t\t} else {\n\t\t\tthis.children.forEach(function(e) {\n\t\t\t\tel.appendChild(e.toSVG());\n\t\t\t});\n\t\t}\n\t\treturn el;\n\t};\n\tFakeSVG.prototype.toString = function() {\n\t\tvar str = '<' + this.tagName;\n\t\tvar group = this.tagName == \"g\" || this.tagName == \"svg\";\n\t\tfor(var attr in this.attrs) {\n\t\t\tstr += ' ' + attr + '=\"' + (this.attrs[attr]+'').replace(/&/g, '&').replace(/\"/g, '"') + '\"';\n\t\t}\n\t\tstr += '>';\n\t\tif(group) str += \"\\n\";\n\t\tif(typeof this.children == 'string') {\n\t\t\tstr += this.children.replace(/&/g, '&').replace(/</g, '<');\n\t\t} else {\n\t\t\tthis.children.forEach(function(e) {\n\t\t\t\tstr += e;\n\t\t\t});\n\t\t}\n\t\tstr += '</' + this.tagName + '>\\n';\n\t\treturn str;\n\t}\n\n\tfunction Path(x,y,attrs) {\n\t\tif(!(this instanceof Path)) return new Path(x,y,attrs);\n\t\tFakeSVG.call(this, 'path', attrs);\n\t\tthis.attrs.d = \"M\"+x+' '+y;\n\t}\n\tsubclassOf(Path, FakeSVG);\n\tPath.prototype.m = function(x,y) {\n\t\tthis.attrs.d += 'm'+x+' '+y;\n\t\treturn this;\n\t}\n\tPath.prototype.h = function(val) {\n\t\tthis.attrs.d += 'h'+val;\n\t\treturn this;\n\t}\n\tPath.prototype.right = Path.prototype.h;\n\tPath.prototype.left = function(val) { return this.h(-val); }\n\tPath.prototype.v = function(val) {\n\t\tthis.attrs.d += 'v'+val;\n\t\treturn this;\n\t}\n\tPath.prototype.down = Path.prototype.v;\n\tPath.prototype.up = function(val) { return this.v(-val); }\n\tPath.prototype.arc = function(sweep){\n\t\tvar x = Diagram.ARC_RADIUS;\n\t\tvar y = Diagram.ARC_RADIUS;\n\t\tif(sweep[0] == 'e' || sweep[1] == 'w') {\n\t\t\tx *= -1;\n\t\t}\n\t\tif(sweep[0] == 's' || sweep[1] == 'n') {\n\t\t\ty *= -1;\n\t\t}\n\t\tif(sweep == 'ne' || sweep == 'es' || sweep == 'sw' || sweep == 'wn') {\n\t\t\tvar cw = 1;\n\t\t} else {\n\t\t\tvar cw = 0;\n\t\t}\n\t\tthis.attrs.d += \"a\"+Diagram.ARC_RADIUS+\" \"+Diagram.ARC_RADIUS+\" 0 0 \"+cw+' '+x+' '+y;\n\t\treturn this;\n\t}\n\tPath.prototype.format = function() {\n\t\t// All paths in this library start/end horizontally.\n\t\t// The extra .5 ensures a minor overlap, so there's no seams in bad rasterizers.\n\t\tthis.attrs.d += 'h.5';\n\t\treturn this;\n\t}\n/* TiddlyWiki: added support for arbitrary straight lines */\n\tPath.prototype.line = function(dx,dy) {\n\t\tthis.attrs.d += \"l\"+dx+\" \"+dy;\n\t\treturn this;\n\t}\n\n/* TiddlyWiki: added twOptions parameter, passing it to Start() and End() */\n\tfunction Diagram(twOptions, items) {\n\t\tif(!(this instanceof Diagram)) return new Diagram(twOptions, [].slice.call(arguments,1));\n\t\tFakeSVG.call(this, 'svg', {class: Diagram.DIAGRAM_CLASS});\n\t\tthis.items = items.map(wrapString);\n\t\tthis.items.unshift(new Start(twOptions.start));\n\t\tthis.items.push(new End(twOptions.end));\n\t\tthis.width = this.items.reduce(function(sofar, el) { return sofar + el.width + (el.needsSpace?20:0)}, 0)+1;\n\t\tthis.up = Math.max.apply(null, this.items.map(function (x) { return x.up; }));\n\t\tthis.down = Math.max.apply(null, this.items.map(function (x) { return x.down; }));\n\t\tthis.formatted = false;\t\t\n\t}\n\tsubclassOf(Diagram, FakeSVG);\n\tfor(var option in options) {\n\t\tDiagram[option] = options[option];\n\t}\n\tDiagram.prototype.format = function(paddingt, paddingr, paddingb, paddingl) {\n\t\tpaddingt = unnull(paddingt, 20);\n\t\tpaddingr = unnull(paddingr, paddingt, 20);\n\t\tpaddingb = unnull(paddingb, paddingt, 20);\n\t\tpaddingl = unnull(paddingl, paddingr, 20);\n\t\tvar x = paddingl;\n\t\tvar y = paddingt;\n\t\ty += this.up;\n\t\tvar g = FakeSVG('g', Diagram.STROKE_ODD_PIXEL_LENGTH ? {transform:'translate(.5 .5)'} : {});\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\tif(item.needsSpace) {\n\t\t\t\tPath(x,y).h(10).addTo(g);\n\t\t\t\tx += 10;\n\t\t\t}\n\t\t\titem.format(x, y, item.width).addTo(g);\n\t\t\tx += item.width;\n\t\t\tif(item.needsSpace) {\n\t\t\t\tPath(x,y).h(10).addTo(g);\n\t\t\t\tx += 10;\n\t\t\t}\n\t\t}\n\t\tthis.attrs.width = this.width + paddingl + paddingr;\n\t\tthis.attrs.height = this.up + this.down + paddingt + paddingb;\n\t\tthis.attrs.viewBox = \"0 0 \" + this.attrs.width + \" \" + this.attrs.height;\n\t\tg.addTo(this);\n\t\tthis.formatted = true;\n\t\treturn this;\n\t}\n\tDiagram.prototype.addTo = function(parent) {\n\t\tvar scriptTag = document.getElementsByTagName('script');\n\t\tscriptTag = scriptTag[scriptTag.length - 1];\n\t\tvar parentTag = scriptTag.parentNode;\n\t\tparent = parent || parentTag;\n\t\treturn this.$super.addTo.call(this, parent);\n\t}\n\tDiagram.prototype.toSVG = function() {\n\t\tif (!this.formatted) {\n\t\t\tthis.format();\n\t\t}\n\t\treturn this.$super.toSVG.call(this);\n\t}\n\tDiagram.prototype.toString = function() {\n\t\tif (!this.formatted) {\n\t\t\tthis.format();\n\t\t}\n\t\treturn this.$super.toString.call(this);\n\t}\n\n\tfunction Sequence(items) {\n\t\tif(!(this instanceof Sequence)) return new Sequence([].slice.call(arguments));\n\t\tFakeSVG.call(this, 'g');\n\t\tthis.items = items.map(wrapString);\n\t\tthis.width = this.items.reduce(function(sofar, el) { return sofar + el.width + (el.needsSpace?20:0)}, 0);\n\t\tthis.up = this.items.reduce(function(sofar,el) { return Math.max(sofar, el.up)}, 0);\n\t\tthis.down = this.items.reduce(function(sofar,el) { return Math.max(sofar, el.down)}, 0);\n\t}\n\tsubclassOf(Sequence, FakeSVG);\n\tSequence.prototype.format = function(x,y,width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tPath(x,y).h(gaps[0]).addTo(this);\n\t\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\tif(item.needsSpace) {\n\t\t\t\tPath(x,y).h(10).addTo(this);\n\t\t\t\tx += 10;\n\t\t\t}\n\t\t\titem.format(x, y, item.width).addTo(this);\n\t\t\tx += item.width;\n\t\t\tif(item.needsSpace) {\n\t\t\t\tPath(x,y).h(10).addTo(this);\n\t\t\t\tx += 10;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\tfunction Choice(normal, items) {\n\t\tif(!(this instanceof Choice)) return new Choice(normal, [].slice.call(arguments,1));\n\t\tFakeSVG.call(this, 'g');\n\t\tif( typeof normal !== \"number\" || normal !== Math.floor(normal) ) {\n\t\t\tthrow new TypeError(\"The first argument of Choice() must be an integer.\");\n\t\t} else if(normal < 0 || normal >= items.length) {\n\t\t\tthrow new RangeError(\"The first argument of Choice() must be an index for one of the items.\");\n\t\t} else {\n\t\t\tthis.normal = normal;\n\t\t}\n\t\tthis.items = items.map(wrapString);\n\t\tthis.width = this.items.reduce(function(sofar, el){return Math.max(sofar, el.width)},0) + Diagram.ARC_RADIUS*4;\n\t\tthis.up = this.down = 0;\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\tif(i < normal) { this.up += Math.max(Diagram.ARC_RADIUS,item.up + item.down + Diagram.VERTICAL_SEPARATION); }\n\t\t\tif(i == normal) { this.up += Math.max(Diagram.ARC_RADIUS, item.up); this.down += Math.max(Diagram.ARC_RADIUS, item.down); }\n\t\t\tif(i > normal) { this.down += Math.max(Diagram.ARC_RADIUS,Diagram.VERTICAL_SEPARATION + item.up + item.down); }\n\t\t}\n\t}\n\tsubclassOf(Choice, FakeSVG);\n\tChoice.prototype.format = function(x,y,width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tPath(x,y).h(gaps[0]).addTo(this);\n\t\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tvar last = this.items.length -1;\n\t\tvar innerWidth = this.width - Diagram.ARC_RADIUS*4;\n\n\t\t// Do the elements that curve above\n\t\tfor(var i = this.normal - 1; i >= 0; i--) {\n\t\t\tvar item = this.items[i];\n\t\t\tif( i == this.normal - 1 ) {\n\t\t\t\tvar distanceFromY = Math.max(Diagram.ARC_RADIUS*2, this.items[i+1].up + Diagram.VERTICAL_SEPARATION + item.down);\n\t\t\t}\n\t\t\tPath(x,y).arc('se').up(distanceFromY - Diagram.ARC_RADIUS*2).arc('wn').addTo(this);\n\t\t\titem.format(x+Diagram.ARC_RADIUS*2,y - distanceFromY,innerWidth).addTo(this);\n\t\t\tPath(x+Diagram.ARC_RADIUS*2+innerWidth, y-distanceFromY).arc('ne').down(distanceFromY - Diagram.ARC_RADIUS*2).arc('ws').addTo(this);\n\t\t\tdistanceFromY += Math.max(Diagram.ARC_RADIUS, item.up + Diagram.VERTICAL_SEPARATION + (i == 0 ? 0 : this.items[i-1].down));\n\t\t}\n\n\t\t// Do the straight-line path.\n\t\tPath(x,y).right(Diagram.ARC_RADIUS*2).addTo(this);\n\t\tthis.items[this.normal].format(x+Diagram.ARC_RADIUS*2, y, innerWidth).addTo(this);\n\t\tPath(x+Diagram.ARC_RADIUS*2+innerWidth, y).right(Diagram.ARC_RADIUS*2).addTo(this);\n\n\t\t// Do the elements that curve below\n\t\tfor(var i = this.normal+1; i <= last; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\tif( i == this.normal + 1 ) {\n\t\t\t\tvar distanceFromY = Math.max(Diagram.ARC_RADIUS*2, this.items[i-1].down + Diagram.VERTICAL_SEPARATION + item.up);\n\t\t\t}\n\t\t\tPath(x,y).arc('ne').down(distanceFromY - Diagram.ARC_RADIUS*2).arc('ws').addTo(this);\n\t\t\titem.format(x+Diagram.ARC_RADIUS*2, y+distanceFromY, innerWidth).addTo(this);\n\t\t\tPath(x+Diagram.ARC_RADIUS*2+innerWidth, y+distanceFromY).arc('se').up(distanceFromY - Diagram.ARC_RADIUS*2).arc('wn').addTo(this);\n\t\t\tdistanceFromY += Math.max(Diagram.ARC_RADIUS, item.down + Diagram.VERTICAL_SEPARATION + (i == last ? 0 : this.items[i+1].up));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tfunction Optional(item, skip) {\n\t\tif( skip === undefined )\n\t\t\treturn Choice(1, Skip(), item);\n\t\telse if ( skip === \"skip\" )\n\t\t\treturn Choice(0, Skip(), item);\n\t\telse\n\t\t\tthrow \"Unknown value for Optional()'s 'skip' argument.\";\n\t}\n\n/* TiddlyWiki: added wantArrow */\n\tfunction OneOrMore(item, rep, wantArrow) {\n\t\tif(!(this instanceof OneOrMore)) return new OneOrMore(item, rep, wantArrow);\n\t\tFakeSVG.call(this, 'g');\n\n/* TiddlyWiki: code added */\n\t\tthis.wantArrow = wantArrow;\n\n\t\trep = rep || (new Skip);\n\t\tthis.item = wrapString(item);\n\t\tthis.rep = wrapString(rep);\n\t\tthis.width = Math.max(this.item.width, this.rep.width) + Diagram.ARC_RADIUS*2;\n\t\tthis.up = this.item.up;\n\t\tthis.down = Math.max(Diagram.ARC_RADIUS*2, this.item.down + Diagram.VERTICAL_SEPARATION + this.rep.up + this.rep.down);\n\n/* TiddlyWiki: moved calculation of distanceFromY (of the repeat arc) to here */\n\t\tthis.distanceFromY = Math.max(Diagram.ARC_RADIUS*2, this.item.down+Diagram.VERTICAL_SEPARATION+this.rep.up);\n\t}\n\tsubclassOf(OneOrMore, FakeSVG);\n\tOneOrMore.prototype.needsSpace = true;\n\tOneOrMore.prototype.format = function(x,y,width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tPath(x,y).h(gaps[0]).addTo(this);\n\t\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\t// Draw item\n\t\tPath(x,y).right(Diagram.ARC_RADIUS).addTo(this);\n\t\tthis.item.format(x+Diagram.ARC_RADIUS,y,this.width-Diagram.ARC_RADIUS*2).addTo(this);\n\t\tPath(x+this.width-Diagram.ARC_RADIUS,y).right(Diagram.ARC_RADIUS).addTo(this);\n\n\t\t// Draw repeat arc\n/* TiddlyWiki: moved calculation of distanceFromY from here to constructor */\n\t\tvar distanceFromY = this.distanceFromY;\n\t\t\n\t\tPath(x+Diagram.ARC_RADIUS,y).arc('nw').down(distanceFromY-Diagram.ARC_RADIUS*2).arc('ws').addTo(this);\n\t\tthis.rep.format(x+Diagram.ARC_RADIUS, y+distanceFromY, this.width - Diagram.ARC_RADIUS*2).addTo(this);\n\t\tPath(x+this.width-Diagram.ARC_RADIUS, y+distanceFromY).arc('se').up(distanceFromY-Diagram.ARC_RADIUS*2).arc('en').addTo(this);\n\t\t\n/* TiddlyWiki: code added */\n\t\tif(this.wantArrow) {\n\t\t\tvar arrowSize = Diagram.ARC_RADIUS/2;\n\t\t\t// Compensate for the illusion that makes the arrow look unbalanced if it's too close to the curve below it\n\t\t\tvar multiplier = (distanceFromY < arrowSize*5) ? 1.2 : 1;\n\t\t\tPath(x-arrowSize, y+distanceFromY/2 + arrowSize/2, {class:\"arrow\"}).\n\t\t\t\tline(arrowSize, -arrowSize).line(arrowSize*multiplier, arrowSize).addTo(this);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tfunction ZeroOrMore(item, rep, skip, wantArrow) {\n\t\treturn Optional(OneOrMore(item, rep, wantArrow), skip);\n\t}\n\n/* TiddlyWiki: added type parameter */\n\tfunction Start(type) {\n\t\tif(!(this instanceof Start)) return new Start(type);\n\t\tFakeSVG.call(this, 'path');\n\t\tthis.type = type || 'single'\n\t\tthis.width = (this.type === 'double') ? 20 : 10;\n\t\tthis.up = 10;\n\t\tthis.down = 10;\n\t}\n\tsubclassOf(Start, FakeSVG);\n\tStart.prototype.format = function(x,y) {\n/* TiddlyWiki: added types */\n\t\tif(this.type === 'single') {\n\t\t\tthis.attrs.d = 'M '+x+' '+(y-10)+' v 20 m 0 -10 h 10.5';\n\t\t} else if(this.type === 'double') {\n\t\t\tthis.attrs.d = 'M '+x+' '+(y-10)+' v 20 m 10 -20 v 20 m -10 -10 h 20.5';\n\t\t} else { // 'none'\n\t\t\tthis.attrs.d = 'M '+x+' '+y+' h 10.5';\n\t\t}\n\t\treturn this;\n\t}\n\n/* TiddlyWiki: added type parameter */\n\tfunction End(type) {\n\t\tif(!(this instanceof End)) return new End(type);\n\t\tFakeSVG.call(this, 'path');\n\t\tthis.type = type || 'double';\n\t\tthis.width = (this.type === 'double') ? 20 : 10;\n\t\tthis.up = 10;\n\t\tthis.down = 10;\n\t}\n\tsubclassOf(End, FakeSVG);\n\tEnd.prototype.format = function(x,y) {\n/* TiddlyWiki: added types */\n\t\tif(this.type === 'single') {\n\t\t\tthis.attrs.d = 'M '+x+' '+y+' h 10 m 0 -10 v 20';\n\t\t} else if(this.type === 'double') {\n\t\t\tthis.attrs.d = 'M '+x+' '+y+' h 20 m -10 -10 v 20 m 10 -20 v 20';\n\t\t} else { // 'none'\n\t\t\tthis.attrs.d = 'M '+x+' '+y+' h 10';\n\t\t}\n\t\treturn this;\n\t}\n\n\tfunction Terminal(text) {\n\t\tif(!(this instanceof Terminal)) return new Terminal(text);\n\t\tFakeSVG.call(this, 'g');\n\t\tthis.text = text;\n\t\tthis.width = text.length * 8 + 20; /* Assume that each char is .5em, and that the em is 16px */\n\t\tthis.up = 11;\n\t\tthis.down = 11;\n\t}\n\tsubclassOf(Terminal, FakeSVG);\n\tTerminal.prototype.needsSpace = true;\n\tTerminal.prototype.format = function(x, y, width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tPath(x,y).h(gaps[0]).addTo(this);\n\t\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tFakeSVG('rect', {x:x, y:y-11, width:this.width, height:this.up+this.down, rx:10, ry:10}).addTo(this);\n\t\tFakeSVG('text', {x:x+this.width/2, y:y+4}, this.text).addTo(this);\n\t\treturn this;\n\t}\n\n\tfunction NonTerminal(text) {\n\t\tif(!(this instanceof NonTerminal)) return new NonTerminal(text);\n\t\tFakeSVG.call(this, 'g');\n\t\tthis.text = text;\n\t\tthis.width = text.length * 8 + 20;\n\t\tthis.up = 11;\n\t\tthis.down = 11;\n\t}\n\tsubclassOf(NonTerminal, FakeSVG);\n\tNonTerminal.prototype.needsSpace = true;\n\tNonTerminal.prototype.format = function(x, y, width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tPath(x,y).h(gaps[0]).addTo(this);\n\t\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tFakeSVG('rect', {x:x, y:y-11, width:this.width, height:this.up+this.down}).addTo(this);\n\t\tFakeSVG('text', {x:x+this.width/2, y:y+4}, this.text).addTo(this);\n\t\treturn this;\n\t}\n\n\tfunction Comment(text) {\n\t\tif(!(this instanceof Comment)) return new Comment(text);\n\t\tFakeSVG.call(this, 'g');\n\t\tthis.text = text;\n\t\tthis.width = text.length * 7 + 10;\n\t\tthis.up = 11;\n\t\tthis.down = 11;\n\t}\n\tsubclassOf(Comment, FakeSVG);\n\tComment.prototype.needsSpace = true;\n\tComment.prototype.format = function(x, y, width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tPath(x,y).h(gaps[0]).addTo(this);\n\t\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tFakeSVG('text', {x:x+this.width/2, y:y+5, class:'comment'}, this.text).addTo(this);\n\t\treturn this;\n\t}\n\n\tfunction Skip() {\n\t\tif(!(this instanceof Skip)) return new Skip();\n\t\tFakeSVG.call(this, 'g');\n\t\tthis.width = 0;\n\t\tthis.up = 0;\n\t\tthis.down = 0;\n\t}\n\tsubclassOf(Skip, FakeSVG);\n\tSkip.prototype.format = function(x, y, width) {\n\t\tPath(x,y).right(width).addTo(this);\n\t\treturn this;\n\t}\n\t\n/* TiddlyWiki: added linking ability */\n\tfunction Link(item,options) {\n\t\tif(!(this instanceof Link)) return new Link(item,options);\n\t\tFakeSVG.call(this,'a',options);\n\t\tthis.item = item;\n\t\tthis.width = item.width;\n\t\tthis.up = item.up;\n\t\tthis.down = item.down;\n\t}\n\tsubclassOf(Link, FakeSVG);\n\tLink.prototype.needsSpace = true;\n\tLink.prototype.format = function(x, y, width) {\n\t\tthis.item.format(x,y,width).addTo(this);\n\t\treturn this;\n\t}\n\n/* TiddlyWiki: this block replaces the export mechanism in the original library */\n\tif (exports) {\n\t\texports.Diagram = Diagram;\n\t\texports.Sequence = Sequence;\n\t\texports.Choice = Choice;\n\t\texports.Optional = Optional;\n\t\texports.OneOrMore = OneOrMore;\n\t\texports.ZeroOrMore = ZeroOrMore;\n\t\texports.Terminal = Terminal;\n\t\texports.NonTerminal = NonTerminal;\n\t\texports.Comment = Comment;\n\t\texports.Skip = Skip;\n\t\texports.Link = Link;\n\t};\n})(\n\t{\n\tVERTICAL_SEPARATION: 8,\n\tARC_RADIUS: 10,\n\tDIAGRAM_CLASS: 'railroad-diagram',\n\tSTROKE_ODD_PIXEL_LENGTH: true,\n\tINTERNAL_ALIGNMENT: 'center',\n\t}\n);\n\n/* TiddlyWiki: removed assignments to properties of the window object */\n\n})($tw.node ? $tw.fakeDocument : window.document)\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/railroad/railroad-diagrams.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/railroad/parser.js": {
"title": "$:/plugins/tiddlywiki/railroad/parser.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/railroad/parser.js\ntype: application/javascript\nmodule-type: library\n\nParser for the source of a railroad diagram.\n\n[:x]\t\t\toptional, normally included\n[x]\t\t\t\toptional, normally omitted\n{x}\t\t\t\tone or more\n{x +\",\"}\t\tone or more, comma-separated\n[{:x}]\t\t\tzero or more, normally included\n[{:x +\",\"}]\t\tzero or more, comma-separated, normally included\n[{x}]\t\t\tzero or more, normally omitted\n[{x +\",\"}]\t\tzero or more, comma-separated, normally omitted\nx y z\t\t\tsequence\n<-x y z->\t\texplicit sequence\n(x|y|z)\t\t\talternatives\n(x|:y|z)\t\talternatives, normally y\n\"x\"\t\t\t\tterminal\n<\"x\">\t\t\tnonterminal\n/\"blah\"/\t\tcomment\n-\t\t\t\tdummy\n[[x|\"tiddler\"]]\tlink\n{{\"tiddler\"}}\ttransclusion\n\n\"x\" can also be written 'x' or \"\"\"x\"\"\"\n\npragmas:\n\t\\arrow yes|no\n\t\\debug yes|no\n\t\\start single|double|none\n\t\\end single|double|none\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar components = require(\"$:/plugins/tiddlywiki/railroad/components.js\").components;\n\nvar Parser = function(widget,source,options) {\n\tthis.widget = widget;\n\tthis.source = source;\n\tthis.options = options;\n\tthis.tokens = this.tokenise(source);\n\tthis.tokenPos = 0;\n\tthis.advance();\n\tthis.content = this.parseContent();\n\tthis.root = new components.Root(this.content);\n\tthis.checkFinished();\n};\n\n/////////////////////////// Parser dispatch\n\nParser.prototype.parseContent = function() {\n\tvar content = [];\n\t// Parse zero or more components\n\twhile(true) {\n\t\tvar component = this.parseComponent();\n\t\tif(!component) {\n\t\t\tbreak;\n\t\t}\n\t\tif(!component.isPragma) {\n\t\t\tcontent.push(component);\n\t\t}\n\t}\n\treturn content;\n};\n\nParser.prototype.parseComponent = function() {\n\tvar component = null;\n\tif(this.token) {\n\t\tif(this.at(\"string\")) {\n\t\t\tcomponent = this.parseTerminal();\n\t\t} else if(this.at(\"name\")) {\n\t\t\tcomponent = this.parseName();\n\t\t} else if(this.at(\"pragma\")) {\n\t\t\tcomponent = this.parsePragma();\n\t\t} else {\n\t\t\tswitch(this.token.value) {\n\t\t\t\tcase \"[\":\n\t\t\t\t\tcomponent = this.parseOptional();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"{\":\n\t\t\t\t\tcomponent = this.parseRepeated();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"<\":\n\t\t\t\t\tcomponent = this.parseNonterminal();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"(\":\n\t\t\t\t\tcomponent = this.parseChoice();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"/\":\n\t\t\t\t\tcomponent = this.parseComment();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[[\":\n\t\t\t\t\tcomponent = this.parseLink();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"{{\":\n\t\t\t\t\tcomponent = this.parseTransclusion();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"<-\":\n\t\t\t\t\tcomponent = this.parseSequence();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"-\":\n\t\t\t\t\tcomponent = this.parseDummy();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn component;\n};\n\n/////////////////////////// Specific components\n\nParser.prototype.parseChoice = function() {\n\t// Consume the (\n\tthis.advance();\n\tvar content = [],\n\t\tcolon = -1;\n\tdo {\n\t\t// Allow at most one branch to be prefixed with a colon\n\t\tif(colon === -1 && this.eat(\":\")) {\n\t\t\tcolon = content.length;\n\t\t}\n\t\t// Parse the next branch\n\t\tcontent.push(this.parseContent());\n\t} while(this.eat(\"|\"));\n\t// Consume the closing bracket\n\tthis.close(\")\");\n\t// Create a component\n\treturn new components.Choice(content,colon === -1 ? 0 : colon);\n};\n\nParser.prototype.parseComment = function() {\n\t// Consume the /\n\tthis.advance();\n\t// The comment's content should be in a string literal\n\tvar content = this.expectString(\"after /\");\n\t// Consume the closing /\n\tthis.close(\"/\");\n\t// Create a component\n\treturn new components.Comment(content);\n};\n\nParser.prototype.parseDummy = function() {\n\t// Consume the -\n\tthis.advance();\n\t// Create a component\n\treturn new components.Dummy();\n};\n\nParser.prototype.parseLink = function() {\n\t// Consume the [[\n\tthis.advance();\n\t// Parse the content\n\tvar content = this.parseContent();\n\t// Consume the |\n\tthis.expect(\"|\");\n\t// Consume the target\n\tvar target = this.expectNameOrString(\"as link target\");\n\t// Prepare some attributes for the SVG \"a\" element to carry\n\tvar options = {\"data-tw-target\": target};\n\tif($tw.utils.isLinkExternal(target)) {\n\t\toptions[\"data-tw-external\"] = true;\n\t}\n\t// Consume the closing ]]\n\tthis.close(\"]]\");\n\t// Create a component\n\treturn new components.Link(content,options);\n};\n\nParser.prototype.parseName = function() {\n\t// Create a component\n\tvar component = new components.Nonterminal(this.token.value);\n\t// Consume the name\n\tthis.advance();\n\treturn component;\n};\n\nParser.prototype.parseNonterminal = function() {\n\t// Consume the <\n\tthis.advance();\n\t// The nonterminal's name should be in a string literal\n\tvar content = this.expectString(\"after <\");\n\t// Consume the closing bracket\n\tthis.close(\">\");\n\t// Create a component\n\treturn new components.Nonterminal(content);\n};\n\nParser.prototype.parseOptional = function() {\n\tvar wantArrow = this.options.arrow;\n\t// Consume the [\n\tthis.advance();\n\t// Consume the { if there is one\n\tvar repeated = this.eat(\"{\");\n\t// Note whether omission is the normal route\n\tvar normal = this.eat(\":\");\n\t// Parse the content\n\tvar content = this.parseContent(),\n\t\tseparator = null;\n\t// Parse the separator if there is one\n\tif(repeated && this.eat(\"+\")) {\n\t\tseparator = this.parseContent();\n\t}\n\t// Consume the closing brackets\n\tif(repeated) {\n\t\tthis.close(\"}\");\n\t}\n\tthis.close(\"]\");\n\t// Create a component\n\treturn repeated ? new components.OptionalRepeated(content,separator,normal,wantArrow)\n\t\t: new components.Optional(content,normal);\n};\n\nParser.prototype.parseRepeated = function() {\n\tvar wantArrow = this.options.arrow;\n\t// Consume the {\n\tthis.advance();\n\t// Parse the content\n\tvar content = this.parseContent(),\n\t\tseparator = null;\n\t// Parse the separator if there is one\n\tif(this.eat(\"+\")) {\n\t\tseparator = this.parseContent();\n\t}\n\t// Consume the closing bracket\n\tthis.close(\"}\");\n\t// Create a component\n\treturn new components.Repeated(content,separator,wantArrow);\n};\n\nParser.prototype.parseSequence = function() {\n\t// Consume the <-\n\tthis.advance();\n\t// Parse the content\n\tvar content = this.parseContent();\n\t// Consume the closing ->\n\tthis.close(\"->\");\n\t// Create a component\n\treturn new components.Sequence(content);\n};\n\nParser.prototype.parseTerminal = function() {\n\tvar component = new components.Terminal(this.token.value);\n\t// Consume the string literal\n\tthis.advance();\n return component;\n};\n\nParser.prototype.parseTransclusion = function() {\n\t// Consume the {{\n\tthis.advance();\n\t// Consume the text reference\n\tvar textRef = this.expectNameOrString(\"as transclusion source\");\n\t// Consume the closing }}\n\tthis.close(\"}}\");\n\t// Retrieve the content of the text reference\n\tvar source = this.widget.wiki.getTextReference(textRef,\"\",this.widget.getVariable(\"currentTiddler\"));\n\t// Parse the content\n\tvar content = new Parser(this.widget,source).content;\n\t// Create a component\n\treturn new components.Transclusion(content);\n};\n\n/////////////////////////// Pragmas\n\nParser.prototype.parsePragma = function() {\n\t// Create a dummy component\n\tvar component = { isPragma: true };\n\t// Consume the pragma\n\tvar pragma = this.token.value;\n\tthis.advance();\n\t// Apply the setting\n\tif(pragma === \"arrow\") {\n\t\tthis.options.arrow = this.parseYesNo(pragma);\t\t\n\t} else if(pragma === \"debug\") {\n\t\tthis.options.debug = true;\n\t} else if(pragma === \"start\") {\n\t\tthis.options.start = this.parseTerminusStyle(pragma);\t\t\n\t} else if(pragma === \"end\") {\n\t\tthis.options.end = this.parseTerminusStyle(pragma);\t\t\n\t} else {\n\t\tthrow \"Invalid pragma\";\n\t}\n\treturn component;\n};\n\nParser.prototype.parseYesNo = function(pragma) {\n\treturn this.parseSetting([\"yes\",\"no\"],pragma) === \"yes\";\n}\n\nParser.prototype.parseTerminusStyle = function(pragma) {\n\treturn this.parseSetting([\"single\",\"double\",\"none\"],pragma);\n}\n\nParser.prototype.parseSetting = function(options,pragma) {\n\tif(this.at(\"name\") && options.indexOf(this.token.value) !== -1) {\n\t\treturn this.tokenValueEaten();\t\t\n\t}\n\tthrow options.join(\" or \") + \" expected after \\\\\" + pragma;\n}\n\n/////////////////////////// Token manipulation\n\nParser.prototype.advance = function() {\n\tif(this.tokenPos >= this.tokens.length) {\n\t\tthis.token = null;\n\t}\n\tthis.token = this.tokens[this.tokenPos++];\n};\n\nParser.prototype.at = function(token) {\n\treturn this.token && (this.token.type === token || this.token.type === \"token\" && this.token.value === token);\n};\n\nParser.prototype.eat = function(token) {\n\tvar at = this.at(token);\n\tif(at) {\n\t\tthis.advance();\n\t}\n\treturn at;\n};\n\nParser.prototype.tokenValueEaten = function() {\n\tvar output = this.token.value;\n\tthis.advance();\n\treturn output;\n};\n\nParser.prototype.close = function(token) {\n\tif(!this.eat(token)) {\n\t\tthrow \"Closing \" + token + \" expected\";\n\t}\n};\n\nParser.prototype.checkFinished = function() {\n\tif(this.token) {\n\t\tthrow \"Syntax error at \" + this.token.value;\n\t}\n};\n\nParser.prototype.expect = function(token) {\n\tif(!this.eat(token)) {\n\t\tthrow token + \" expected\";\n\t}\n};\n\nParser.prototype.expectString = function(context,token) {\n\tif(!this.at(\"string\")) {\n\t\ttoken = token || \"String\";\n\t\tthrow token + \" expected \" + context;\n\t}\n\treturn this.tokenValueEaten();\n};\n\nParser.prototype.expectNameOrString = function(context) {\n\tif(this.at(\"name\")) {\n\t\treturn this.tokenValueEaten();\n\t}\n\treturn this.expectString(context,\"Name or string\");\n};\n\n/////////////////////////// Tokenisation\n\nParser.prototype.tokenise = function(source) {\n\tvar tokens = [],\n\t\tpos = 0,\n\t\tc, s, token;\n\twhile(pos < source.length) {\n\t\t// Initialise this iteration\n\t\ts = token = null;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Avoid falling off the end of the string\n\t\tif (pos >= source.length) {\n\t\t\tbreak;\n\t\t}\n\t\t// Examine the next character\n\t\tc = source.charAt(pos);\n\t\tif(\"\\\"'\".indexOf(c) !== -1) {\n\t\t\t// String literal\n\t\t\ttoken = $tw.utils.parseStringLiteral(source,pos);\n\t\t\tif(!token) {\n\t\t\t\tthrow \"Unterminated string literal\";\n\t\t\t}\n\t\t} else if(\"[]{}\".indexOf(c) !== -1) {\n\t\t\t// Single or double character\n\t\t\ts = source.charAt(pos+1) === c ? c + c : c;\n\t\t} else if(c === \"<\") {\n\t\t\t// < or <-\n\t\t\ts = source.charAt(pos+1) === \"-\" ? \"<-\" : \"<\";\n\t\t} else if(c === \"-\") {\n\t\t\t// - or ->\n\t\t\ts = source.charAt(pos+1) === \">\" ? \"->\" : \"-\";\n\t\t} else if(\"()>+/:|\".indexOf(c) !== -1) {\n\t\t\t// Single character\n\t\t\ts = c;\n\t\t} else if(c.match(/[a-zA-Z]/)) {\n\t\t\t// Name\n\t\t\ttoken = this.readName(source,pos);\n\t\t} else if(c.match(/\\\\/)) {\n\t\t\t// Pragma\n\t\t\ttoken = this.readPragma(source,pos);\n\t\t} else {\n\t\t\tthrow \"Syntax error at \" + c;\n\t\t}\n\t\t// Add our findings to the return array\n\t\tif(token) {\n\t\t\ttokens.push(token);\n\t\t} else {\n\t\t\ttoken = $tw.utils.parseTokenString(source,pos,s);\n\t\t\ttokens.push(token);\n\t\t}\n\t\t// Prepare for the next character\n\t\tpos = token.end;\n\t}\n\treturn tokens;\n};\n\nParser.prototype.readName = function(source,pos) {\n\tvar re = /([a-zA-Z0-9_.-]+)/g;\n\tre.lastIndex = pos;\n\tvar match = re.exec(source);\n\tif(match && match.index === pos) {\n\t\treturn {type: \"name\", value: match[1], start: pos, end: pos+match[1].length};\n\t} else {\n\t\tthrow \"Invalid name\";\n\t}\n};\n\nParser.prototype.readPragma = function(source,pos) {\n\tvar re = /([a-z]+)/g;\n\tpos++;\n\tre.lastIndex = pos;\n\tvar match = re.exec(source);\n\tif(match && match.index === pos) {\n\t\treturn {type: \"pragma\", value: match[1], start: pos, end: pos+match[1].length};\n\t} else {\n\t\tthrow \"Invalid pragma\";\n\t}\n};\n\n/////////////////////////// Exports\n\nexports.parser = Parser;\n\n})();",
"type": "application/javascript",
"module-type": "library"
},
"$:/plugins/tiddlywiki/railroad/typed-parser.js": {
"title": "$:/plugins/tiddlywiki/railroad/typed-parser.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/railroad/typed-parser.js\ntype: application/javascript\nmodule-type: parser\n\nThis parser wraps unadorned railroad syntax into a railroad widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar RailroadParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"railroad\",\n\t\t\ttag: \"$railroad\",\n\t\t\ttext: text\n\t\t};\n\tthis.tree = [element];\nconsole.log(text);\n};\n\nexports[\"text/vnd.tiddlywiki.railroad\"] = RailroadParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/plugins/tiddlywiki/railroad/wrapper.js": {
"title": "$:/plugins/tiddlywiki/railroad/wrapper.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/railroad/wrapper.js\ntype: application/javascript\nmodule-type: widget\n\nWrapper for `railroad-diagrams.js` that provides a `<$railroad>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Parser = require(\"$:/plugins/tiddlywiki/railroad/parser.js\").parser,\n\tWidget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RailroadWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\nvar RAILROAD_OPTIONS = \"$:/config/railroad\";\n\n/*\nInherit from the base widget class\n*/\nRailroadWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRailroadWidget.prototype.render = function(parent,nextSibling) {\n\t// Housekeeping\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Get the source text\n\tvar source = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\t// Create a div to contain the SVG or error message\n\tvar div = this.document.createElement(\"div\");\n\ttry {\n\t\t// Initialise options from the config tiddler or widget attributes\n\t\tvar config = this.wiki.getTiddlerData(RAILROAD_OPTIONS,{});\n\t\tvar options = {\n\t\t\tarrow: this.getAttribute(\"arrow\", config.arrow || \"yes\") === \"yes\",\n\t\t\tdebug: this.getAttribute(\"debug\", config.debug || \"no\") === \"yes\",\n\t\t\tstart: this.getAttribute(\"start\", config.start || \"single\"),\n\t\t\tend: this.getAttribute(\"end\", config.end || \"single\")\n\t\t};\n\t\t// Parse the source\n\t\tvar parser = new Parser(this,source,options);\n\t\t// Generate content into the div\n\t\tif(parser.options.debug) {\n\t\t\tthis.renderDebug(parser,div);\n\t\t} else {\n\t\t\tthis.renderSvg(parser,div);\n\t\t}\n\t} catch(ex) {\n\t\tdiv.className = \"tc-error\";\n\t\tdiv.textContent = ex;\n\t}\n\t// Insert the div into the DOM\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\n};\n\nRailroadWidget.prototype.renderDebug = function(parser,div) {\n\tvar output = [\"<pre>\"];\n\tparser.root.debug(output, \"\");\n\toutput.push(\"</pre>\");\n\tdiv.innerHTML = output.join(\"\");\n};\n\nRailroadWidget.prototype.renderSvg = function(parser,div) {\n\t// Generate a model of the diagram\n\tvar fakeSvg = parser.root.toSvg(parser.options);\n\t// Render the model into a tree of SVG DOM nodes\n\tvar svg = fakeSvg.toSVG();\n\t// Fill in the remaining attributes of any link nodes\n\tthis.patchLinks(svg);\n\t// Insert the SVG tree into the div\n\tdiv.appendChild(svg);\n};\n\nRailroadWidget.prototype.patchLinks = function(node) {\n\tvar self = this;\n\tif(!$tw.node && node.hasChildNodes()) {\n\t\tvar children = node.childNodes;\n\t\tfor(var i=0; i<children.length; i++) {\n\t\t\tvar child = children[i];\n\t\t\tvar attributes = child.attributes;\n\t\t\tif(attributes) {\n\t\t\t\t// Find each element that has a data-tw-target attribute\n\t\t\t\tvar target = child.attributes[\"data-tw-target\"];\n\t\t\t\tif(target !== undefined) {\n\t\t\t\t\ttarget = target.value;\n\t\t\t\t\tif(child.attributes[\"data-tw-external\"]) {\n\t\t\t\t\t\t// External links are straightforward\n\t\t\t\t\t\tchild.setAttribute(\"target\",\"_blank\");\n\t\t\t\t\t\tchild.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Each internal link gets its own onclick handler, capturing its own copy of target\n\t\t\t\t\t\t(function(myTarget) {\n\t\t\t\t\t\t\tchild.onclick = function(event) {\n\t\t\t\t\t\t\t\tself.dispatchLink(myTarget,event);\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})(target);\n\t\t\t\t\t\ttarget = \"#\" + target;\n\t\t\t\t\t}\n\t\t\t\t\tchild.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",target);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.patchLinks(child);\n\t\t}\n\t}\n};\n\nRailroadWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text || changedTiddlers[RAILROAD_OPTIONS]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn false;\t\n};\n\nRailroadWidget.prototype.dispatchLink = function(to,event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1)\n\t});\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nexports.railroad = RailroadWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
}
}
}
符号:
<pre><code><$text text={{$:/plugins/tiddlywiki/railroad/zh-Hans/example-source}}/></code></pre>
图解:
{{$:/plugins/tiddlywiki/railroad/zh-Hans/example-source}}
调试模式:
<$railroad debug="yes" text={{$:/plugins/tiddlywiki/railroad/zh-Hans/example-source}}/>
["+"]
({ [[ <'数字'>|GettingStarted]] } | "#" <' 逸出串行 '>)
[{("@" <' 名称-字符 '> | :"--" )}]
此插件提供提供一个 `<$railroad>` 小工具生成语法图表为 SVG 图像。
另外,[[图表符号|$:/plugins/tiddlywiki/railroad/zh-Hans/syntax]]可存放在一专用条目,其 `type` 字段设为 `text/vnd.tiddlywiki.railroad`,且该条目可以简单地被嵌入到需要它的任何地方。
此插件系基于[[Tab Atkins 的程序库|https://github.com/tabatkins/railroad-diagrams]],并已予扩充,使其更加灵活,包括允许一个图表的组件具链接功能或可从其他的条目嵌入。
railroad 小工具使用特殊的符号来构建下列定义的组件。
此处的 `x` 和 `y` 代表任何组件。
名称(而非带引号的字符串)须以字母开头并包含只有字母、数字、底线、点和连字号。
---
; 串行
: <$railroad text=""" ["<-"] {x} ["->"] """/>
* 一系列的组件
* `<-` 及 `->` 分隔符号允许您强制单一组件可以被视为一个串行,这偶尔有益于图表的间距。
---
; 可选
: <$railroad text=""" "[" [":"] x "]" """/>
* 可省略的组件
* 冒号使 `x` 直接往前呈现
---
; 重复
: <$railroad text=""" "{" x [:"+" y] "}" """/>
* 一或多个 `x` 的清单
* `+` 尾码添加 `y` 为每个 `x` 和下一个之间的分隔符号
---
; 可选重复
: <$railroad text=""" "[{" [":"] x [:"+" y] "}]" """/>
* 可选的 `x` 的清单,亦即零个或更多的 `x` 的清单
---
; 选择
: <$railroad text=""" "(" {[:":"] x +"|"} ")" """/>
* 一组备选项目
* 冒号表示哪个分支直接往前呈现。缺省情况下,它是首个分支
---
; 字符串 / 终端
: <$railroad text={{$:/plugins/tiddlywiki/railroad/zh-Hans/syntax-string}}/>
* 一个文本或终端组件
* 此遵循正常的 ~TiddlyWiki 的带引号的字符串规则
---
; 非终端符
: <$railroad text=""" (name | "<" string ">") """/>
* 一个非终端的组件,亦即另一个图表的名称
---
; 注解
: <$railroad text=""" "/" string "/" """/>
* 一个注解
---
; 虚拟
: <$railroad text=""" "-" """/>
* 不存在的组件
---
; 链接
: <$railroad text=""" "[[" x "|" (name|string) "]]" """/>
* 条目名称、字符串或名称的 URI 的链接
---
; 嵌入
: <$railroad text=""" "{{" (name|string) "}}" """/>
* 另一条目的内容作为图表语法,并将其嵌入于当前图表
---
; 箭号编译
: <$railroad text=""" "\arrow" ("yes" | "no") """/>
* 控制重复路径上是否具有箭头
* 需要时,可于图表中切换开关
---
; 调试编译
: <$railroad text=""" "\debug" """/>
* 使图表显示其解析树
---
; 开始/结束编译
: <$railroad text=""" ("\start" |: "\end") ("none" |: "single" | "double") """/>
* 控制图表的起始点或终结点的样式
('"' text '"' | "'" text "'" | '"""' text '"""')
忽略 `<$railroad>` 小工具的内容。
|!属性 |!描述 |!缺省 |
|text |定义图表的布局的一个特殊的符号中的文本 |-- |
|arrow |若设为 `no`,则重复路径上没有箭头 |`yes` |
|start |起始点的样式:`single`、`double`、`none` |`single` |
|end |终结点的样式:`single`、`double`、`none` |`single` |
|debug |若设为 `yes`,则图表显示其解析树 |`no` |
可于图表符号、编译或全域的字典条目 `$:/config/railroad` 指定这些选项 :
```
arrow: yes
start: single
end: single
debug: no
```
{
"tiddlers": {
"$:/config/SaveTrailPlugin/enable-drafts": {
"title": "$:/config/SaveTrailPlugin/enable-drafts",
"text": "no"
},
"$:/config/SaveTrailPlugin/enable": {
"title": "$:/config/SaveTrailPlugin/enable",
"text": "yes"
},
"$:/config/SaveTrailPlugin/sync-drafts-filter": {
"title": "$:/config/SaveTrailPlugin/sync-drafts-filter",
"text": "[is[tiddler]has[draft.of]]"
},
"$:/plugins/tiddlywiki/savetrail/readme": {
"title": "$:/plugins/tiddlywiki/savetrail/readme",
"text": "This plugin causes TiddlyWiki to continuously download (as a JSON file) the contents of any tiddler that is manually changed by any of several means:\n\n* Confirming an edit\n* Deleting tiddlers\n* Imports\n* Renames/relinks\n* Optionally, typing in draft tiddlers can trigger a download\n\nWhere appropriate, separate 'before' and 'after' files are downloaded. Configured correctly, the browser will download the files silently in the background, and they can be used as a backup in case of accidental data loss.\n\n''CAUTION'': Using this plugin will generate a //lot// of files in your downloads folder! Some points to watch:\n\n* This plugin is pretty much unusable unless your browser is set up to download files automatically, without prompting for the location\n* Automatic file downloading doesn't work in all browsers - in particular, Safari and Internet Explorer do not currently support the [[necessary HTML5 feature|http://caniuse.com/download]]\n* Be aware of the privacy implications of leaving a plaintext trail of all of your edits. You should only enable this plugin on computers that your trust and with content that is not sensitive\n* The plugin uses the tiddler title plus a timestamp to generate a filename for the downloaded file, but some browsers ignore the specified title and generate their own title for each downloaded file\n\nOther points to note:\n\n* By default, after a draft tiddler has been modified the plugin waits until at least one second has elapsed since the last typing before it attempts to download the tiddler. This reduces the number of times that rapidly changing tiddlers are saved\n* This plugin can be used with both the single file HTML configuration and under Node.js because it is independent of the usual saving and syncing processes\n"
},
"$:/plugins/tiddlywiki/savetrail/savetrail.js": {
"title": "$:/plugins/tiddlywiki/savetrail/savetrail.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/savetrail/savetrail.js\ntype: application/javascript\nmodule-type: startup\n\nA startup module to download every changed tiddler as a JSON file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"savetrail\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Favicon tiddler\nvar ENABLE_TIDDLER_TITLE = \"$:/config/SaveTrailPlugin/enable\",\n\tENABLE_DRAFTS_TIDDLER_TITLE = \"$:/config/SaveTrailPlugin/enable-drafts\",\n\tSYNC_DRAFTS_FILTER_TIDDLER_TITLE = \"$:/config/SaveTrailPlugin/sync-drafts-filter\";\n\nexports.startup = function() {\n\t$tw.savetrail = $tw.savetrail || {};\n\t// Create a syncer to handle autosaving\n\t$tw.savetrail.syncadaptor = new SaveTrailSyncAdaptor();\n\t$tw.savetrail.syncer = new $tw.Syncer({\n\t\twiki: $tw.wiki,\n\t\tsyncadaptor: $tw.savetrail.syncadaptor,\n\t\ttitleSyncFilter: SYNC_DRAFTS_FILTER_TIDDLER_TITLE,\n\t\tlogging: false,\n\t\tdisableUI: true\n\t});\n\t// Add hooks for trapping user actions\n\t$tw.hooks.addHook(\"th-saving-tiddler\",function(tiddler) {\n\t\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\"yes\")) {\n\t\t\tvar oldTiddler = $tw.wiki.getTiddler(tiddler.fields.title);\n\t\t\tif(oldTiddler) {\n\t\t\t\tsaveTiddlerFile(oldTiddler,{reason: \"overwritten\"});\t\t\t\n\t\t\t}\n\t\t\tsaveTiddlerFile(tiddler,{reason: \"saved\"});\n\t\t}\n\t\treturn tiddler;\n\t});\n\t$tw.hooks.addHook(\"th-renaming-tiddler\",function(newTiddler,oldTiddler) {\n\t\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\"yes\")) {\n\t\t\tif(oldTiddler) {\n\t\t\t\tsaveTiddlerFile(oldTiddler,{reason: \"deleted\"});\t\t\t\n\t\t\t}\n\t\t\tsaveTiddlerFile(newTiddler,{reason: \"renamed\"});\n\t\t}\n\t\treturn newTiddler;\n\t});\n\t$tw.hooks.addHook(\"th-relinking-tiddler\",function(newTiddler,oldTiddler) {\n\t\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\"yes\")) {\n\t\t\tif(oldTiddler) {\n\t\t\t\tsaveTiddlerFile(oldTiddler,{reason: \"overwritten\"});\t\t\t\n\t\t\t}\n\t\t\tsaveTiddlerFile(newTiddler,{reason: \"relinked\"});\n\t\t}\n\t\treturn newTiddler;\n\t});\n\t$tw.hooks.addHook(\"th-importing-tiddler\",function(tiddler) {\n\t\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\"yes\")) {\n\t\t\tvar oldTiddler = $tw.wiki.getTiddler(tiddler.fields.title);\n\t\t\tif(oldTiddler) {\n\t\t\t\tsaveTiddlerFile(oldTiddler,{reason: \"overwritten\"});\t\t\t\n\t\t\t}\n\t\t\tsaveTiddlerFile(tiddler,{reason: \"imported\"});\n\t\t}\n\t\treturn tiddler;\n\t});\n\t$tw.hooks.addHook(\"th-deleting-tiddler\",function(tiddler) {\n\t\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\"yes\")) {\n\t\t\tsaveTiddlerFile(tiddler,{reason: \"deleted\"});\n\t\t}\n\t\treturn tiddler;\n\t});\n};\n\nfunction SaveTrailSyncAdaptor(options) {\n\tthis.logger = new $tw.utils.Logger(\"SaveTrail\");\n}\n\nSaveTrailSyncAdaptor.prototype.name = \"savetrail\";\n\nSaveTrailSyncAdaptor.prototype.isReady = function() {\n\t// The savetrail adaptor is always ready\n\treturn true;\n};\n\nSaveTrailSyncAdaptor.prototype.getTiddlerInfo = function(tiddler) {\n\treturn {};\n};\n\n/*\nSave a tiddler and invoke the callback with (err,adaptorInfo,revision)\n*/\nSaveTrailSyncAdaptor.prototype.saveTiddler = function(tiddler,options,callback) {\n\t// Check for pre v5.2.0 method signature:\n\tif(typeof callback !== \"function\" && typeof options === \"function\"){\n\t\tvar optionsArg = callback;\n\t\tcallback = options;\n\t\toptions = optionsArg;\n\t}\n\toptions = options || {};\n\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\"yes\")) {\n\t\tvar isDraft = $tw.utils.hop(tiddler.fields,\"draft.of\");\n\t\tif(!isDraft || $tw.wiki.checkTiddlerText(ENABLE_DRAFTS_TIDDLER_TITLE,\"yes\")) {\n\t\t\tsaveTiddlerFile(tiddler,{reason: \"modified\"});\n\t\t}\n\t}\n\tcallback(null,null);\n};\n\n/*\nLoad a tiddler and invoke the callback with (err,tiddlerFields)\n*/\nSaveTrailSyncAdaptor.prototype.loadTiddler = function(title,options,callback) {\n\t// Check for pre v5.2.0 method signature:\n\tif(typeof callback !== \"function\" && typeof options === \"function\"){\n\t\tvar optionsArg = callback;\n\t\tcallback = options;\n\t\toptions = optionsArg;\n\t}\n\toptions = options || {};\n\tcallback(null,null);\n};\n\n/*\nDelete a tiddler and invoke the callback with (err)\n*/\nSaveTrailSyncAdaptor.prototype.deleteTiddler = function(title,options,callback) {\n\t// Check for pre v5.2.0 method signature:\n\tif(typeof callback !== \"function\" && typeof options === \"function\"){\n\t\tvar optionsArg = callback;\n\t\tcallback = options;\n\t\toptions = optionsArg;\n\t}\n\toptions = options || {};\n\tcallback(null,null);\n};\n\nfunction saveTiddlerFile(tiddler,options) {\n\toptions = options || {};\n\tvar reason = options.reason || \"changed\",\n\t\tillegalFilenameCharacters = /<|>|\\:|\\\"|\\/|\\\\|\\||\\?|\\*|\\^|\\s/g,\n\t\tfixedTitle = $tw.utils.transliterate(tiddler.fields.title).replace(illegalFilenameCharacters,\"_\"),\n\t\tformattedDate = $tw.utils.stringifyDate(new Date()),\n\t\tfilename = fixedTitle + \".\" + formattedDate + \".\" + reason + \".json\",\n\t\tfields = new Object();\n\tfor(var field in tiddler.fields) {\n\t\tfields[field] = tiddler.getFieldString(field);\n\t}\n\tvar text = JSON.stringify([fields],null,$tw.config.preferences.jsonSpaces),\n\t\tlink = document.createElement(\"a\");\n\tlink.setAttribute(\"target\",\"_blank\");\n\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text],{type: \"text/plain\"});\n\t\tlink.setAttribute(\"href\",URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/plain,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/plugins/tiddlywiki/savetrail/settings": {
"title": "$:/plugins/tiddlywiki/savetrail/settings",
"text": "\n<$checkbox tiddler=\"$:/config/SaveTrailPlugin/enable\" field=\"text\" checked=\"yes\" unchecked=\"no\"> Enable automatic saving of modified tiddlers</$checkbox>\n\n<$checkbox tiddler=\"$:/config/SaveTrailPlugin/enable-drafts\" field=\"text\" checked=\"yes\" unchecked=\"no\"> Include automatic saving of draft tiddlers (warning: generates a lot of download files)</$checkbox>\n"
}
}
}
此插件造成 TiddlyWiki 持续下载 (为一个 JSON 文件) 通过以下几种方式之一手动更改的任何条目的内容:
* 确认编辑
* 删除条目
* 导入
* 重命名/重新链接
* 可选的,输入草稿条目会触发下载
在适当的情况下,区分下载 '之前' 和 '之后' 的文件。正确地设置,浏览器会静默地在背景下载文件 , 并可以将它们用作数据意外遗失情况的备份。
''注意'':使用此插件,将在您的下载文件夹中生成//很多//文件!看一些要点︰
* 这个插件几乎无法使用,除非您的浏览器设置为自动下载文件,而可不提示下载位置
* 自动文件下载在所有浏览器中不起作用 - 尤其是,目前不支持 Safari 和 Internet Explorer [[必要的 HTML5 功能|http://caniuse.com/download]]
* 请注意留下所有编辑的明文线索的隐私问题。您应只在信任的电脑上以及不敏感的内容上启用此插件。
* 此插件使用条目名称加上时间戳为下载文件的文件名,但某些浏览器会忽略指定的标题,并生成他们自己的每个下载文件的标题。
其他注意事项:
* 缺省情况下,一个草稿条目已被修改后,在其尝试下载条目之前,该插件一直等待,直到至少在最后一次打字的一秒后。这将减少快速更动的条目被保存的次数。
* 此插件可以与单个文件 HTML 配置和 Node.js 环境下使用,因为它独立于一般的处存和同步过程。
<$checkbox tiddler="$:/config/SaveTrailPlugin/enable" field="text" checked="yes" unchecked="no"> 启用自动保存修改过的条目</$checkbox>
<$checkbox tiddler="$:/config/SaveTrailPlugin/enable-drafts" field="text" checked="yes" unchecked="no"> 包括自动保存的草稿条目 (注意︰会生成大量的下载文件)</$checkbox>
\define platforms()
<$set name="platforms" tiddler=<<currentTab>> field="platforms">
<$list filter="[<currentTab>tags[]sort[]] -Resources -Saving -plugins" variable="platform">
<span class="tc-saving-details-platform">
<$text text=<<platform>>/>
</span>
</$list>
</$set>
\end
<h1><$link to=<<currentTab>>><$view tiddler=<<currentTab>> field="title"/></$link></h1>
|!方法 |<$view tiddler=<<currentTab>> field="method"/> |
|!交付 |<$view tiddler=<<currentTab>> field="delivery"/> |
|!平台 |<<platforms>> |
<$tiddler tiddler=<<currentTab>>>
<$transclude tiddler=<<currentTab>> field="text" mode="block"/>
</$tiddler>
.tc-thumbnail-tabs .tc-tab-buttons {
background: <<color message-background>>;
text-align: center;
}
.tc-thumbnail-tabs .tc-tab-buttons button {
display: table-cell;
width: 140px;
height: 80px;
vertical-align: top;
margin: 0.3em;
border: 2px solid <<color message-background>>;
background: <<color message-background>>;
color: <<colour message-foreground>>;
padding: 0;
font-weight: normal;
}
.tc-thumbnail-tabs .tc-tab-buttons button.tc-tab-selected {
border: 2px solid <<colour foreground>>;
background: <<color background>>;
}
.tc-thumbnail-tabs .tc-tab-buttons button:hover {
background: <<colour message-foreground>>;
color: <<colour message-background>>;
}
.tc-thumbnail-tabs .tc-tab-divider {
border: none;
}
.tc-thumbnail-tabs .tc-saving-thumbnail-wrapper {
vertical-align: top;
height: inherit;
}
.tc-thumbnail-tabs .tc-saving-thumbnail-caption {
font-weight: bold;
background: <<color foreground>>;
color: <<color background>>;
padding: 2px 8px;
}
.tc-thumbnail-tabs .tc-saving-thumbnail-description {
padding: 2px 8px;
font-style: italic;
font-size: 0.85em;
}
.tc-thumbnail-tabs .tc-saving-details-platform,
.tc-thumbnail-tabs .tc-btn-unpushed,
.tc-thumbnail-tabs .tc-btn-pushed {
display: inline-block;
padding: 0.16em 0.7em;
font-size: 0.9em;
font-weight: 400;
line-height: 1.2em;
color: <<colour message-background>>;
white-space: nowrap;
vertical-align: baseline;
background-color: <<colour message-foreground>>;
border-radius: 1em;
}
.tc-thumbnail-tabs .tc-btn-pushed {
background-color: <<colour foreground>>;
fill: <<color background>>;
}
<div class="tc-saving-thumbnail-wrapper">
<div class="tc-saving-thumbnail-caption">
<$transclude tiddler=<<currentTab>> field="caption">
<$view tiddler=<<currentTab>> field="title"/>
</$transclude>
</div>
<div class="tc-saving-thumbnail-description">
<$view tiddler=<<currentTab>> field="description"/>
</div>
</div>
\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]
\rules only filteredtranscludeinline transcludeinline macrocallinline
<div class="tc-remove-when-wiki-loaded">
<style scoped>
.tc-splash-text {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 16px;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
margin: 20px auto 0;
width: 200px;
text-align: center;
color: <<colour foreground>>;
fill: <<colour foreground>>;
}
.tc-splash-text img {
width: 150px;
<<box-shadow "2px 2px 10px rgba(0, 0, 0, 0.5)">>
}
html body.tc-body {
background: <<colour page-background>>;
}
/*
Spinner from https://github.com/tobiasahlin/SpinKit/ by Tobias Ahlin
The MIT License (MIT)
Copyright (c) 2015 Tobias Ahlin
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
.tc-splash-spinner {
margin: 20px auto 0;
width: 70px;
text-align: center;
}
.tc-splash-spinner > div {
width: 18px;
height: 18px;
border-radius: 100%;
display: inline-block;
-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
animation: sk-bouncedelay 1.4s infinite ease-in-out both;
background-color: #f88;
}
.tc-splash-spinner .tc-splash-bounce-1 {
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s;
background-color: #8f8;
}
.tc-splash-spinner .tc-splash-bounce-2 {
-webkit-animation-delay: -0.16s;
animation-delay: -0.16s;
background-color: #88f;
}
@-webkit-keyframes sk-bouncedelay {
0%, 80%, 100% { -webkit-transform: scale(0) }
40% { -webkit-transform: scale(1.0) }
}
@keyframes sk-bouncedelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
} 40% {
-webkit-transform: scale(1.0);
transform: scale(1.0);
}
}
</style>
<div class="tc-splash-spinner">
<div class="tc-splash-bounce-1"></div>
<div class="tc-splash-bounce-2"></div>
<div class="tc-splash-bounce-3"></div>
</div>
<div class="tc-splash-text">
<div class="tc-splash-text">
{{$:/SiteTitle}} <br />加载中,请稍候
</div>
<!-- Demonstrating how to embed a bitmap graphic -->
<div class="tc-splash-text">
<img src="data:image/jpeg;base64,{{New Release Banner||$:/core/templates/plain-text-tiddler}}" width="100"/>
</div>
<!-- Demonstrating how to embed a wikitext SVG graphic -->
<div class="tc-splash-text">
{{$:/core/icon||$:/core/templates/plain-text-tiddler}}
</div>
</div>
$:/core/ui/EditTemplate/body/preview/diffs-current
$:/themes/tiddlywiki/snowwhite
{
"tiddlers": {
"$:/themes/tiddlywiki/centralised/styles.tid": {
"title": "$:/themes/tiddlywiki/centralised/styles.tid",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\thtml .tc-page-container {\n\t\ttext-align: center;\n\t}\n\n\thtml .tc-story-river {\n\t\tposition: relative;\n\t\twidth: 770px;\n\t\tpadding: 42px;\n\t\tmargin: 0 auto;\n\t\ttext-align: left;\n\t}\n\n\thtml .tc-sidebar-scrollable {\n\t\ttext-align: left;\n\t\tleft: 50%;\n\t\tright: 0;\n\t\tmargin-left: 343px;\n\t}\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/heavier/base": {
"title": "$:/themes/tiddlywiki/heavier/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\nhtml body strong,\nhtml body button.tc-tiddlylink,\nhtml body a.tc-tiddlylink,\nhtml body a.tc-tiddlylink-shadow,\nhtml body .tc-menu-list-count {\n\tfont-weight: 700;\n}\n\nhtml body h1,\nhtml body h2,\nhtml body h3,\nhtml body h4,\nhtml body h5,\nhtml body h6,\nhtml body a.tc-tiddlylink-shadow.tc-tiddlylink-resolves,\nhtml body button.tc-tag-label,\nhtml body span.tc-tag-label,\nhtml body .tc-sidebar-header .tc-title a.tc-tiddlylink-resolves,\nhtml body .tc-site-title,\nhtml body .tc-titlebar,\nhtml body .tc-subtitle,\nhtml body .tc-tiddler-missing .tc-title,\nhtml body .tc-tab-buttons button,\nhtml body .tc-tiddler-frame .tc-tiddler-body {\n\tfont-weight: 500;\n}\n\nhtml body .tc-view-field-name {\n\tfont-weight: 400;\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/readonly/styles.tid": {
"title": "$:/themes/tiddlywiki/readonly/styles.tid",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define button-selector(title)\nbutton.$title$, .tc-drop-down button.$title$, div.$title$\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fclone>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fdelete>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fedit>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fnew-here>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fnew-journal-here>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fimport>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fmanager>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fnew-image>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fnew-journal>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fnew-tiddler>> {\n\tdisplay: none;\n}"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/seamless/base": {
"title": "$:/themes/tiddlywiki/seamless/base",
"tags": "[[$:/tags/Stylesheet]]",
"list-after": "$:/themes/tiddlywiki/vanilla/base",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n/*\nRules copied from Snow White\n*/\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected svg {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal-displayed {\n\t<<filter \"blur(4px)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n/*\nSeamless modifications\n*/\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t/* Drop the tiddler frame padding */\n\tbody.tc-body .tc-tiddler-frame {\n\t\tpadding: 0;\n\t}\n\n\t/* Move the sidebar up so that the title lines up */\n\tbody.tc-body .tc-sidebar-scrollable {\n\t\tpadding: 43px 0 28px 42px;\n\t}\n\n\t/* Stop the tiddler info panel from bleeding into the tiddler frame padding */\n\tbody.tc-body .tc-tiddler-info {\n\t\tmargin: 0;\n\t}\n\n\t/* Stop message boxes from bleeding into the tiddler frame padding */\n\tbody.tc-body .tc-message-box {\n\t\tmargin: 21px 0 21px 0;\n\t}\n\n}\n\n/* Use the tiddler background colour for the page background */\nhtml body.tc-body {\n\tbackground-color: <<colour background>>;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour background>>;\n}\n\n/* Adjust the colour of the page controls */\nbody.tc-body .tc-page-controls svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n/* Adjust the colour of the sidebar selected tabs */\nbody.tc-body .tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour background>>;\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/snowwhite/base": {
"title": "$:/themes/tiddlywiki/snowwhite/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define sidebarbreakpoint-minus-one()\n<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tc-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n\t}\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected,\n.tc-page-controls button.tc-selected {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ntextarea.tc-edit-texteditor {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\ncanvas.tc-edit-bitmapeditor {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/starlight/arvo.woff": {
"title": "$:/themes/tiddlywiki/starlight/arvo.woff",
"text": "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",
"type": "application/font-woff"
},
"$:/themes/tiddlywiki/starlight/ltbg.jpg": {
"title": "$:/themes/tiddlywiki/starlight/ltbg.jpg",
"text": "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PSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KPHBsaXN0IHZlcnNpb249IjEuMCI+CjxkaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJCQkJPHJlYWw+MTwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnN1YlRpY2tldC5wYXBlcl9pbmZvX3RpY2tldDwva2V5PgoJPGRpY3Q+CgkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5QTVRpb2dhUGFwZXJOYW1lPC9rZXk+CgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8cmVhbD43MzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NjwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+Nzc0PC9yZWFsPgoJCQkJCQk8cmVhbD41OTQ8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc+bmEtbGV0dGVyPC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8cmVhbD43MzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NjwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPlVTIExldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJCTxzdHJpbmc+MDAuMjA8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQudHlwZTwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mb1RpY2tldDwvc3RyaW5nPgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LkFQSVZlcnNpb248L2tleT4KCTxzdHJpbmc+MDAuMjA8L3N0cmluZz4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+Cgk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0VGlja2V0PC9zdHJpbmc+CjwvZGljdD4KPC9wbGlzdD4KOEJJTQPtAAAAAAAQAEgCTgABAAEASAJOAAEAAThCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAABOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANHAAAABgAAAAAAAAAAAAABVAAAAVQAAAAJAFAAaQBjAHQAdQByAGUAIAAyAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAFUAAABVAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAABVAAAAABSZ2h0bG9uZwAAAVQAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAVQAAAAAUmdodGxvbmcAAAFUAAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxUZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAAAAdkZWZhdWx0AAAACXZlcnRBbGlnbmVudW0AAAAPRVNsaWNlVmVydEFsaWduAAAAB2RlZmF1bHQAAAALYmdDb2xvclR5cGVlbnVtAAAAEUVTbGljZUJHQ29sb3JUeXBlAAAAAE5vbmUAAAAJdG9wT3V0c2V0bG9uZwAAAAAAAAAKbGVmdE91dHNldGxvbmcAAAAAAAAADGJvdHRvbU91dHNldGxvbmcAAAAAAAAAC3JpZ2h0T3V0c2V0bG9uZwAAAAAAOEJJTQQoAAAAAAAMAAAAAT/wAAAAAAAAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAFkQAAAAEAAACgAAAAoAAAAeAAASwAAAAFdQAYAAH/2P/gABBKRklGAAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAoACgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A9E/iknTcf7ElL6ptEikkpdN3n8if/UJvgkpX5Eu/PwSH3J5SUsCknTfgkpXZKNPJLyhLukpSdN5JJKUlqlCSSlaJJJapKUEvwSS178JKf//Q9EP+oS+KUJf79UlL8/NMkB4pSkpXmkfBIQkkpfRMUuEklKSSSSUr8EvPsnTJKUkOEuT59kklK/Kl/rCXeUh/qfikpRgfkS/j4pDhL8ZSUpL8iXxTx8klP//R9ES7pFL/AF1SUrsnTJJKVp/sSPeUkklKHj4pflS7JJKX5CZLWfFOkpZL8iXdL/WElK0+9Lt8E/nzKZJSvwS+Pglolr80lKmRqkfhCf8A3pHhJS3dJLT70vypKf/S9EnskkPJL5JKV/rCSWvzT9klLJQkEklKj8EteE6b5pKUkP8Acl+BSme0pKUEkuySSlFLyCSXx7JKVqklolM88JKUlEpxPgmSUr/ekl/rKSSn/9P0T8ieE3xS/L4pKV2SKXyT+CSlkteySX5ElK+WifhNql5pKV+CU/NIJJKX/wBZTfgkl+RJSuEkpSEpKUlHikl+KSlFL5JacDhLRJSpKX4JJa9+ElP/1PRUySX8UlKn/el8E+nCUfckpZJJL8iSl0oTJfNJSjzKSXdIeCSlcpa/66JfFLvEpKV8fuS15SlIT8+6SlJJJJKVql8EtfFOElLJJfDVJJT/AP/V9E0/uSSKWqSlSUgPAp/4pueUlK+GhT/BNKSSlaJcJJHySUpL4Ja8JCUlK/GEkuySSlfFJJL4JKVyl8fv5SMpa/FJSvjolp4Jymn70lK/HySGqXdKZCSn/9b0RPGv96bt4J4SUseE+qbzSPmkpUpQklpKSl/wlN+VL/X4JJKUdU6WvwTJKV+RLskfH/al4pKUlz2SSn7klK/KlOqR/wBQkkpXkkkl/r9ySl/gmSSSU//X9ESSSKSlJJeaSSlJJR5JT/qElKlLSRCXdIJKV4d0uEv4pafNJStUoSSSUrhP8R8kySSlwmCSUJKXn70uAm51S0+P5UlKKU6p03+pSU//0PRPh9yXwS+KSSlf6hJIpTKSlRwn1mEyX+vmkpX8Uo/3pJJKV2ST+CaJSUpLVLlL8qSlafekl8EklKSS1SSUr4JfDul2lKElK++Eu6SWqSn/2QA4QklNBCEAAAAAAFUAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAQwBTADMAAAABADhCSU0EBgAAAAAABwAGAAEAAQEA/+EPLmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzYgNDYuMjc2NzIwLCBNb24gRmViIDE5IDIwMDcgMjI6MTM6NDMgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhhcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iIHhhcDpDcmVhdGVEYXRlPSIyMDEwLTA4LTMwVDIzOjQ5OjE0LTA1OjAwIiB4YXA6TW9kaWZ5RGF0ZT0iMjAxMC0wOC0zMFQyMzo0OToxNC0wNTowMCIgeGFwOk1ldGFkYXRhRGF0ZT0iMjAxMC0wOC0zMFQyMzo0OToxNC0wNTowMCIgeGFwOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1MzIE1hY2ludG9zaCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0iaU1hYyIgcGhvdG9zaG9wOkhpc3Rvcnk9IiIgeGFwTU06SW5zdGFuY2VJRD0idXVpZDpFQjAwQjU5NDA4QjVERjExODdBNTlCQzExMkI0QjA2RSIgeGFwTU06RG9jdW1lbnRJRD0idXVpZDpFQTAwQjU5NDA4QjVERjExODdBNTlCQzExMkI0QjA2RSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDkwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwOTAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIHRpZmY6TmF0aXZlRGlnZXN0PSIyNTYsMjU3LDI1OCwyNTksMjYyLDI3NCwyNzcsMjg0LDUzMCw1MzEsMjgyLDI4MywyOTYsMzAxLDMxOCwzMTksNTI5LDUzMiwzMDYsMjcwLDI3MSwyNzIsMzA1LDMxNSwzMzQzMjs3RUY4RDFBOTcwMjlCOUNFOTAwNkUzRDcxRjgwNDdFNSIgZXhpZjpQaXhlbFhEaW1lbnNpb249IjM0MCIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjM0MCIgZXhpZjpDb2xvclNwYWNlPSItMSIgZXhpZjpOYXRpdmVEaWdlc3Q9IjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtGRTM2RkQ0MzU0NEI0ODUyODY3OEVERkZGOTk0MkMwRiI+IDx4YXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8+/+IPJElDQ19QUk9GSUxFAAEBAAAPFGFwcGwCAAAAbW50clJHQiBYWVogB9oAAQAEAA8AMwADYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsWM2pk1LRLUWykThyCK1QdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAAAXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAYSbmRpbgAAB+wAAAY+ZGVzYwAADiwAAABfZHNjbQAADowAAAA8bW1vZAAADsgAAAAoY3BydAAADvAAAAAkWFlaIAAAAAAAAHeaAABAmQAAAxlYWVogAAAAAAAAWO0AAKuMAAAXrVhZWiAAAAAAAAAmTgAAE/UAALheWFlaIAAAAAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAADAQAAAgAAAUUCyAQ5BZsHIQi8ClsL+w2ZDzsQ6hKXFEYWAhe5GVYa4xxxHfkfdSDyImcj0iU1JpAn5ikyKnkrvi0BLkEvgTC9MfkzNTRrNaE21DgHOTg6ZjuTPLw95D8MQDNBV0J5Q5pEuEXWRvJIDEklSjpL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",
"type": "image/jpeg"
},
"$:/themes/tiddlywiki/starlight/styles.tid": {
"title": "$:/themes/tiddlywiki/starlight/styles.tid",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n/*\nPlaceholder for a more thorough refinement of Snow White\n*/\n\n@font-face {\n\tfont-family: \"Arvo\";\n\tfont-style: normal;\n\tfont-weight: 400;\n\tsrc: local(\"Arvo\"), url(<<datauri \"$:/themes/tiddlywiki/starlight/arvo.woff\">>) format(\"woff\");\n}\n\nhtml body, .tc-sidebar-scrollable-backdrop {\n\tfont-family: \"Arvo\", \"Times\";\n\tbackground: url(<<datauri \"$:/themes/tiddlywiki/starlight/ltbg.jpg\">>);\n}\n\n.tc-page-controls svg {\n\t<<filter \"drop-shadow(1px 1px 2px rgba(255,255,255,0.9))\">>\n}\n"
},
"$:/themes/tiddlywiki/starlight/themetweaks": {
"title": "$:/themes/tiddlywiki/starlight/themetweaks",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "Star Tweaks",
"text": "Demo of a control panel tab dynamically loaded with a theme.\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/tight/base": {
"title": "$:/themes/tiddlywiki/tight/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\thtml body.tc-body {\n\t\tfont-size: 13px;\n\t\tline-height: 16px;\n\t}\n\n\thtml body.tc-body h1,\n\thtml body.tc-body h2,\n\thtml body.tc-body h3,\n\thtml body.tc-body h4,\n\thtml body.tc-body p {\n\t\tmargin-top: 0.3em;\n\t\tmargin-bottom: 0.3em;\n\t}\n\n\thtml body.tc-body code {\n\t\tfont-size: 0.8em;\n\t}\n\n\thtml body.tc-body section.tc-story-river {\n\t\tpadding: 0px;\n\t}\n\n\thtml body.tc-body div.tc-tiddler-frame {\n\t\tpadding: 12px;\n\t}\n\n\thtml body.tc-body div.tc-sidebar-scrollable {\n\t\tpadding: 12px 0 12px 12px;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-subtitle {\n\t\tfont-size: 0.7em;\n\t\tfont-weight: 700;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-subtitle .tc-tiddlylink {\n\t\tmargin-right: .3em;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tags-wrapper {\n\t\tmargin: 0;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame button.tc-tag-label,\n\thtml body.tc-body .tc-tiddler-frame span.tc-tag-label {\n\t\tfont-size: 0.8em;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h1 {\n\t\tfont-size: 1.5em;\n\t\tfont-weight: 500;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h2 {\n\t\tfont-size: 1.3em;\n\t\tfont-weight: 500;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h3 {\n\t\tfont-size: 1.2em;\n\t\tfont-weight: 500;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h4 {\n\t\tfont-size: 1.1em;\n\t\tfont-weight: 500;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-improvement-banner {\n\t\tmargin-right: -15px;\n\t\tmargin-left: -10px;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-info {\n\t\tmargin: 0 -13px 0 -13px;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-fold-banner {\n\t\twidth: 13px;\n\t\tmargin-left: -15px;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-unfold-banner {\n\t\tmargin-left: -13px;\n\t\tmargin-top: -4px;\n\t}\n\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/tight-heavier/base": {
"title": "$:/themes/tiddlywiki/tight-heavier/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/vanilla/base": {
"title": "$:/themes/tiddlywiki/vanilla/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[<background>is[image]]\">\n`background: url(`\n<$list filter=\"[<background>!has[_canonical_uri]]\">\n`\"`<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\"`\n</$list>\n<$list filter=\"[<background>has[_canonical_uri]]\">\n`\"`<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>`\"`\n</$list>\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n</$list>\n</$set>\n\\end\n\n\\define sidebarbreakpoint()\n<$text text={{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}/>\n\\end\n\n\\define sidebarbreakpoint-minus-one()\n<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/>\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n</$reveal>\n</$reveal>\n\\end\n\n\\define if-editor-height-fixed(then,else)\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n$then$\n</$reveal>\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n$else$\n</$reveal>\n\\end\n\n\\define set-type-selector-min-width()\n<$set name=\"typeLength\" value={{{ [all[shadows+tiddlers]prefix[$:/language/Docs/Types/]get[name]length[]maxall[]] }}}>\n\n\t.tc-type-selector-dropdown-wrapper {\n\t\tmin-width: calc(<<typeLength>>ch + 4em);\n\t}\n\n\t.tc-type-selector-dropdown-wrapper input.tc-edit-typeeditor {\n\t\tmin-width: <<typeLength>>ch;\n\t}\n\n</$set>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\ninput[type=\"search\"] {\n\toutline-offset: initial;\n}\n\nhtml button {\n\tline-height: 1.2;\n\tcolor: <<colour button-foreground>>;\n\tfill: <<colour button-foreground>>;\n\tbackground: <<colour button-background>>;\n\tborder-color: <<colour button-border>>;\n}\n\nbutton:disabled svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml, body {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour page-background>>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tword-wrap: break-word;\n\t<<custom-background-datauri>>\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tfill: <<colour foreground>>;\n}\n\n<<if-background-attachment \"\"\"\n\nbody.tc-body {\n\tbackground-color: transparent;\n}\n\n\"\"\">>\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n\tfont-size: 2em;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n\tquotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\";\n}\n\nblockquote > div {\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\nblockquote.tc-big-quote {\n\tfont-family: Georgia, serif;\n\tposition: relative;\n\tbackground: <<colour pre-background>>;\n\tborder-left: none;\n\tmargin-left: 50px;\n\tmargin-right: 50px;\n\tpadding: 10px;\n\tborder-radius: 8px;\n}\n\nblockquote.tc-big-quote cite:before {\n\tcontent: \"\\2014 \\2009\";\n}\n\nblockquote.tc-big-quote:before {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: open-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n\tleft: -50px;\n\ttop: 42px;\n}\n\nblockquote.tc-big-quote:after {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: close-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n\tright: -80px;\n\tbottom: -20px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\nbutton, textarea, input, select {\n\toutline-color: <<colour primary>>;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <<colour foreground>>;\n\tbackground: <<colour background>>;\n}\n\ninput[type=\"checkbox\"] {\n\tvertical-align: middle;\n}\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-results-button,\ninput[type=\"search\"]::-webkit-search-results-decoration {\n\t-webkit-appearance:none;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\n}\n\n.tc-icon-wrapper > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\nkbd {\n\tdisplay: inline-block;\n\tpadding: 3px 5px;\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tcolor: <<colour foreground>>;\n\tvertical-align: middle;\n\tbackground-color: <<colour background>>;\n\tborder: solid 1px <<colour muted-foreground>>;\n\tborder-bottom-color: <<colour muted-foreground>>;\n\tborder-radius: 3px;\n\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\n}\n\n::selection {\n\tbackground-color: Highlight;\n\tcolor: HighlightText;\n\tbackground-color: <<colour selection-background>>;\n\tcolor: <<colour selection-foreground>>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\t/* next 2 elements needed, since normalize 8.0.1 */\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n:root {\n\tcolor-scheme: {{{ [{$:/palette}get[color-scheme]] }}};\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: 500;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n.tc-drop-down a.tc-tiddlylink:hover {\n\tcolor: <<colour tiddler-link-background>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\ttop: -1000px;\n\tleft: -1000px;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tc-page-container > .tc-dropzone {\n\tmin-height: 100vh;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"<<lingo DropMessage>>\";\n}\n\n.tc-droppable > .tc-droppable-placeholder {\n\tdisplay: none;\n}\n\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\n\tdisplay: block;\n\tborder: 2px dashed <<colour dropzone-background>>;\n}\n\n.tc-draggable {\n\tcursor: move;\n}\n\n.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,\n.tc-links-draggable-list .tc-droppable-placeholder {\n\tline-height: 2em;\n\theight: 2em;\n}\n\n.tc-sidebar-tab-open-item {\n\tposition: relative;\n}\n\n.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {\n\tfont-size: 0.7em;\n\tfill: <<colour muted-foreground>>;\n}\n\n/*\n** Plugin reload warning\n*/\n\n.tc-plugin-reload-warning {\n\tz-index: 1000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour alert-background>>;\n\ttext-align: center;\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img, label svg, label img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\tcursor: pointer;\n\tcolor: <<colour foreground>>;\n\tfill: <<colour foreground>>;\n}\n\nbutton:disabled.tc-btn-invisible {\n\tcursor: default; \n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-btn-boxed {\n\tfont-size: 0.6em;\n\tpadding: 0.2em;\n\tmargin: 1px;\n\tbackground: none;\n\tborder: 1px solid <<colour tiddler-controls-foreground>>;\n\tborder-radius: 0.25em;\n}\n\nhtml body.tc-body .tc-btn-boxed svg {\n\tfont-size: 1.6666em;\n}\n\n.tc-btn-boxed:hover {\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n}\n\nhtml body.tc-body .tc-btn-boxed:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded {\n\tfont-size: 0.5em;\n\tline-height: 2;\n\tpadding: 0em 0.3em 0.2em 0.4em;\n\tmargin: 1px;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n\tborder-radius: 2em;\n}\n\nhtml body.tc-body .tc-btn-rounded svg {\n\tfont-size: 1.6666em;\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded:hover {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tcolor: <<colour muted-foreground>>;\n}\n\nhtml body.tc-body .tc-btn-rounded:hover svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n\n.tc-btn-text {\n\tmargin-left: 7px;\n}\n\n/* used for documentation \"fake\" buttons */\n.tc-btn-standard {\n\tline-height: 1.8;\n\tcolor: #667;\n\tbackground-color: #e0e0e0;\n\tborder: 1px solid #888;\n\tpadding: 2px 1px 2px 1px;\n\tmargin: 1px 4px 1px 4px;\n}\n\n.tc-btn-big-green {\n\tdisplay: inline-block;\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tborder-radius: 2px;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n\ttext-decoration: none;\n}\n\n.tc-btn-big-green svg,\n.tc-btn-big-green img {\n\theight: 2em;\n\twidth: 2em;\n\tvertical-align: middle;\n\tfill: <<colour download-foreground>>;\n}\n\n.tc-primary-btn {\n\tbackground: <<colour primary>>;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <<colour sidebar-button-foreground>>;\n\tfill: <<colour sidebar-button-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\n.tc-sidebar-lists button small {\n\tcolor: <<colour foreground>>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n\twidth: calc(100% + 2px);\n\tmargin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <<colour tiddler-info-background>>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n\tborder-top: 2px solid <<colour tiddler-info-border>>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n\ttop: 6px;\n\tbottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t\twidth: calc(100% + 59px);\n\t}\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t\tfont-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-tags-wrapper .tc-tag-list-item {\n\tmargin-right: 7px;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\n.tc-block-tags-dropdown > .tc-btn-invisible:hover {\n\tbackground-color: <<colour primary>>;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 400;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\tborder-radius: 1em;\n}\n\n.tc-sidebar-scrollable .tc-tag-label {\n\ttext-shadow: none;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <<colour tab-divider>>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tmargin-right: 3px;\n\tmargin-bottom: 1px;\n\tvertical-align: bottom;\n}\n\n.tc-edit-tags button.tc-remove-tag-button svg {\n\tfont-size: 0.7em;\n\tvertical-align: middle;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\nbutton.tc-btn-invisible.tc-remove-tag-button {\n\toutline: none;\n}\n\n.tc-tag-button-selected,\n.tc-list-item-selected a.tc-tiddlylink, a.tc-list-item-selected {\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour tiddler-background>>;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-topbar-right {\n\t\tright: 10px;\n\t}\n\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-show-sidebar-btn svg.tc-image-chevron-left, .tc-hide-sidebar-btn svg.tc-image-chevron-right {\n\t\ttransform: rotate(-90deg);\n\t}\n\n}\n\n.tc-sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls .tc-drop-down {\n\tfont-size: 1rem;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-sidebar-lists .tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\ttransition: min-height {{$:/config/AnimationDuration}}ms ease-in-out, padding-top {{$:/config/AnimationDuration}}ms ease-in-out, padding-bottom {{$:/config/AnimationDuration}}ms ease-in-out;\n\t}\n\t\n\t<<if-no-sidebar \"\"\"\n\n\t\t.tc-sidebar-header {\n\t\t\tmin-height: 0;\n\t\t\tpadding-top: 0;\n\t\t\tpadding-bottom: 0;\n\t\t}\n\n\t\"\"\">>\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\thtml[dir=\"rtl\"] .tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-story-river {\n\t\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\n\t}\n\n\">>\n\n\t.tc-story-river.tc-static-story-river {\n\t\tmargin-right: 0;\n\t\tpadding-right: 42px;\n\t}\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 0;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\toverflow: hidden;\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-tiddler-info {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t\tmargin-bottom: .5em;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\">>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.35em;\n\tcolor: <<colour tiddler-title-foreground>>;\n\tmargin: 0;\n}\n\n.tc-site-title {\n\tcolor: <<colour site-title-foreground>>;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n\tmargin-right: .1em;\n}\n\n.tc-system-title-prefix {\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tc-subtitle .tc-tiddlylink {\n\tmargin-right: .3em;\n}\n\n.tc-tiddler-missing .tc-title {\n\tfont-style: italic;\n\tfont-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button,\n.tc-tiddler-controls > span > span > button,\n.tc-tiddler-controls > span > span > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\n.tc-search button svg, .tc-search a svg {\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\n\theight: 0.75em;\n}\n\n.tc-search button svg, .tc-search a svg {\n\theight: 1.2em;\n\twidth: 1.2em;\n\tmargin: 0 0.25em;\n}\n\n.tc-tiddler-controls button.tc-selected svg,\n.tc-page-controls button.tc-selected svg {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame .tc-edit-texteditor {\n\twidth: 100%;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor,\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-editor-background>>;\n}\n\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-background>>;\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <<colour alert-background>>;\n\tborder: 1px solid <<colour alert-border>>;\n}\n\ncanvas.tc-edit-bitmapeditor {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <<colour tiddler-background>>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Editor\n*/\n\n.tc-editor-toolbar {\n\tmargin-top: 8px;\n}\n\n.tc-editor-toolbar button {\n\tvertical-align: middle;\n\tbackground-color: <<colour tiddler-controls-foreground>>;\n\tcolor: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n\tborder-radius: 4px;\n\tpadding: 3px;\n\tmargin: 2px 0 2px 4px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\n\tmargin-left: 1px;\n\twidth: 1em;\n\tborder-radius: 8px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\n\tmargin-left: 11px;\n}\n\n.tc-editor-toolbar button.tc-selected {\n\tbackground-color: <<colour primary>>;\n}\n\n.tc-editor-toolbar button svg {\n\twidth: 1.6em;\n\theight: 1.2em;\n}\n\n.tc-editor-toolbar button:hover {\n\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour background>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\n\twhite-space: normal;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\n\tdisplay: inline-block;\n\tpadding: 3px;\n\twidth: auto;\n}\n\n.tc-editor-toolbar .tc-search-results {\n\tpadding: 0;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n<<if-fluid-fixed text:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 0;\n\t\tposition: relative;\n\t\twidth: auto;\n\t\tleft: 0;\n\t\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 42px);\n\t}\n\n\"\"\" hiddenSidebarText:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 3em;\n\t\tmargin-right: 0;\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 84px);\n\t}\n\n\"\"\">>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n\tfill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n\tfill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n\tfill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n\tfill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n\tfill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n\tfill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n\tfill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n\tfill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n\tfill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-type-selector .tc-edit-typeeditor {\n\twidth: auto;\n}\n\n.tc-type-selector-dropdown-wrapper {\n\tdisplay: inline-block;\n}\n\n<<set-type-selector-min-width>>\n\n.tc-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-add-tag .tc-keyboard {\n\tdisplay:inline;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 49%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 0 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n<<if-editor-height-fixed then:\"\"\"\n\n.tc-tiddler-preview-preview {\n\toverflow-y: scroll;\n\theight: {{$:/config/TextEditor/EditorHeight/Height}};\n}\n\n\"\"\">>\n\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\n\twidth: 49%;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\n\tmax-width: 49%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n.tc-edit-fields.tc-edit-fields-small {\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n}\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name-wrapper input.tc-edit-texteditor {\n\twidth: auto;\n}\n\n.tc-edit-field-add-name-wrapper {\n\tdisplay: inline-block;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-edit-field-add-value {\n\t\twidth: 35%;\n\t}\n\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n\n/*\n** Tiddler editor dropzone\n*/\n\n.tc-dropzone-editor {\n\tposition:relative;\n}\n\n.tc-dropzone-editor.tc-dragover .tc-editor-toolbar::after{\n\tz-index: 10000;\n\ttop:0;\n\tleft:0;\n\tright:0;\n\theight: 100%;\n\tbackground: <<colour dropzone-background>>;\n\tcontent: \"<<lingo DropMessage>>\";\n\tpointer-events: none;\n\tposition: absolute;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tbackground-color: <<color background>>;\n\tborder: 4px dashed <<color modal-border>>;\n\tfont-weight: 600;\n\tfont-size: 150%;\n\topacity: 0.8;\n\tcolor: <<color foreground>>;\n}\n\n.tc-editor-importpopup {\n\twidth: 100%;\n\theight: 100%;\n}\n\n.tc-editor-import {\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\tbackground: <<color pre-background>>;\n\tbox-shadow: 2px 2px 10px <<colour foreground>>;\n\tpadding: 10px;\n\twidth: 96%;\n\tborder: 1px solid <<color tiddler-controls-foreground>>;\n\ttext-align:center;\n}\n\n.tc-editor-import img {\n\tmax-height: 500px;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-viewswitcher .tc-image-button {\n\tmargin-right: .3em;\n}\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-storyview-zoomin-tiddler {\n\t\twidth: calc(100% - 84px);\n\t}\n\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down button:disabled svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-drop-down .tc-drop-down-info {\n\tpadding-left: 14px;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <<colour foreground>>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\n\tdisplay: inline-block;\n\twidth: auto;\n\tmargin-bottom: 0px;\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item-plain,\n.tc-block-dropdown .tc-dropdown-item-plain {\n\tpadding: 4px 14px 4px 7px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a.tc-tiddlylink:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n\tpadding: 0 7px 0 7px;\n}\n\n.tc-image-chooser, .tc-colour-chooser {\n\twhite-space: normal;\n}\n\n.tc-image-chooser a,\n.tc-colour-chooser a {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: center;\n\tposition: relative;\n}\n\n.tc-image-chooser a {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 2px;\n\tmargin: 2px;\n\twidth: 4em;\n\theight: 4em;\n}\n\n.tc-colour-chooser a {\n\tpadding: 3px;\n\twidth: 2em;\n\theight: 2em;\n\tvertical-align: middle;\n}\n\n.tc-image-chooser a:hover,\n.tc-colour-chooser a:hover {\n\tbackground: <<colour primary>>;\n\tpadding: 0px;\n\tborder: 3px solid <<colour primary>>;\n}\n\n.tc-image-chooser a svg,\n.tc-image-chooser a img {\n\tdisplay: inline-block;\n\twidth: auto;\n\theight: auto;\n\tmax-width: 3.5em;\n\tmax-height: 3.5em;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmargin: auto;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 900;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n\n/*\n** Centered modals\n*/\n.tc-modal-centered .tc-modal {\n\twidth: auto;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%) !important;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-right: 1px solid <<colour tab-background-selected>>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tc-tab-divider.tc-vertical {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n\toverflow: auto;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Manager\n*/\n\n.tc-manager-wrapper {\n\t\n}\n\n.tc-manager-controls {\n\t\n}\n\n.tc-manager-control {\n\tmargin: 0.5em 0;\n}\n\n.tc-manager-list {\n\twidth: 100%;\n\tborder-top: 1px solid <<colour muted-foreground>>;\n\tborder-left: 1px solid <<colour muted-foreground>>;\n\tborder-right: 1px solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item {\n\n}\n\n.tc-manager-list-item-heading {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: left;\n\tborder-bottom: 1px solid <<colour muted-foreground>>;\n\tpadding: 3px;\n}\n\n.tc-manager-list-item-heading-selected {\n\tfont-weight: bold;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n\tbackground-color: <<colour foreground>>;\n}\n\n.tc-manager-list-item-heading:hover {\n\tbackground: <<colour primary>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-manager-list-item-content {\n\tdisplay: flex;\n}\n\n.tc-manager-list-item-content-sidebar {\n\tflex: 1 0;\n\tbackground: <<colour tiddler-editor-background>>;\n\tborder-right: 0.5em solid <<colour muted-foreground>>;\n\tborder-bottom: 0.5em solid <<colour muted-foreground>>;\n\twhite-space: nowrap;\n}\n\n.tc-manager-list-item-content-item-heading {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: left;\n\tbackground: <<colour muted-foreground>>;\n\ttext-transform: uppercase;\n\tfont-size: 0.6em;\n\tfont-weight: bold;\n\tpadding: 0.5em 0 0.5em 0;\n}\n\n.tc-manager-list-item-content-item-body {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-manager-list-item-content-item-body > pre {\n\tmargin: 0.5em 0 0.5em 0;\n\tborder: none;\n\tbackground: inherit;\n}\n\n.tc-manager-list-item-content-tiddler {\n\tflex: 3 1;\n\tborder-left: 0.5em solid <<colour muted-foreground>>;\n\tborder-right: 0.5em solid <<colour muted-foreground>>;\n\tborder-bottom: 0.5em solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item-content-item-body > table {\n\tborder: none;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-manager-list-item-content-item-body > table td {\n\tborder: none;\n}\n\n.tc-manager-icon-editor > button {\n\twidth: 100%;\n}\n\n.tc-manager-icon-editor > button > svg,\n.tc-manager-icon-editor > button > button {\n\twidth: 100%;\n\theight: auto;\n}\n\n/*\n** Import table\n*/\n\n.tc-import-table {\n\twidth: 100%;\n}\n\n.tc-import-table svg.tc-image-edit-button {\n\tmax-width: unset;\n}\n\n.tc-import-table th:first-of-type {\n\twidth: 10%;\n}\n\n.tc-import-table th:last-of-type {\n\twidth: 30%;\n}\n\n.tc-import-table .tc-row-disabled {\n\tbackground: <<colour very-muted-foreground>>10;\n\topacity: 0.8;\n}\n\n.tc-import-table .tc-row-warning {\n\tbackground: <<colour diff-delete-background>>50;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 28px;\n\tleft: 0;\n\tright: 0;\n\tmax-width: 50%;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 14px;\n\tpadding: 7px;\n\tborder: 1px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 7px;\n\tright: 7px;\n\tline-height: 0;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n\tmargin-bottom: 0.5em;\n}\n\n.tc-alert-body > p {\n\tmargin: 0;\n}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-static-alert {\n\t\tposition: relative;\n\t}\n\n\t.tc-static-alert-inner {\n\t\tposition: absolute;\n\t\tz-index: 100;\n\t}\n\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n}\n\n/*\n** Floating drafts list\n*/\n\n.tc-drafts-list {\n\tz-index: 2000;\n\tposition: fixed;\n\tfont-size: 0.8em;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.tc-drafts-list a {\n\tmargin: 0 0.5em;\n\tpadding: 4px 4px;\n\tborder-top-left-radius: 4px;\n\tborder-top-right-radius: 4px;\n\tborder: 1px solid <<colour background>>;\n\tborder-bottom-none;\n\tbackground: <<colour dirty-indicator>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a:hover {\n\ttext-decoration: none;\n\tbackground: <<colour foreground>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a svg {\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: text-bottom;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: flex;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tfill: <<colour muted-foreground>>;\n\tbackground-color: <<colour background>>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\n\talign-items: center;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info {\n\tmargin: 0.5em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugin-indicator {\n\tmargin: -16px 1em 0 2em;\n}\n\n.tc-plugin-info-sub-plugin-indicator button {\n\tcolor: <<colour background>>;\n\tbackground: <<colour foreground>>;\n\tborder-radius: 8px;\n\tpadding: 2px 7px;\n\tfont-size: 0.75em;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info-dropdown {\n\tmargin-left: 1em;\n\tmargin-right: 1em;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour foreground>>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\n\tfill: <<colour background>>;\n}\n\n.tc-plugin-info-chunk {\n\tmargin: 2px;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description {\n\tflex-grow: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-buttons {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\ttext-align: right;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h1 {\n\tfont-size: 1em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h2 {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description div {\n\tfont-size: 0.7em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle img, .tc-plugin-info-chunk.tc-plugin-info-toggle svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon img, .tc-plugin-info-chunk.tc-plugin-info-icon svg {\n\twidth: 2em;\n\theight: 2em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tmargin-top: -8px;\n}\n\n.tc-plugin-info-dropdown-message {\n\tbackground: <<colour message-background>>;\n\tpadding: 0.5em 1em 0.5em 1em;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n}\n\n.tc-plugin-info-dropdown-body {\n\tpadding: 1em 1em 0 1em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugins {\n\tpadding: 0.5em;\n\tmargin: 0 1em 1em 1em;\n\tbackground: <<colour notification-background>>;\n}\n\n.tc-install-plugin {\n\tfont-weight: bold;\n\tbackground: green;\n\tcolor: white;\n\tfill: white;\n\tborder-radius: 4px;\n\tpadding: 3px;\n}\n\n.tc-install-plugin.tc-reinstall-downgrade {\n\tbackground: red;\n}\n\n.tc-install-plugin.tc-reinstall {\n\tbackground: blue;\n}\n\n.tc-install-plugin.tc-reinstall-upgrade {\n\tbackground: orange;\n}\n\n.tc-check-list {\n\tline-height: 2em;\n}\n\n.tc-check-list .tc-image-button {\n\theight: 1.5em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n.tc-message-box svg {\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: text-bottom;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder-right: 1px solid <<colour table-header-background>>;\n\tborder-left: 1px solid <<colour table-header-background>>;\n}\n\n\n.tc-chooser-item {\n\tborder-bottom: 1px solid <<colour table-header-background>>;\n\tborder-top: 1px solid <<colour table-header-background>>;\n\tpadding: 2px 4px 2px 14px;\n}\n\n.tc-drop-down .tc-chooser-item {\n\tpadding: 2px;\n}\n\n.tc-chosen,\n.tc-chooser-item:hover {\n\tbackground-color: <<colour table-header-background>>;\n\tborder-color: <<colour table-footer-background>>;\n}\n\n.tc-chosen .tc-tiddlylink {\n\tcursor:default;\n}\n\n.tc-chooser-item .tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tbackground-color: transparent;\n}\n\n.tc-chooser-item:hover .tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-chosen .tc-tiddlylink,\n.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-chosen > .tc-tiddlylink:before {\n\tmargin-left: -10px;\n\tposition: relative;\n\tcontent: \"» \";\n}\n\n.tc-chooser-item svg,\n.tc-chooser-item img{\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: middle;\n}\n\n.tc-language-chooser .tc-image-button img {\n\twidth: 2em;\n\tvertical-align: -0.15em;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 0.4em;\n\tborder: 1px solid #888;\n}\n\ninput.tc-palette-manager-colour-input {\n\twidth: 100%;\n\tpadding: 0;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-background>>;\n\tborder-bottom: 1px solid <<colour tab-background>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour background>>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <<colour dirty-indicator>>;\n\tcolor: <<colour dirty-indicator>>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n::-webkit-file-upload-button {\n\tcursor:pointer;\n}\n\n/*\n** Thumbnail macros\n*/\n\n.tc-thumbnail-wrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin: 6px;\n\tvertical-align: top;\n}\n\n.tc-thumbnail-right-wrapper {\n\tfloat:right;\n\tmargin: 0.5em 0 0.5em 0.5em;\n}\n\n.tc-thumbnail-image {\n\ttext-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n\tmin-width: 100%;\n\tmin-height: 100%;\n\tmax-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<<filter \"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\">>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<<filter \"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\">>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** Diffs\n*/\n\n.tc-diff-equal {\n\tbackground-color: <<colour diff-equal-background>>;\n\tcolor: <<colour diff-equal-foreground>>;\n}\n\n.tc-diff-insert {\n\tbackground-color: <<colour diff-insert-background>>;\n\tcolor: <<colour diff-insert-foreground>>;\n}\n\n.tc-diff-delete {\n\tbackground-color: <<colour diff-delete-background>>;\n\tcolor: <<colour diff-delete-foreground>>;\n}\n\n.tc-diff-invisible {\n\tbackground-color: <<colour diff-invisible-background>>;\n\tcolor: <<colour diff-invisible-foreground>>;\n}\n\n.tc-diff-tiddlers th {\n\ttext-align: right;\n\tbackground: <<colour background>>;\n\tfont-weight: normal;\n\tfont-style: italic;\n}\n\n.tc-diff-tiddlers pre {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: none;\n\tbackground: none;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n\n/*\n** Tree macro\n*/\n\n.tc-tree div {\n\tpadding-left: 14px;\n}\n\n.tc-tree ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n\tmargin-top: 0;\n}\n\n.tc-tree ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-tree button {\n\tcolor: #acacac;\n}\n\n.tc-tree svg {\n\tfill: #acacac;\n}\n\n.tc-tree span svg {\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: baseline;\n}\n\n.tc-tree li span {\n\tcolor: lightgray;\n}\n\nselect {\n\tcolor: <<colour select-tag-foreground>>;\n\tbackground: <<colour select-tag-background>>;\n}\n\n/*\n** Utility classes for SVG icons\n*/\n\n.tc-fill-background {\n\tfill: <<colour background>>;\n}\n\n/*\n** Flexbox utility classes\n*/\n\n.tc-flex {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-flex-column {\n\tflex-direction: column;\n}\n\n.tc-flex-row {\n\tflex-direction: row;\n}\n\n.tc-flex-grow-1 {\n\tflex-grow: 1;\n}\n\n.tc-flex-grow-2 {\n\tflex-grow: 2;\n}\n\n/*\n** Other utility classes\n*/\n\n.tc-tiny-gap {\n\tmargin-left: .25em;\n\tmargin-right: .25em;\n}\n\n.tc-tiny-gap-left {\n\tmargin-left: .25em;\n}\n\n.tc-tiny-gap-right {\n\tmargin-right: .25em;\n}\n\n.tc-small-gap {\n\tmargin-left: .5em;\n\tmargin-right: .5em;\n}\n\n.tc-small-gap-left {\n\tmargin-left: .5em;\n}\n\n.tc-small-gap-right {\n\tmargin-right: .5em;\n}\n\n.tc-big-gap {\n\tmargin-left: 1em;\n\tmargin-right: 1em;\n}\n\n.tc-big-gap-left {\n\tmargin-left: 1em;\n}\n\n.tc-big-gap-right {\n\tmargin-right: 1em;\n}\n\n.tc-word-break {\n\tword-break: break-all;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize",
"text": "15px"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight",
"text": "22px"
},
"$:/themes/tiddlywiki/vanilla/metrics/fontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize",
"text": "14px"
},
"$:/themes/tiddlywiki/vanilla/metrics/lineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight",
"text": "20px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyleft": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storytop": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storytop",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyright": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyright",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storywidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth",
"text": "686px"
},
"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint",
"text": "960px"
},
"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth",
"text": "350px"
},
"$:/themes/tiddlywiki/vanilla/options/stickytitles": {
"title": "$:/themes/tiddlywiki/vanilla/options/stickytitles",
"text": "no"
},
"$:/themes/tiddlywiki/vanilla/options/sidebarlayout": {
"title": "$:/themes/tiddlywiki/vanilla/options/sidebarlayout",
"text": "fixed-fluid"
},
"$:/themes/tiddlywiki/vanilla/options/codewrapping": {
"title": "$:/themes/tiddlywiki/vanilla/options/codewrapping",
"text": "pre-wrap"
},
"$:/themes/tiddlywiki/vanilla/reset": {
"title": "$:/themes/tiddlywiki/vanilla/reset",
"type": "text/plain",
"text": "/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n/*\nDocument\n========\n*/\n\n/**\nUse a better box model (opinionated).\n*/\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n/**\nUse a more readable tab size (opinionated).\n*/\n\n:root {\n -moz-tab-size: 4;\n tab-size: 4;\n}\n\n/**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/*\nSections\n========\n*/\n\n/**\nRemove the margin in all browsers.\n*/\n\nbody {\n margin: 0;\n}\n\n/**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\nbody {\n font-family:\n system-ui,\n -apple-system, /* Firefox supports this but not yet `system-ui` */\n 'Segoe UI',\n Roboto,\n Helvetica,\n Arial,\n sans-serif,\n 'Apple Color Emoji',\n 'Segoe UI Emoji';\n}\n\n/*\nGrouping content\n================\n*/\n\n/**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n}\n\n/*\nText-level semantics\n====================\n*/\n\n/**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr[title] {\n text-decoration: underline dotted;\n}\n\n/**\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Consolas,\n 'Liberation Mono',\n Menlo,\n monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\nTabular data\n============\n*/\n\n/**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n}\n\n/*\nForms\n=====\n*/\n\n/**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\nCorrect the inability to style clickable types in iOS and Safari.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button;\n}\n\n/**\nRemove the inner border and padding in Firefox.\n*/\n\n::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\nRestore the focus styles unset by the previous rule.\n*/\n\n:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\nlegend {\n padding: 0;\n}\n\n/**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nInteractive\n===========\n*/\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
"title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
"text": "system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\""
},
"$:/themes/tiddlywiki/vanilla/settings/codefontfamily": {
"title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily",
"text": "\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,Courier,monospace"
},
"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment": {
"title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment",
"text": "fixed"
},
"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize": {
"title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize",
"text": "auto"
},
"$:/themes/tiddlywiki/vanilla/sticky": {
"title": "$:/themes/tiddlywiki/vanilla/sticky",
"text": "<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tbackground: ``<<colour tiddler-background>>``;\n\tz-index: 500;\n}\n\n``\n<$list filter=\"[range[100]]\">\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`<$text text=<<currentTiddler>>/>`) {\nz-index: `<$text text={{{ [[200]subtract<currentTiddler>] }}}/>`;\n}\n`\n</$list>\n</$reveal>\n"
},
"$:/themes/tiddlywiki/vanilla/themetweaks": {
"title": "$:/themes/tiddlywiki/vanilla/themetweaks",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ThemeTweaks/ThemeTweaks}}",
"text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n\\define backgroundimage-dropdown()\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"\n\t$value=<<imageTitle>>\n/>\n\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n<option value=\"scroll\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\n<option value=\"fixed\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\"><<lingo Settings/BackgroundImageSize/Auto>></option>\n<option value=\"cover\"><<lingo Settings/BackgroundImageSize/Cover>></option>\n<option value=\"contain\"><<lingo Settings/BackgroundImageSize/Contain>></option>\n</$select>\n\\end\n\n<<lingo ThemeTweaks/Hint>>\n\n! <<lingo Options>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">{{$:/language/No}}</option><option value=\"yes\">{{$:/language/Yes}}</option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><option value=\"pre\">{{$:/language/No}}</option><option value=\"pre-wrap\">{{$:/language/Yes}}</option></$select> |\n\n! <<lingo Settings>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\n\n! <<lingo Metrics>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n"
}
}
}
TiddlyWiki 是一个令人难以置信的灵活和多元化的工具,以与大多数软件不同的方式构思与建构。这使其难以理解,直到它点击的那一刻,并成为您大脑的一个无缝延伸。
从基础知识开始,TiddlyWiki 是一个笔记式网页应用程序,您可以自由下载、存放于任何您喜欢的地方及所期望的定制。以其他文字处理和笔记工具无法作到的方式,使用它来截取、整理和分享您的笔记。
~TiddlyWiki 被设计为以故事、标签、超链接和其他功能的线性、结构式内容。您可以符合您个人的思维模式,而非觉得是链接到一个默认的整理结构方式,整理和检索您的笔记。
您可以将 ~TiddlyWiki 当作单一文件使用,经由任何网页浏览器在线或脱机查看和编辑。或者可以将其当作强大的 [[Node.js 应用程序|TiddlyWiki on Node.js]]来使用,将您的每个笔记存放为个别的文件。
如何让 ~TiddlyWiki 为您工作?我们建议您从下列的介绍文档开始,然后浏览侧栏中的[[目录|TableOfContents]]选项卡。或是[[按照我们的简介|GettingStarted]]和亲自尝试!
<<list-links "[tag[HelloThere]]">>
另请参阅:
* [["Grok TiddlyWiki" by Soren Bjornstad]]
* [[Francis Meetze 的 TiddlyWiki 教学视频|TiddlyWiki Video Tutorials by Francis Meetze]]
!! 制作 Tiddlywiki 的信息
<$macrocall
$name="toc-tabbed-internal-nav"
tag="About"
selectedTiddler="$:/state/toc/SelectedAbout"
unselectedText="<p>选择目录中的一个主题,点击箭头可展开主题。</p>"
missingText="<p>佚失条目。</p>"
/>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "abs">>
<<.operator-example 1 "[[-2000]abs[]]">>
<<.operator-example 2 "=-1 =-2 =3 =4 =5 +[abs[]]">>
[[筛选器|Filters]] step 的输出取决于其[[运算符|Filter Operators]]:
* 大多数运算符运行其<<.def 相对的>>输入。他们依次检查每个输入的条目名称,并过滤掉任何不匹配的。这些 steps 将逐步缩小 run 的输出。
* <<.def 绝对>>运算符忽略他们的输入,并生成独立的输出。
绝对运算符的一个好例子是 <<.olink title>>。`[title[A]title[B]]` 的输出只是 <<.tid B>>。但是 <<.olink field>> 运算符是相对的,所以 `[title[A]field:title[B]` 没有任何输出。
集成 [[Ace editor|https://github.com/ajaxorg/ace]] 为 TiddlyWiki 插件。
{{!!url}}
<<<
Being quite new to TW5 development I tried my best to draft a SyncAdaptor to store tiddlers in IndexedDb. This is quite useful if an application / plugin installation is not possible (we have quite some restrictions at work...).
<<<
TiddlyWiki 不可能没有 TiddlyWiki 社区的持续支持。他们的关注和回馈让我们从产品了解什么是他们想要的,以及他们的热情告诉我,这是值得的投资。
{{$:/Acknowledgements}}
! 简介
<<.from-version "5.1.23">>''action-confirm'' 小工具是一个[[动作小工具|ActionWidgets]] 提示用户进行确认,并仅在用户确认时,调用其中包含的其他操作小工具。ActionWidgets 用于触发小工具,如 ButtonWidget。
! 内容与属性
''action-confirm'' 小工具是不可见的。只有在用户确认操作,或由 `$prompt` 属性禁用该确认时,其任何内容才被处理。
|!属性 |!说明 |
|$message |请求确认时向用户显示的可选消息。|
|$prompt |可选标志,设置为 "no" 以禁用确认提示。默认值为 "yes" |
! 示例
以下是一个按钮的示例,该按钮在删除当前条目的标题和标签字段之前,会询问用户进行确认:
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-confirm $message="是否要删除标题和标签?">
<$action-deletefield caption tags/>
Delete "caption" and "tags"
</$action-confirm>
</$button>'/>
以下是一个按钮的示例,该按钮使用可选的 `$prompt` 属性来控制,在删除 HelloThere 条目的 <<.field text>> 字段之前是否提示用户:
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-confirm $message="是否要删除文本字段?" $prompt={{$:/state/promptUser}}>
<$action-deletefield $tiddler="HelloThere" $field="text"/>
</$action-confirm>
Delete text from ~HelloThere
</$button>'/>
! 简介
''action-createtiddler'' 小工具是一个创建新条目的[[动作小工具|ActionWidgets]]。[[动作小工具|ActionWidgets]]用于触发的小工具中,例如 ButtonWidget。
与 [[tm-new-tiddler 消息|WidgetMessage: tm-new-tiddler]]有一些区别:
* 新的条目不会自动显示在[[故事河|StoryRiver]]
* 新条目的名称可供后续操作
! 内容与属性
''action-createtiddler'' 小工具是看不见的。
<<.from-version "5.1.24">> 在使用变量 `createTiddler-title` 和 `createTiddler-draftTitle`中的条目名称,创建新的条目之后,运行 ''action-createtiddler'' 小工具中包含的操作小工具。
|!属性 |!说明 |
|$basetitle |将尝试的初始名称。如果已经存在使用该名称的条目,则一个数值的计数被添加至名称中,并递增直到它是唯一的 |
|$savetitle |//(已弃用 - 见下文))// 一个文本参考用于标识一个字段或索引于其创建后,将被保存的新条目的名称 |
|$savedrafttitle |//(已弃用 - 见下文))// <<.from-version "5.1.20">> 一个标识字段或索引的文本参考,在创建之后,将与新创建的条目关联的草稿名称,存放到该字段或索引中。当使用一系列动作小工具来创建新的条目,将其置于编辑模式,并将其放置在其父标签清单中时,非常有用。|
|$timestamp |指定目标条目的时间戳记是否被更新 (新创建条目的 ''modified'' 和 ''modifier'',以及 ''created'' 和 ''creator'')。可为 "yes" (默认) 或 "no" |
|$template |<<.from-version "5.1.22">> 模板条目的名称,用于创建新的条目 |
|$overwrite |<<.from-version "5.1.22">> 若设置为 "yes",其将覆盖现有的条目。 ''请小心!'' |
|//{任何不以 $ 开头的属性}// |每个属性名称指定创建一个字段在新的条目 |
请注意,不再需要属性 `$savetitle` 和 `$savedrafttitle`。取而代之,任何需要使用新创建的条目名称的动作小工具,应该包含在 ''action-createtiddler'' 的小工具中,并引用变量 `createTiddler-title` 和 `createTiddler-draftTitle` 以取得标题。
! 示例
<<<
<$macrocall $name='wikitext-example-without-html' src={{ActionCreateTiddlerWidget Example}}/>
<<<
----
<<<
<$transclude tiddler="ActionCreateTiddlerWidget Example 1" mode=block/>
<<<
---
<<<
{{ActionCreateTiddlerWidget Example 2}}
<<<
---
<<<
{{ActionCreateTiddlerWidget Example 3}}
<<<
---
<<<
{{ActionCreateTiddlerWidget Example 4}}
<<<
新按钮的标题︰ <$edit-text tiddler="$:/state/new-button-caption" tag="input" default=""/>
<$button>
<$action-createtiddler $basetitle="Homemade Button" tags="$:/tags/PageControls" text={{$:/state/new-button-caption}}>
<$action-navigate $to=<<createTiddler-title>>/>
</$action-createtiddler>创建无功能的页面控制按钮,并打开条目
</$button>
\define testCreate()
<$action-createtiddler />
\end
此示例将创建 "{{$:/language/DefaultNewTiddlerTitle}}"、"{{$:/language/DefaultNewTiddlerTitle}} 1"、"{{$:/language/DefaultNewTiddlerTitle}} 2" 等等
```
\define testCreate()
<$action-createtiddler />
\end
<$button actions=<<testCreate>> >
创建条目
</$button>
```
<$button actions=<<testCreate>> >
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/>
创建条目
</$button> - 点击此按钮,还将打开右侧边栏:"最近"选项卡
\define testCreate()
<$action-createtiddler $basetitle={{$:/language/DefaultNewTiddlerTitle}} $overwrite="yes"/>
\end
此示例将使用定义于 [[$:/language/DefaultNewTiddlerTitle]] 的基标题。
如果按钮被点击数次,它会覆盖该条目。
```
\define testCreate()
<$action-createtiddler $basetitle={{$:/language/DefaultNewTiddlerTitle}} $overwrite="yes"/>
\end
<$button actions=<<testCreate>> >
创建条目
</$button>
```
<$button actions=<<testCreate>> >
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/>
创建条目
</$button> - 点击此按钮,还将打开右侧边栏:"最近"选项卡
\define testCreate()
<$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template"/>
\end
此示例使用一个基标题和一个模板:[[ActionCreateTiddlerWidget Template]]
其将创建:"base", "base 1", "base 2" 等等
```
\define testCreate()
<$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template"/>
\end
<$button actions=<<testCreate>> >
创建条目
</$button>
```
<$button actions=<<testCreate>> >
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/>
创建条目
</$button> - 点击此按钮也将打开右侧边栏:"最近"选项卡
\define testCreate()
<$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template" aa="new field aa" bb="new field bb" />
\end
此示例使用一个基标题 "base" 和一个模板:[[ActionCreateTiddlerWidget Template]]。
还会有新的字段 "aa" 和 "bb" 添加到新条目 。
```
\define testCreate()
<$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template" aa="new field aa" bb="new field bb" />
\end
<$button actions=<<testCreate>> >
创建条目
</$button>
```
<$button actions=<<testCreate>> >
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/>
创建条目
</$button> - 点击此按钮也将打开右侧边栏:"最近"选项卡
这是用于 [[ActionCreateTiddlerWidget Example 3]] 当作模板的条目
! 简介
''action-deletefield'' 小工具是一个删除指定条目字段的 [[action widget|ActionWidgets]]。[[动作小工具|ActionWidgets]]用于触发的小工具中,例如 ButtonWidget。
! 内容与属性
''action-deletefield'' 小工具是看不见的,其内文将被忽略。
|!属性 |!说明 |
|$tiddler |要删除的字段的条目名称 (若未指定则缺省为 <<.vlink currentTiddler>>) |
|$field |可选的欲删除的字段名称 |
|//{其他非以 $ 起始的属性}// |各属性名称指定一个欲删除的字段。属性值会被忽略,且不需要指定 |
! 示例
以下是一个按钮示例,删除当前条目的 caption 和 tags 字段:
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-deletefield caption tags/>
Delete "caption" and "tags"
</$button>'/>
以下是一个按钮示例,删除 HelloThere 条目的 modified 和 tags 字段:
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-deletefield $tiddler="HelloThere" modified tags/>
Delete "modified" and "tags" from ~HelloThere
</$button>'/>
以下是一个按钮示例,使用可选的 $field 属性删除 HelloThere 条目的 text 字段:
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-deletefield $tiddler="HelloThere" $field="text"/>
Delete text from ~HelloThere
</$button>'/>
! 简介
''action-deletetiddler'' 小工具是一个删除条目的 [[action widget|ActionWidgets]]。ActionWidgets 用于触发的小工具中,例如 ButtonWidget。
相较于 [[WidgetMessage: tm-delete-tiddler]],有几个差异:
* 不提示用户确认删除操作
* 不自动更新已开启条目清单
* 不特殊处理草稿条目
! 内容与属性
''action-deletetiddler'' 小工具是看不见的,其内文将被忽略。
|!属性 |!说明 |
|$tiddler |Optional title of the tiddler to be deleted |
|$filter |Optional filter identifying tiddlers to be deleted |
! 示例
以下是一个按钮示例,删除 HelloThere 条目:
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-deletetiddler $tiddler="HelloThere"/>
Delete "~HelloThere"
</$button>'/>
以下是一个按钮示例,删除所有含标签 [[TableOfContents]] 的条目:
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-deletetiddler $filter="[tag[TableOfContents]]"/>
Delete tiddlers tagged "~TableOfContents"
</$button>'/>
\define .operator-rows(filter)
<$list filter="$filter$"><tr>
<td><$link>{{!!caption}}</$link></td>
<td>{{!!op-purpose}} <$list filter="[all[current]tag[Common Operators]]">{{$:/core/images/done-button}}</$list></td>
<td align="center"><$list filter="[all[current]tag[Negatable Operators]]">`!`</$list></td>
</tr></$list>
\end
\define .group-heading(_)
<tr class="doc-table-subheading"><th colspan="3" align="center">$_$</th></tr>
\end
! 简介
''action-listops'' 小工具是一个 [[action widget|ActionWidgets]],用以操纵任何字段或数据索引中的用户清单。ActionWidgets 适用于触发的小工具内, 例如 ButtonWidget。
! 内容与属性
''action-listops'' 小工具是看不见的,其内文将被忽略。
|!属性 |!说明 |
|$tiddler |要修改的清单的条目名称 (默认值为[[当前条目|Current Tiddler]] |
|$list |要当作清单操作的字段名称 (默认值为 'list') |
|$index |可选的,要当作清单操作的一个[[数据条目|DataTiddlers]]索引中的属性索引 |
|$filter |可选的筛选器表达式,其输出将存到被操作的字段/索引 |
|$subfilter |可选的子筛选器表达式,以被操作的清单作为输入,并将更动后的清单回存至被操作的字段/索引 |
|$tags |可选的子筛选器表达式,以目标条目的 'tags' 字段为输入,并将更动后的标签清单回存至其 'tags' 字段 |
! 扩充的筛选器操作符
为了清单的操作,一些[[扩充的筛选器操作符|The Extended Listops Filters]]是必要的。这些操作符主要用于子筛选器表达式中,借以返回的修改过的当前清单取代当前清单。
<table>
<<.group-heading "Listops 操作符">>
<tr>
<th align="left">操作符</th>
<th align="left">目的</th>
<th></th>
</tr>
<<.operator-rows "[tag[Filter Operators]tag[Listops Operators]tag[Order Operators]!tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">>
</table>
! 示例
在这个例子中,我们将填充一个此条目的 (默认) 普通字段 (myfield) 中的清单,然后清除之。
<$macrocall $name='wikitext-example-without-html'
src="""<$button>
<$action-listops $field="myfield" $subfilter="efg hlm pqr"/>
填充 'myfield'
</$button>
<$button>
<$action-listops $field="myfield" $subfilter="abc xyz"/>
追加更多项目
</$button>
<$button>
<$action-listops $field="myfield" $subfilter="-abc -hlm"/>
移除项目
</$button>
<$button>
<$action-listops $field="myfield" $filter="[[]]"/>
清除 'myfield'
</$button>
<$list filter="[list[!!myfield]]">
</$list>"""/>
---
在这个例子中,我们将从此条目 (默认) 的普通 (myfield) 字段的清单追加和删除项目,并对结果清单进行排序。然后删除某些附加的项目,并反向排序结果清单。
<$macrocall $name='wikitext-example-without-html'
src="""<$button>
<$action-listops $field="myfield" $subfilter="-efg ijk xyz [[this is a title]] +[sort[]]"/>
Mangle 清单
</$button>
<$button>
<$action-listops $field="myfield" $subfilter="-xyz -[[this is a title]] +[!sort[]]"/>
Unmangle 清单
</$button>
<$list filter="[list[!!myfield]]">
</$list>"""/>
---
在这个例子中,我们将几个标签追加到此条目的 'tags' 字段 (默认)。然后删除一些附加的标签。
<$macrocall $name='wikitext-example-without-html'
src="""<$button>
<$action-listops $tags="+[append{Days of the Week!!short}] $:/tag1 $:/tag2 $:/tag3"/>
填充 'tags'
</$button>
<$button>
<$action-listops $tags="+[!remove:2{!!tags}]"/>
删除最后两个标签
</$button>
<$button>
<$action-listops $tags="+[!prefix[$:/]]"/>
删除系统标签
</$button>
<$button>
<$action-listops $tags="-Mon -Tue"/>
删除 Mon 和 Tue
</$button>
<$button>
<$action-listops $tags="+[prefix[$:/]] ActionWidgets Widgets"/>
删除用户标签
</$button>
<$button>
<$action-listops $tags="+[[]] ActionWidgets Widgets"/>
清除标签
</$button>
<$list filter="[list[!!tags]]">
</$list>"""/>
! 简介
<<.from-version "5.1.23">> ''action-log'' 小工具是一个[[动作小工具|ActionWidgets]],可用于将调试信息输出到大多数浏览器支持的 [[JavaScript 主控台|Web Developer Tools]]。这可能很有用,否则很难观察一系列操作中发生了什么。
ActionWidgets 用于触发小工具,如 ButtonWidget。
<<.tip """有关操作外部的调试,请参阅 [[LogWidget]]""">>
! 内容和属性
''action-log'' 小工具是不可见的。其中的任何内容将被忽略。
调用该动作时,所有属性的名称和值将记录到 JavaScript 主控台。
此外,还有可选属性可以使用:
|!可选属性 |!说明 |
|$$filter|还将记录匹配此筛选器的所有变量。 |
|$$message |要显示为记录信息的标题的消息。当按顺序使用多个 `action-log` 小工具时,非常有用。 |
|$$all |设置为 "yes" 以记录折叠表中的所有变量。请注意,如果没有指定任何要记录,则始终记录所有变量。 |
<<.tip """一个方便的提示,如果一个动作小工具的行为未如预期,暂时更改为 `<$action-log>` 小工具,如此即可观察属性。""">>
! 示例
下面是记录两个变量的示例:
```
<$action-log myVar=<<myVar>> otherVar=<<otherVar>>/>
```
记录所有变量:
```
<$action-log />
```
记录两个变量以及所有内核变量(以 `tv-` 开始):
```
<$action-log myVar=<<myVar>> other={{!!status}} $$filter="[prefix[tv-]]"/>
```
! 简介
''action-navigate'' 小工具是一个 [[action widget|ActionWidgets]] 传递一个 [[tm-navigate|WidgetMessage: tm-navigate]] 消息回小工具树。ActionWidgets 用于触发的小工具中,例如 ButtonWidget。
! 内容与属性
''action-navigate'' 小工具是看不见的,其内文将被忽略。
|!属性 |!说明 |
|$to |导览的目标条目名称 (若未指定,则默认值为 <<.vlink currentTiddler>> |
|$scroll |可选的参数决定是否该导航也会卷动到目标条目(见下文) |
!! 卷动处理
可选的 `$scroll` 属性可设为 "yes" 强制卷动发生,将目标条目放入查看范围。若设为 "no" 则不会发生卷动。若省略该 `$scroll` 属性,则卷动发生除非:
* CTRL 键被按下
* 用鼠标中键初始化的操作(如果中键可用)
请注意,如果一次导航到多个条目,则对于所有这些条目,您应该使用相同的 `$scroll` 设置。
! 示例
以下是一次导航到两个不同条目的一个按钮示例:
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-navigate $to="ButtonWidget"/>
<$action-navigate $to="ActionWidgets"/>
Click me!
</$button>'/>
! 简介
''action-popup'' 小工具是一个[[动作小工具|ActionWidgets]],触发经由状态条目定义的快显窗口的显示,或清除所有显示的弹出窗口。ActionWidgets 用于触发如 ButtonWidget 的小工具。
! 内容和属性
''action-popup'' 小工具是不可见的。其中的任何内容将被忽略。
|!属性 |!说明 |
|$state |快显窗口的状态条目的名称 |
|$coords |可选的控制快显窗口的定位座标 (格式为 `(x,y,w,h)`) |
|$floating |<<.from-version "5.1.24">> 可选的。默认为 `no`。设置为 `yes` 创建一个必须明确被关闭的快显窗口。 |
<<.from-version "5.1.23">> 如果 ''$coords'' 属性丢失或为空,则取消所有快显窗口。
<<.tip "删除状态条目,以关闭浮动式快显窗口。">>
! 示例
下面是一个按钮示例,在侧边栏的"工具"选项卡中,触发其中的"更多"按钮。您可能需要滚动才能看到快显窗口。
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" $value="$:/core/ui/SideBar/Tools"/>
<$action-popup $state="$:/state/popup/more-2053862905" $coords="(0,20,0,0)"/>
Click me!
</$button>'/>
! 简介
''action-sendmessage'' 小工具是一个 [[action widget|ActionWidgets]] 传递[[消息|Messages]] 回小工具树。ActionWidgets 用于触发的小工具中,例如 ButtonWidget。
! 内容与属性
''action-sendmessage'' 小工具是看不见的,其内文将被忽略。
|!属性 |!说明 |
|$message |要发送的消息 (例如,[[WidgetMessage: tm-new-tiddler]]) |
|$param |其含意取决于要发送的消息的可选参数字串 |
|$name |可选的附加参数的名称 |
|$value |于 `$name` 指定名称的可选参数的值 |
|//{any attributes not starting with $}// |附加多重记名参数到该消息 |
! 示例
这是一个按钮的示例,显示一个通知和导引,并创建一新的带有标签和内容的条目:
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-sendmessage $message="tm-modal" $param="SampleWizard"/>
<$action-sendmessage $message="tm-notify" $param="SampleNotification"/>
<$action-sendmessage $message="tm-new-tiddler" title="This is newly created tiddler" tags="OneTag [[Another Tag]]" text=<<now "Today is DDth, MMM YYYY">>/>
Click me!
</$button>'/>
! 简介
''action-setfield'' 小工具是一个指定值给条目字段的 [[action widget|ActionWidgets]]。ActionSetFieldWidget 用于触发的小工具中,例如 ButtonWidget。
! 内容与属性
''action-setfield'' 小工具是看不见的,其内文将被忽略。
|!属性 |!说明 |
|$tiddler |要更改的字段的条目名称 (若未指定则缺省为 <<.vlink currentTiddler>>) |
|$field |可选的欲指定 $value 属性的字段名称 |
|$index |可选的欲指定 $value 属性的[[数据条目|DataTiddlers]]里的索引属性 |
|$value |指定给由 $field 或 $index 属性识别的字段或索引的值,若二者皆未指定则该值指定给 text 字段。如果未指定任何值,则 $field 或 $index 将被删除。 |
|$timestamp |指定目标条目的时间戳记 (''modified'' 和 ''modifier'' 以及新创建条目的 ''created'' 和 ''creator'') 是否被更新。可以是 "yes" (缺省) 或 "no" |
|//{其他非以 $ 起始的属性}// |各属性名称与属性的值,分别指定给一个字段与其值 |
! 示例
以下是一对按钮示例,开启控制台直接到指定的页签。他们用 ''action-setfield'' 来设置控制台页签的状态条目。
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-setfield $tiddler="$:/state/tab-1749438307" text="$:/core/ui/ControlPanel/Appearance"/>
<$action-navigate $to="$:/ControlPanel"/>
Go to Control Panel "Appearance" tab
</$button>
<$button>
<$action-setfield $tiddler="$:/state/tab-1749438307" text="$:/core/ui/ControlPanel/Settings"/>
<$action-navigate $to="$:/ControlPanel"/>
Go to Control Panel "Settings" tab
</$button>'/>
以下是一个按钮示例,将标签和字段指定给 HelloThere 条目,然后导航到它并开启条目信息皮肤中的"字段":
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-setfield $tiddler="HelloThere" tags="NewTag [[Another New Tag]]" color="red"/>
<$action-setfield $tiddler="$:/state/popup/tiddler-info--1779055697" text="(568,1443,33,39)"/>
<$action-setfield $tiddler="$:/state/tab--1890574033" text="$:/core/ui/TiddlerInfo/Fields"/>
<$action-navigate $to="HelloThere"/>
Modify ~HelloThere
</$button>'/>
以下是一个按钮示例,将标签和字段指定给 HelloThere 条目,然后启动编辑它:
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-setfield $tiddler="HelloThere" tags="MoreTag [[Further More Tags]]" color="green"/>
<$action-sendmessage $message="tm-edit-tiddler" $param="HelloThere"/>
Edit ~HelloThere
</$button>'/>
以下是一个按钮示例,开启控制台直接到"视觉外观"页签:
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-setfield $tiddler="$:/state/tab-1749438307" $field="text" $value="$:/core/ui/ControlPanel/Appearance"/>
<$action-navigate $to="$:/ControlPanel"/>
Go to Control Panel "Appearance" tab
</$button>'/>
变量 `actionTiddler` 由不同的小工具以微妙不同的方式使用:
* 在 DroppableWidget 的 ''action'' 字符串里,其中 <<.def actionTiddler>> [[变量|Variables]]包含将被放下的条目名称。
* 在 DroppableWidget 的 ''startactions'' 和 ''endactions'' 字符串里,其中 <<.def actionTiddler>> [[变量|Variables]] 包含所有被拖动名称的引用[[名称清单|Title List]]。
动作小工具是一种运行动作的特殊类型的小工具,例如发送消息、导航到一条目,或者更改一条目的值。它们用于与其他小工具协作,以触发这些动作(例如,ButtonWidget)。
动作小工具是看不见的。他们无须是直属于其父层的触发小工具,但它们必须是它的子层。该动作是依序运行的。例如,这里有一个按钮触发发送不同的消息的两个动作:
```
<$button>
<$action-sendmessage $message="tm-home"/>
<$action-sendmessage $message="tm-full-screen"/>
Click me!
</$button>
```
提供了以下的 action 小工具:
<<list-links "[tag[ActionWidgets]]">>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "add">>
<<.operator-example 1 "[[23]add[19]]">>
<<.operator-example 2 "=1 =2 =3 =4 +[add[4]]">>
~TiddlyWiki 中用于创建目录的标准机制,是统称为 "toc" [[宏|Macros]] 的一组宏(点击链接以了解更多宏的相关信息)。他们使用 `Tagging` 作为创建关系的手段,因此如果, `Tagging` 是一个新概念,请务必查看 [[Tagging]] 主题条目。
以下步骤可以添加自定义的[[目录|Table-of-Contents Macros]]到侧边栏︰
# 创建一个名为 [[TableOfContents]] 的条目
# 设其标签为 <<.tag ~$:/tags/SideBar>>
# 其内容设为 <div><pre><code><$text text="""
<div class="tc-table-of-contents">
<<toc-selective-expandable 'TableOfContents'>>
</div>"""/></code></pre></div>
# 添加一个 <<.field caption>> 字段,其值为 ''目录''
# 添加一个 <<.field list-after>> 字段,其值为 ''~$:/core/ui/SideBar/Open''
通过创建标签为 ''~TableOfContents'' 的条目,添加项目至目录。一个简单的方法,是从条目工具栏选择 <<.icon $:/core/images/new-here-button>> ''添加子条目'' 。
(如果您没有看到"添加子条目"按钮,请点击向下箭头 <<.icon $:/core/images/down-arrow>> ,以查看更多功能选项。)
要创建子条目(来自其他条目下方的条目),请将其父条目的名称为标签。
以下是一个宏,为特定的用户名提供一个 Twitter 关注按钮:
```
\define twitterFollowButton(username)
<iframe allowtransparency="true" frameborder="0" scrolling="no" src="//platform.twitter.com/widgets/follow_button.html?screen_name=$username$" style="width:300px; height:20px;"></iframe>
\end
```
相较于 https://dev.twitter.com/docs/follow-button 发布的版本,唯一的变化是删除了换行字符。
请注意,src 网址不包含协议(即 "http" 或 "https")。这样可使其运作于无论是托管在 HTTP 或 HTTPS 网域的网站上。如果您希望 Twitter 按钮能运作于在 "file://" 网址上脱机使用的 TiddlyWiki,那么您需要手动增加协议。例如:
```
<iframe allowtransparency="true" frameborder="0" scrolling="no" src="https://platform.twitter.com/widgets/follow_button.html?screen_name=jermolene" style="width:300px; height:20px;"></iframe>
```
并非所有浏览器都支持 ES2015 的最新功能。Babel 项目提供一个填充代码,让您的 TiddlyWiki 插件可以具有这些功能。为此您将需要该填充代码源码的副本。
您可由 <<.def "npm">> 或下载/保存取得源码。安装的具体信息,请参阅 [[Babel Polyfill 文档|https://babeljs.io/docs/usage/polyfill/]]。
请确认在您的 TiddlyWiki 版本文件夹,有一个 `plugins/babel-polyfill` 文件夹。然后创建 `plugins/babel-polyfill/plugin.info` 文件,包含以下内容:
```json
{
"title": "$:/plugins/babel/babel-polyfill",
"description": "Babel Polyfills for ES2015 support",
"author": "Your Name Here",
"core-version": ">=5.0.0"
}
```
创建 `plugins/babel-polyfill/files` 文件夹。然后创建 `plugins/babel-polyfill/files/tiddlywiki.files` 文件,包含以下内容:
```json
{
"tiddlers": [
{
"file": "polyfill.min.js",
"fields": {
"title": "$:/plugins/babel/babel-polyfill/polyfill.min.js",
"type": "application/javascript",
"module-type": "library",
"global-module": "true"
}
}
]
}
```
现在复制您已下载/保存的 `polyfill.min.js`。
<<.tip "若您经由 ''npm'' 下载,则其安装于 `./node_modules/babel-polyfill/dist/polyfill.min.js`.">>
最后,您需要一个初始化设置,故此创建 `plugins/babel-polyfill/plugin.js` 文件,包含以下内容:
```javascript
/*\
title: $:/plugins/babel/babel-polyfill/plugin.js
type: application/javascript
module-type: startup
Load the babel-polyfill library on startup
\*/
exports.startup = function() {
$tw.modules.execute('$:/plugins/babel/babel-polyfill/polyfill.min.js');
}
```
<<.warning "因为该填充代码是用于浏览器中,我们需要有条件地加载 ES2016 不允许的程序库。这就是为什么它使用 TiddlyWiki 的相依解析器而不使用 ES2015 `import` 语句编写。">>
现在所有//运行时期//的 ES2015 功能,均可像 `Promise`,用于您的插件代码。
有关如何使用 ES2015 //语法// 于您的插件代码,请参阅 [[使用 ES2016 编写插件|Using ES2016 for Writing Plugins]]。
<<.operator-examples "addprefix">>
<<.operator-example 1 "Cat Garden [[Favourite Armchair]] +[addprefix[My ]]">>
<<.operator-examples "addsuffix">>
<<.operator-example 1 "[[London]addsuffix[ Underground]]">>
当您的 TiddlyWiki 文件中的结构变得越来越复杂,可能很难保持一致的条目名称。例如,术语应否定义复数或单数?应使用骆驼式文本或分离的单字?
记录正式命名政策可以帮助减少混淆。例如,对于此维基的所有命名政策皆记录在[[文档风格指南|Documentation Style Guide]]。
! [[系统条目|SystemTiddler]]名称
一个有用的约定是您创建的任何系统条目使用前缀 `$:/_`,以确保它们位于侧边栏的系统条目列表的顶端。
如果 <<.place T>> 不在输入中,或者是最后的名称,则输出是空的。
<<.operator-examples "after">>
<<.using-days-of-week>> [[星期四|Thursday]]条目显示其他示例。
<<.operator-example 1 "[list[Days of the Week]after[Monday]]">>
<<.operator-example 2 "[list[Days of the Week]after[Sunday]]">>
警示消息显示为黄色方框,覆盖于主 TiddlyWiki 窗口。每一警示对应一标签为 [[$:/tags/Alert]] 的条目。点击警示中的 <<.icon $:/core/images/delete-button>> 删除图标,可删除对应条目。
这是一个示例 <$fieldmangler tiddler="SampleAlert"><$set name="currentTiddler" value="SampleAlert"><$button message="tm-add-tag" param="$:/tags/Alert"> 警示 </$button></$set></$fieldmangler>。
警示条目应具有以下字段:
|!字段 |!说明 |
|title |默认情况下,警示的标题具有首码 `$:/temp/alerts/` |
|text |警示消息的文本 |
|modified | 警示的日期 (用于屏幕上排序警示) |
|component |与警示相关联的组件名称 |
|tags |必须包括 [[$:/tags/Alert]] |
该参数使用下面的语法,指定零个或多个基本类别:
<$railroad text="""
[{: ("current" | "missing" |: "orphans" | "shadows" | "tags" | "tiddlers" ) +"+" }]
"""/>
|!类别 |!成员 |!排序 |
|^`current` |[[当前条目|Current Tiddler]] |^-- |
|^`missing` |所有非存在条目,至少为一[[硬式链接|Hard and Soft Links]] |^无 |
|^`orphans` |所有<<.em 无>>硬式链接连到的条目 |^依名称 |
|^`shadows` |所有[[影子条目|ShadowTiddlers]],包括所有被非影子条目覆写的 |^无 |
|^`tags` |所有使用于非影子条目的标签 |^无 |
|^`tiddlers` |所有非影子条目 |^无 |
如果该参数指定多个类别,则由左至右处理之。最初的整体输出为空值,然后依序[[主导追加|Dominant Append]]每个类别的输出。无法识别的类别则无输出。
有一种特殊的情况,如果该参数为空,输出只是输入的一个副本。当该参数为[[软式参数|Filter Parameter]]时,这是很有用的。
<<.olink is>> 运算符是相似的,但其范围仅限于其输入。
<<.operator-examples "all">>
<<.operator-example 1 "[all[shadows]]">>
<<.operator-example 2 "[all[shadows+tiddlers]]">>
<<.operator-example 3 "[all[tiddlers+shadows]]">>
<<.operator-example 4 "[all[orphans+missing+current]]">>
<<.operator-example 5 "[all[current]]">>
<<.operator-example 6 "[all[current]tag[Operator Examples]]">>
<<.operator-example 7 "[all[current]tag[Recipes]]">>
<<.operator-example 8 "Monday Thursday +[all[]]">>
<<.operator-examples "allafter">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]] +[allafter[Wednesday]]">>
<<.operator-example 2 "[list[Days of the Week]] +[allafter:include[Wednesday]]">>
<<.operator-examples "allbefore">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]allbefore[Wednesday]]">>
<<.operator-example 2 "[list[Days of the Week]allbefore:include[Wednesday]]">>
<<.operator-example 3 "A B C D E +[allbefore:include[C]count[]]">>
当前的所有条目:
<$list filter="[!is[system]sort[title]]" />
这里有 TiddlyWiki5 的开发版的详细信息。如何命名版本的详细信息,请参阅 [[TiddlyWiki5 Versioning]]。
<<tabs "[tag[AlphaReleaseNotes]!sort[created]]" "Release 5.0.1-alpha" "$:/state/tab2" "tc-vertical" "ReleaseTemplate">>
<<.from-version "5.1.23">> 您可以有多个替代页面版面并在它们之间切换。若要查看可用版面的清单,并在它们之间切换,请使用键盘键 <kbd><<displayshortcuts ((layout-switcher))>></kbd>。
! 创建替代页面版面
创建替代页面版面超越了从默认界面进行[[增或删除功能|Page and tiddler layout customisation]],并允许您从头开始创建全新的版面。
若要创建替代页面版面,并能够切换到该版面,您需要使用[[系统标签:$:/tags/Layout|SystemTag: $:/tags/Layout]] 创建替代页面模板。
[[默认页面模板|$:/core/ui/PageTemplate]]的调整和修改版,也可以是完全不同的版本。版面切换机制要求页面模板条目,具有在切换用户界面的清单中使用的字段 `name` 和 `description`。
亚马逊网站服务插件提供几种使用亚马逊网站服务的工具:
* 用于将 TiddlyWiki 以单个 JavaScript 文件保存在 ZIP 档中的范本,可以当成 AWS Lambda 函数运行。在此形式,TiddlyWiki 是一个包含代码和数据的自足单独文件,如同单独的 HTML 文件配置
* 在 TiddlyWiki 的 Node.js 和 Lambda 配置下,可用于与 AWS 服务交互的命令
<a id=<<qualify "#Top">>></a>
<h2 id="#Introduction:Anchor-Links-using-HTML">''HTML Anchor Links in Tiddlers''</h2>
* <a href=<<qualify "##Introduction">>>他们在做什么?</a>
* <a href=<<qualify "##How-do-I-make-them">>>我该怎么做?</a>
* <a href=<<qualify "##Anchor-link-limitations">>>限制和需要注意的事情</a>
* <a href=<<qualify "##More_examples">>>更多示例</a>
* <a href=<<qualify "##Suggestions-for-elements">>>使用 HTML 元素的建议</a>
* <a href=<<qualify "##Suggestions-for-ids">>>使用目标名称的建议</a>
* <a href=<<qualify "##qualify-example">>>嵌入时避免重复的 ID</a>
* <a href=<<qualify ##Style_Hints>>>样式提示</a>
<a id=<<qualify "#Introduction">>></a>
!! 他们在做什么?
在 TiddlyWiki 锚点链接可以帮助我们链接到目标点和渲染的条目中的不同段落。它们可以帮助读者流览更长的条目内容。
例如,此链接,<a href=<<qualify "##Bottom_of_tiddler">>>底部</a>, 应该带你到这个条目的底部。 下面 "返回顶部" 的链接应该返回给您,返回到此条目的顶部。
<a href=<<qualify "##Top">>>返回顶部</a>
<a id=<<qualify "#How-do-I-make-them">>></a>
!! 我该怎么做?
制作锚点链接只有 2 个步骤。
* 首先,在需要的地方创建目标点(称为一个 '锚点')。
* 其次,在读者可能需要的地方添加一个链接。
就是这样。
''第 1 步:创建一个 '锚点' (链接目标)''
```
<a id="#Bottom_of_tiddler"></a>
```
* 添加一个 <<.attr id>> 属性至任何 HTML5 的标记,并在 '地址' 值之前放置一个 `#`。 <a href="##Suggestions%0">以下是一些您可以使用的建议标记。</a>
* 将此代码放在目标位置。例如,在条目的底部。
''第 2 步:创建一个指向目标锚点的链接''
```
<a href="##Bottom_of_tiddler">Bottom</a>
```
* 创建一个 `<a href>` 链接使用与目标完全相同的 '地址' 值,但其前面有双 `##` 字符。
* 将此代码放在对读者最有帮助的地方。
上述示例可适用于 ~TiddlyWiki 中的许多情况,像是此条目顶部的目录。
''真的这么简单吗?''
是的,就这么简单。但是... 在 ~TiddlyWikiin 与标准 HTML5 锚点链接和一些特定的 ~TiddlyWiki 限制有一些小的区别。
<a href=<<qualify "##Top">>>返回顶部</a>
<h2 id=<<qualify "#Anchor-link-limitations">>>限制和需要注意的事情</h2>
''步骤 1:'' 创建目标锚点
* 与标准 HTML5 不同,在 ~TiddlyWiki 中,您必须在目标地址值的前面放置单个 `#` 字符,该地址于 <<.attr id>> 属性之后。
* 与标准 HTML5 不同,~TiddlyWiki 锚点链接是区分大小写的。在上面的示例 #Bottom_of_tiddler 可以,但是 #bottom_of_Tiddler 不能。(请注意,示例 1 的 #Bottom_of_tiddler 中,使用的单个 `#` 字符。
* 避免在链接中使用 `%` 字符,因为某些浏览器有一个错误,其中导航到包含 `%` 字符的锚点有时会失败(请参阅下面的警告)。
* <a id=<<qualify #note.1-return>>/>避免在链接中使用任何空白 (见下面 <a href=<<qualify ##note.1>> title="点击以转到注释 1。">注释 1</a>).
* 在 ~TiddlyWiki 中的每个链接地址应是唯一的。如果嵌入会创建具有相同 <<.attr id >> 属性的多个实例,导航到第一个满足上述条件的实例。为避免这种情况,您可以在 <<.attr id>> 和 <<.attr href>> 属性中,使用 [[qualify 宏|qualify Macro]] 与下面给出的示例样式类似: <a href=<<qualify ##qualify-example>> >嵌入时避免重复的 ID</a>.
''步骤 2:'' 创建指向目标的链接
* 请记住,<<.attr href>> 值应以''两个'' `#` 字符开始,比目标锚的 <<.attr id >> 值多一。
* 请记住,~TiddlyWiki 锚点链接,区分大小写
''步骤 3:'' 导航到目标
通常,您可以按下链接,~TiddlyWiki 将滚动窗口,以便目标锚点位于窗口顶部,但存在以下几个限制:
* 在 ~TiddlyWiki 中,如果条目不在故事河中,或未在侧边栏中显示,则锚点链接无法使用。
* 在 ~TiddlyWiki 中,如果条目在故事河中,或在侧边栏中但锚标记的目标点在页面上不可见,则锚点链接无法使用 (例如,条目被折合或锚点在非显示的 $reveal 小工具内)。 Ctrl + 点击这样的锚点链接,将打开一个新的浏览器窗口/页签,并加载基本网页,不会导航到预期的条目。
* 在 ~TiddlyWiki 中,如果控制台 > 外观 > 故事查看设置为 Zoomin(单页查看) 和条目不在故事河的顶部(即未显示),则锚点链接无法使用。
* 按下锚点链接时,浏览器的导航历史记录将更新,链接的 href 值将附加到网页的 URL 中。即使 控制台 > 设置 > 历史记录导览设置为 "不更新历史记录",也会发生这种情况"。
<$macrocall $name=.note _="""<span id=<<qualify #note.1>>><a href=<<qualify ##note.1-return>> title="点击返回">1.</a></span> <<.attr id>> 属性的 [ext[HTML5 规范|https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id]] 提到其值不应包含任何空格。 目前 ^^(2020 年 12 月)^^ 一个 <<.attr id>> 值有空白,有时正常工作。但是,它可能并非在所有浏览器中都有效,并且不能保证将来可以正常工作。""" />
<<.warning "某些浏览器可能无法浏览到 ''id'' 值包含一个 `%` 字符后跟着 2 比特数字的锚点目标。这是浏览器中的一个错误,~TiddlyWiki 无法修复。为了安全起见,请避免使用 `%` 字符。">>
<a href=<<qualify "##Top">>>返回顶部</a>
<h2 id=<<qualify "#More_examples">>>更多示例</h2>
在每种情况下,目标代码都放置在读者导航到的目标位置,链接代码被放置在帮助读者导航的位置。
```
<h2 id="#heading-01"> 我的目标标题</h2>
<a href="##heading-01">链接到我的目标标题</a>
```
这看起来像:
<hr>
<h2 id="#heading-01">我的目标标题</h2>
<a href="##heading-01">链接到我的目标标题</a>
<hr>
```
<section id="#unique001">
!! 我的目标段落
一个 `<section>` HTML 标记通常用于定义 HTML 文档中的段落,例如章节、标题、页脚或文档的任何其他段落。
</section>
按下此锚点链接将转到: <a href="##unique001">链接到我的目标段落</a>
```
这看起来像:
<hr>
<section id="#unique001">
!! 我的目标段落
一个 `<section>` HTML 标记通常用于定义 HTML 文档中的段落,例如章节、标题、页脚或文档的任何其他段落。
</section>
按下此锚点链接将转到: <a href="##unique001">链接到我的目标段落</a>
<hr>
<a href=<<qualify "##Top">>>回到顶部</a>
<h2 id=<<qualify "#Suggestions-for-elements">>>''使用 HTML 元素的建议''</h2>
您为使用 <<.attr id>> 属性标记位置而选择的 HTML 元素的一些建议:
| ! 元素 | ! 示例代码 | ! 观察结果 |
|<<.def anchor>> |<$text text="""<a id="#part001-of-TiddlerName"></a>"""/> |应该在任何地方都能正常工作|
|<<.def heading>> |<$text text="""<h2 id="#a-new-heading">一个新标题</h2>"""/>|标题可以有 <<.attr id>> 属性|
|<<.def section>> |<$text text="""<section id="#sect001-of-TiddlerName">这是一个新的段落</section>"""/>|如果您使用 `section` 元素,它可能应该一个有自己的 <<.attr id>>|
|<<.def span>> |<$text text="""<span id="#007">标记 007 在这里!</span>"""/>|`span` 元素可用于插入一个 <<.attr id>> mid-paragraph|
<a href=<<qualify "##Top">>>回到顶端</a>
<h2 id=<<qualify "#Suggestions-for-ids">>>使用目标名称的建议</h2>
| ! | ! 示例代码 | ! 观察结果 |
|<<.def Recommended>> |<$text text="""<a id="#part001-of-TiddlerName"></a>"""/> |包括条目名称,便于唯一 <<.attr id>>|
|<<.def "Avoid: whitespace">> |<$text text="""<h2 id="#0 0 1">A New Heading</h2>"""/>|不保证空白在所有浏览器中工作|
|<<.def "Avoid: %">> |<$text text="""<section id="#sect001%20of%20TiddlerName">这是一个新的段落</section>"""/>|URI 编码(将空间转换为 %20)在某些浏览器中可能无法工作|
|<<.def "Avoid: duplicate IDs">> |<$text text="""<span id="#007">标记 007 在这里!</span>"""/>|<<.attr id>> 值在整个维基中应是唯一的|
|<<.def "Avoid: duplicate IDs">> |<$text text="""<a id="#007"></a>"""/>不同的标记 007|如果 <<.attr id>> 值重复,其中一个将被忽略|
<a href=<<qualify "##Top">>>回到顶部</a>
<h2 id=<<qualify "#qualify-example">>> ''嵌入时避免重复的 ID''</h2>
<<.attr id>> 和锚点链接到此标头已作出如下:
```
<a href=<<qualify "##qualify-example">>>嵌入时避免重复的 ID</a>
<h2 id=<<qualify "#qualify-example">>>嵌入时避免重复的 ID</h2>
```
;要对此有效:
* <<.attr href>> 和 <<.attr id>> 值使用[[属性的宏调用语法|HTML in WikiText]],并使用 [[qualify 宏|qualify Macro]] 创建唯一的 <<.attr id>> 值。
* <<.attr id>> 和锚点链接都必须在同一条目中。
* `=` 和 `<<` 之间不得有任何引号字符。
* 目标名称前后的双引号是可选的,但建议使用。
* `>` 字符,两个 `>>` 来关闭 `<<qualify` 宏,和一个 `>` 来关闭 `<a` 标签。
<a href=<<qualify "##Top">>>回到顶部</a>
<h2 id=<<qualify #Style_Hints>>>''样式提示'' </h2>
如果您不希望链接看起来像外部链接,请指定 `<a>` 元素的 <<.attr class>> 属性值 <<.def tc-tiddlylink>>,且如果您希望链接也是斜体和粗体,请指定附加类 <<.def "tc-tiddlylink-missing tc-tiddlylink-shadow">> 如下所示:
```
<a class="tc-tiddlylink" href="##Introduction:Anchor-Links-using-HTML">回到顶部</a> 或只是回到 <a class="tc-tiddlylink tc-tiddlylink-missing tc-tiddlylink-shadow" href=<<qualify ##Hints>>>提示</a>.
```
<a class="tc-tiddlylink" href="##Introduction:Anchor-Links-using-HTML">回到顶部</a> 或只是回到 <a class="tc-tiddlylink tc-tiddlylink-missing tc-tiddlylink-shadow" href=<<qualify ##Style_Hints>>>样式提示</a>.
如果要包含一个 <<.attr id>> 属性到边栏目录中的一个链接,您可以将其包括在列出的条目的 <<.field caption>> 字段,如同以下所显示的:
```
<span id=#some-value>您的标题</span>
```
<a id=<<qualify "#Bottom_of_tiddler">>></a>
<a href=<<qualify "##Top">>>回到顶部</a>
<<.operator-examples "append">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]append[Tomorrow]]">>
<<.operator-example 2 "[list[Days of the Week]append[Yesterday Today Tomorrow]]">>
;将缩写星期别的前 4 个追加到我们的清单
<<.operator-example 3 "[list[Days of the Week]append:4{Days of the Week!!short}]">>
这里有一些最近关于 ~TiddlyWiki 的文章。经由 GitHub、Twitter 提交新的项目,或发布于 [[TiddlyWiki 论坛|Forums]]。
<div class="tc-link-info">
<$list filter="[tag[Articles]!sort[modified]]">
<div class="tc-link-info-item">
! <$link><$view field="title"/></$link>
!!! <a href={{!!url}} target="_blank"><$text text={{!!url}}/></a>
<div class="tc-subtitle">发布于 <$view field="modified" format="relativedate"/></div>
<$transclude/>
</div>
</$list>
</div>
;[attr]
:表示具有属性名称 attr 的元素。
;[attr="value"]
:表示具有属性名称 attr 的元素,且其值为 "value" 的元素。
;[attr~="value"]
:表示具有属性名称 attr 的元素,且其值是以空格分隔的单词列表,其中一个单词为 "value"。
;[attr|="value"]
:表示具有属性名称 attr 的元素。且其值可为 "value",或者以 "value" 开头,紧接着是 “-”(U+002D)。可用于匹配语言子码。
;[attr^="value"]
:表示具有属性名称 attr 的元素,且其第一个值以 "value" 为前缀。
;[attr$="value"]
:表示具有属性名称 attr 的元素,且其最后的值以 "value" 为后缀。
;[attr*="value"]
:表示具有属性名称 attr 的元素,且其值至少包含一个字符串 "value" 为子字符串。
;[attr "operator value" i]
:在右括号之前添加一个 i(或 I)会使该值不区分大小写(对于 ASCII 范围内的字符)。
了解更多信息:[[属性选择器 - CSS|https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors]] 或 [[CSS 规范|https://www.w3.org/TR/CSS22/selector.html#attribute-selectors]]
音频档可以非常类似[[图像|Images in WikiText]]的方式纳入于 TiddlyWiki。
! 嵌入式的音频
小的音频档可以直接嵌入至 TiddlyWiki,但不适合嵌入大的文件 (超过几百 KBs),因为它增大了 TiddlyWiki 文件。
例如,[[TiddlyWiki.mp3]] 条目包含单字 "TiddlyWiki" 的 MP3 录音。如果开启该条目,您应该看到将播放该录音的音频播放机。
您也可以嵌入音频档,例如:
<<wikitext-example-without-html '{{TiddlyWiki.mp3}}'>>
! 外部音频
外部音频条目使用''_canonical_uri'' 字段指向外部音频档/流,并停用其 ''text'' 字段。这大幅减少了条目大小,但仍然允许播放。
例如,条目 [[Caruso - Ave Maria]] 指向在 http://archive.org 的在线音频档:
<<wikitext-example-without-html '{{Caruso - Ave Maria}}'>>
若有可用的 SaverModule 支持,于编辑条目时点击 <<.icon $:/core/images/done-button>> ''保存''、或 <<.icon $:/core/images/delete-button>> ''删除''条目,TiddlyWiki 将触发保存当前的文档。
您应该会在窗口右上方看到一个黄色的通知,确认已完成自动保存。
可于 <<.icon $:/core/images/options-button>> [[控制台|$:/ControlPanel]]里的''设置''页签中启用或禁用自动保存。在幕后,它是借由设置 [[$:/config/AutoSave]] 条目控制之,该条目内容须为 ''yes'' 方可启用自动保存。
<<.from-version "5.1.24">> 相关概述,请参阅[[数学操作符|Mathematics Operators]]。
<<.operator-examples "average">>
<<.operator-example 1 "=1 =3 =4 =5 +[average[]]">>
请注意,如果没有输入,则操作符返回 `NaN`
<<.operator-example 2 "[tag[NotATiddler]get[price]] +[average[]]">>
依次处理每个输入的名称。生成的相应条目的反向链接清单,按名称字母顺序排序,然后[[主导追加|Dominant Append]]到运算符的整体输出。
<<.operator-examples "backlinks">>
<<.operator-example 1 "[[HelloThere]backlinks[]]" "链接 [[HelloThere]] 的条目">>
<<.operator-example 2 "[tag[TableOfContents]backlinks[]]" "链接到标签为 [[TableOfContents]] 的条目">>
<<.operator-example 3 "[all[current]backlinks[]]" "链接到此条目的条目">>
<<.dlink-ex Base64 "https://en.wikipedia.org/wiki/Base64">> 是表现二进制数据(例如图像)为文本串的方法。
从 [[Beaker 浏览器网站|https://beakerbrowser.com/]]:
> Beaker is a Peer-to-Peer Web Browser, made for users to run applications independently of hosts. Using P2P Hypermedia, Beaker separates frontend apps from backend services, so that users are completely in control of their software and data. Read more.
Beaker 是开源 Chromium 浏览器(其支持 Google Chrome 浏览器的核心引擎)的一个分支。
Beaker 添加在浏览器中托管网站的功能,并通过 `dat://` 协定浏览这些站点。非同寻常的是,如果您正在运行 Beaker,那么您也可以浏览到由其他用户托管的网站,而不需要任何服务器。
此外,您可以选择托管属于其他人的网站,形成一个类似 Bittorrent 的群集服务内容给其他浏览器。您也可以 //fork// 一个网站,制作您自己的副本,可以根据需要改变。
主要的缺点是主流浏览器不能使用 `dat://` 网站。
大多数魔法是由底层的 [[Dat 协定|https://datproject.org/]]完成。
<<.from-version "5.1.14">> TiddlyWiki 包含一个特殊的保存模块,允许从 Beaker 浏览器直接保存变更。相关说明,请参阅 [[Saving on Beaker Browser]]。
如果 <<.place T>> 不在输入中,或者是第一个名称,则输出是空的。
<<.operator-examples "before">>
<<.using-days-of-week>> [[星期四|Thursday]]条目显示其他示例。
<<.operator-example 1 "[list[Days of the Week]before[Saturday]]">>
<<.operator-example 2 "[list[Days of the Week]before[Monday]]">>
这里有 TiddlyWiki5 的试用版的详细信息。如何命名版本的详细信息,请参阅 [[TiddlyWiki5 Versioning]]。
<<tabs "[tag[BetaReleaseNotes]!sort[created]]" "Release 5.0.18-beta" "$:/state/tab2" "tc-vertical" "ReleaseTemplate">>
<<.op bf>> 筛选器运算符与 <<.olink rest>> 同义,也称为 <<.olink butfirst>>。
有两种方法在 TiddlyWiki5 生成 HTML 引言区块,一个是多行内容,以及单行的内容。
! 多行引言区块
多行引言区块的语法 ({{$:/core/images/quote}}):
<<wikitext-example src:"<<<
This is a block quoted paragraph
written in English
<<<
">>
!! 引用
引用可加入到引言区块:
<<wikitext-example src:"<<<
Computers are like a bicycle for our minds
<<< Steve Jobs
">>
!! CSS 类别
CSS 类别可加入到引言区块:
<<wikitext-example src:"<<<.myClass.another-class
Operating systems are like a brick wall for our minds
<<< Nobody
">>
核心包含 `tc-big-quote` CSS 类别,用特大双引号呈现区块引言:
<<wikitext-example src:"<<<.tc-big-quote
A dramatic quote
<<< Somebody Important
">>
! 单行引言区块
单行引言区块其实是[[清单|Lists in WikiText]]的扩充语法,例如:
<<wikitext-example src:"> Quoted text
> Another line of quoted text
">>
嵌套式引言:
```
> A top quote
>> A subquote
> Another top quote
```
结果显示为:
> A top quote
>> A subquote
> Another top quote
引言与其他清单项目混用,例如:
<<wikitext-example src:"* List One
** List Two
**> A quote
**> Another quote
* List Three
">>
TiddlyWiki 的''博客''应用版包含协助发布以 TiddlyWiki 写的博客的工具。
文档准备中,使用示例请参阅 https://github.com/Jermolene-blog/blog。
//这是[[购物清单示例|Shopping List Example]]的一个购物清单项目样本//
TiddlyWiki 被设计为与 HTML5-兼容的浏览器一起使用。
下表摘要已知可与 TiddlyWiki 一起使用的浏览器版本
|!浏览器 |!状态 |
|Internet Explorer |第 10 版及以上版本 |
|Chrome |所有最新版本 |
|Firefox |所有最新版本 |
|Firefox for Android |所有最新版本 |
|Safari |第 6 版及以上版本 |
! 简介
浏览小工具显示一个 HTML 文件浏览器按钮,允许用户选择一个或多个要导入的文件。它将发送 [[WidgetMessage: tm-import-tiddlers]] 附带经由从其来源文件导入的 JSON 格式的条目。此消息通常由 NavigatorWidget 处理,此导览小工具添加条目到存储区并更新故事以显示它们。
! 内容与属性
`<$browse>` 小工具的内文将被忽略。
|!属性 |!说明 |
|multiple |设为 "multiple" 可选择多重文件上传 |
|tooltip |可选的提示文本 |
|deserializer |<<.from-version "5.1.15">> 使用的解串器的可选名称 (默认解串器从扩展名或类型派生) |
|accept |<<.from-version "5.1.23">> 可选的以逗号分隔的[[文件接受的扩展名清单|https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#Unique_file_type_specifiers]] 和/或 MIME 型态 |
|message |可选的覆写要生成的插件消息。该文件将在 JavaScript 对象 `event.target.files` 中传递 |
|param |可选的要随自定义消息一起传递的参数 |
在 iPhone/iPad 选择多个选项将删除把照片/视频直接带入 TiddlyWiki 的能力。
''示例''
```
<$browse>
```
显示结果:
<$browse>
BT (née British Telecom) 是英国最大的电信公司。[[Osmosoft]] 于 2007 年被 BT 收购。之后 JeremyRuston 于 2011 年离开 BT。
{{$:/language/Help/build}}
定义建置目标的详细信息,请参阅 [[tiddlywiki.info Files]]。
TiddlyWiki5 可用于从构成的组件组建旧的 2.x.x [[经典版|TiddlyWikiClassic]]。这样做涉及这些功能:
* `tiddlywiki/classictools` 插件,包含一个反串行化程序模块,允许条目可从 TiddlyWiki 2.x.x `.recipe` 文件加载条目
* ViewWidget 的 `stripcomments` 格式,去除行首为 `//#` 的单行 JavaScript 注解
* FieldsWidget 的 `stripTitlePrefix='yes'` 属性,从 `title` 属性消除包裹在大括号的前缀
** 例如,`{tiddler}HelloThere` 将转化为 `HelloThere`
! 用法
TiddlyWikiClassic 是从命令行运行 [[TiddlyWiki on Node.js]] 组建。典型的用法是:
```
node ../../tiddlywiki.js \
--verbose \
--load <path_to_recipe_file> \
--rendertiddler $:/core/templates/tiddlywiki2.template.html <path_to_write_index_file> text/plain \
|| exit 1
```
<<.op butfirst>> 筛选器运算符与 <<.olink rest>> 同义,也称为 <<.olink bf>>。
<<.operator-examples "butlast">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]butlast[]]">>
<<.operator-example 2 "[list[Days of the Week]butlast[2]]">>
<<.operator-example 3 "A B C D E F G H I J K L M +[butlast[7]]">>
! 简介
此 `<$button>` 小工具显示一个 HTML `<button>` 元素,组合可选点击时的动作:
* 运行在 `actions` 属性传入的所有 ActionWidgets
* 运行按钮小工具的直属的任合 ActionWidgets
* 运行任何集成动作:
** 导览指定的条目
** 显示一个自定义的 [[小工具消息|Messages]]
** 触发一个自定义的 [[弹出显示|PopupMechanism]]
** 指定文本给指定的条目
集成的动作用于调用常用操作的快捷方式。同样的功能可以通过 ActionWidgets,支持强调显示选定的弹出式窗口的例外消息。
! 内容与属性
此 `<$button>` 小工具的内文显示于该按钮。
|!属性 |!说明 |
|actions |一个包含 ActionWidgets 的字符串,其 ActionWidgets 于侦测到按键组合时被触发。<br /><<.from-version "5.1.23">> <<.def "modifier">> 变量列出了调用动作时,按下的修饰键。可能的修饰键为 ''ctrl''、''ctrl-alt''、''ctrl-shift''、''alt''、''alt-shift''、''shift'' 和 ''ctrl-alt-shift'' |
|to |导览的条目名称 |
|message |当按钮被点即时,送出的[[小工具消息|Messages]]的名称 |
|param |此消息的可选参数 |
|set |一个新的值将被指定给 TextReference |
|setTitle |将为其分配新值的标题,''没有''[[文本参考|TextReference]]。首选为 <<.attr set>> |
|setField |如果属性 <<.attr setTitle>> 存在,将为其分配新值的 ''字段名称''。默认为 ''text'' 字段 |
|setIndex |如果属性 <<.attr setTitle>> 存在,将为其分配新值的 ''索引''。 |
|setTo |一个新的值将被指定给 TextReference,在 <<.attr set>> 属性识别之,或通过 <<.attr setField>> 指定的 text 字段/ 通过 <<.attr setTitle>> 设置的标题的 <<.attr setIndex>> 指定的索引 |
|selectedClass |若触发弹出显示,或在 <<.attr set>> 指定的条目已于 <<.attr setTo>> 指定值时,指定可选的额外 CSS 类别 |
|default |默认值,若缺少 <<.attr set>> 条目,则对 <<.attr setTo>> 检测以决定 <<.attr selectedClass>> |
|popup |当点击该按钮时切换的弹出显示的状态条目名称。详细信息, 请参阅 PopupMechanism |
|aria-label |可选的[[无障碍|Accessibility]]标签 |
|tooltip |可选的提示文本 |
|class |指定给 HTML 元素的可选 CSS 类别名称 |
|style |指定给 HTML 元素的可选 CSS 样式属性 |
|tag |使用一个可选的 html 标记而非默认的 "button" |
|dragTiddler |一个可选的条目名称,使按钮可拖动并识别有效载荷条目。详细信息,请参阅 DraggableWidget |
|dragFilter |一个可选的筛选器,使按钮可拖动并识别有效载荷条目的清单。详细信息,请参阅 DraggableWidget |
|tabindex |设置按钮的 `tabindex` 属性为给定值 |
|disabled|<<.from-version "5.1.23">> 可选的,如果设置为 "yes",则禁用按钮。默认为 "no" |
''注意:''在几乎所有其他情况下,TextReference 被用作一个小工具的属性,它将被置于大括号之间,以[[嵌入|Transclusion in WikiText]]当前那里存储的值。然而,当我们使用 TextReference 作为一个按钮小工具的 <<.attr set>> 属性的值,我们正在引用//该存储位置本身//,而非那里存储的值,因此那里我们''不''使用大括弧。//示例://我们可以写一个按钮小工具,设置 TiddlerA 的 `caption` 字段与 TiddlerB 相同:
<<.tip """<$macrocall $name=".from-version" version="5.1.18"/> <$macrocall $name=".attr" _="setTitle"/>、<$macrocall $name=".attr" _="setField"/> 和 <$macrocall $name=".attr" _="setIndex"/> 属性允许''直接''指定条目状态,而不将其解释为[[文本参考|TextReference]]。
这对于标题可能包含用于表示条目字段,或索引 (`!!`, `##`) 的字符的边缘案例非常有用""">>
```
<$button set="TiddlerA!!caption" setTo={{TiddlerB!!caption}} >
Press me!
</$button>
```
''提示:''设置 ''class'' 到`tc-btn-invisible tc-tiddlylink` 使得按钮看起来像一个内部链接。
<<.dlink-ex CSS "https://en.wikipedia.org/wiki/Cascading_Style_Sheets">> 是一个标准的纯文本格式,用于在网页上定义各种元素的呈现样式。
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "ceil">>
<<.operator-example 1 "[[1.6]ceil[]]">>
<<.operator-example 2 "[[-1.6]ceil[]]">>
<<.operator-example 3 "=-1.2 =-2.4 =3.6 =4.8 =5.1 +[ceil[]]">>
<<.def changecount>> [[宏|Macros]]传回[[当前条目|Current Tiddler]]被创建的次数,在目前 ~TiddlyWiki 工作阶段期间存放或删除。
如果删除一条目,且随后重新创建,其 <<.var changecount>> 会递增二。
!! 参数
(无)
<<.macro-examples "changecount">>
<$macrocall $name=".example" n="1" eg="""<<changecount>>"""/>
如果您编辑这条目且再次存储它,就会递增其值,即使没有对其内容进行任何更改。
若要访问另一个不同条目的 <<.var changecount>>,请使用 <<.wlink TiddlerWidget>> 小工具:
<$macrocall $name=".example" n="2"
eg="""<$tiddler tiddler="Draft of '新条目'">
<<changecount>>
</$tiddler>"""/>
每当您创建、存储或删除[[新条目]],显示的值就会增加。
! 简介
The `<$checkbox>` 小工具显示一个 HTML `<input type="checkbox">` 元素,动态绑定到:
* 存在或不存在的指定标签的条目于指定条目
* 指定条目的指定字段值
! 内容与属性
此 `<$checkbox>` 小工具的内文显示于紧接于该核取方块之后的 HTML `<label>` 元素,这就意味着点击内容将切换核取方块。
|!属性 |!说明 |
|tiddler |操作的条目名称 (默认为[[当前条目|Current Tiddler]]) |
|tag |绑定该核取方块的标签名称 |
|invertTag |当设为 ''yes'' 时,翻转标签的绑定逻辑,因而无该标签者致使核取方块被选定 |
|field |绑定该核取方块的字段名称 |
|index|<<.from-version "5.1.14">> 绑定该核取方块的[[数据条目|DataTiddlers]] //tiddler// 的索引<<.tip "务必正确设置//tiddler//">>|
|checked |已选取该核取方块的对应字段值 |
|unchecked |不选取该核取方块的对应字段值 |
|default |若未定义字段时的默认值 |
|class |指定给 `<label>` 元素的类别 |
|actions |<<.from-version "5.1.14">> 核取方块的状态改变时,一个包含被触发的 ActionWidgets 的字符串( 无论核取方块勾选或取消勾选 ) |
|uncheckactions |<<.from-version "5.1.16">> 核取方块未勾选时,一个包含被触发的 ActionWidgets 的字符串 |
|checkactions |<<.from-version "5.1.20">> 核取方块已勾选时,一个包含被触发的 ActionWidgets 的字符串 |
|disabled|<<.from-version "5.1.23">> 可选,如果设置为 "yes",则禁用该复选框。默认为 "no" |
!! 标签模式
于标签模式下使用核取方块小工具,需要 ''tag'' 属性指定标签的名称。''tiddler'' 属性目标条目,若未指定则默认为当前条目。
此示例创建一核取方块切换 ''done'' 标签于当前条目
<<wikitext-example-without-html """<$checkbox tag="done"> Is it done?</$checkbox>""">>
!! 字段模式
于字段模式下使用核取方块小工具,需要 ''field'' 属性指定字段的名称。''checked'' 与 ''unchecked'' 属性指定要分配给该字段,分别对应于其已选取和未选取状态的值。若未定义字段值,则 ''default'' 属性则用作回传值。
此示例创建一核取方块,若其 ''status'' 字段值等于 ''open'' 为已选取,而若其 ''status'' 字段值等于 ''closed'' 为未选取。若该字段值未定义则默认值为 ''closed'', 亦即若其字段 ''status'' 值未定义,则该核取方块为未选取。
<<wikitext-example-without-html """<$checkbox field="status" checked="open" unchecked="closed" default="closed"> Is it open?</$checkbox><br>''status:'' {{!!status}}""">>
!! 索引模式
要在索引模式中使用核取方块小工具,则设置 ''index'' 属性为[[数据条目|DataTiddlers]]的索引。 ''checked'' 和 ''unchecked'' 属性指定各该值为分配给索引与其对应的选取和未选取状态。如果是未定义的索引,则以 ''default'' 属性为回退值。
下列示例创建一个核取方块,如果在 ExampleData 条目中的这条目的名称索引等于 ''selected'',则为已选取;且若索引是一个空字符串,则为未选取。如果索引是未定义的,则其默认为空字符串,即如果无该索引,则核取方块为未选取。
<$macrocall $name="wikitext-example-without-html" src="""<$checkbox tiddler="ExampleData" index=<<currentTiddler>> checked="selected" unchecked="" default=""> Selected?</$checkbox>"""/>
//这是[[购物清单示例|Shopping List Example]]的一个购物清单项目样本//
TiddlyWiki 的简体中文翻译版本:
* ''文档'': https://tiddlywiki.com/languages/zh-Hans/index.html
* ''空白版本'': https://tiddlywiki.com/languages/zh-Hans/empty.html
另请参阅 [[中文 (正体) 版|Chinese (Traditional) Edition]]。
TiddlyWiki 的正体中文翻译版本:
* ''文档'': https://tiddlywiki.com/languages/zh-Hant/index.html
* ''空白版本'': https://tiddlywiki.com/languages/zh-Hant/empty.html
另请参阅 [[中文 (简体) 版|Chinese (Simplified) Edition]]。
{{$:/language/Help/clearpassword}}
您可使用三个连续反引号 <code>```</code> 标示代码区块 (<<.icon $:/core/images/mono-block>>):
<pre>
```
This will be monospaced
```
</pre>
显示结果:
```
This will be monospaced
```
若要正确解译,三个连续反引号必须要在行的开头并后紧跟一个分行符号。
请注意,任何前面的段落内容应以双换行符号正确结束。所以,这个例子是错的:
<pre>
This is an ordinary paragraph
```
This will be monospaced
```
</pre>
正确的版本是:
<pre>
This is an ordinary paragraph
```
This will be monospaced
```
</pre>
注意有些键盘配置会将反引号当成 [[dead key|https://en.wikipedia.org/wiki/Dead_key]],造成无法输入反引号。诀窍是输入三个反引号后再输入一个空格,或者一次输入六个反引号后再输入一个空格,然后将光标往回移动三个字符,再输入或粘贴内容。
对不同的集成开发环境,实现 TiddlyWiki [[编码风格指南|https://tiddlywiki.com/dev/#TiddlyWiki%20Coding%20Style%20Guidelines]]。
{{!!url}}
! 简介
此 ''codeblock'' 小工具呈现 `<pre>` 与 `<code>` 区块的内文,使其显示为等宽。可选择性地使用 ''language'' 属性指定一种编程语言,但是语法高亮显示功能只用于 [[Highlight 插件|Highlight Plugin]] 已安装时。
! 内容与属性
此 `<$codeblock>` 小工具的内文会被忽略。
|!属性 |!说明 |
|code |区块的内容将呈现为代码 |
|language |语法高亮显示的编程语言 |
其中 `language` 属性值可为以下任一︰
* Highlight.js 编程语言代码 (清单详见 https://highlightjs.org/static/demo/)
* MIME 类型 (例如, `text/html` 或 `image/svg+xml`)
! 示例
这里是一个示例,嵌入一条目的内容当作一个代码区块。
<$macrocall $name='wikitext-example-without-html'
src='<$codeblock code={{$:/editions/tw5.com/macro-examples/say-hi}} />' />
代码区块也可以指定一种语言。
<$macrocall $name='wikitext-example-without-html'
src='<$codeblock code="SELECT * FROM users WHERE deleted = false" language="sql" />' />
此 CodeMirror 插件增加了一个复杂的网页式编辑器到 TiddlyWiki。
请参阅演示于 https://tiddlywiki.com/plugins/tiddlywiki/codemirror
<<.def colour>>(或 <<.def color>>)[[宏|Macros]]返回在[[调色板|ColourPalettes]]中的一个颜色的 [[CSS|Cascading Style Sheets]] 值。
如果当前调色板中没有此项目,则以[[vanilla 调色板|$:/palettes/Vanilla]]代替。如果 vanilla 调色板中不存在此类项目,系统将查找名为 `$:/config/DefaultColourMappings/<colour-name>` 的配置条目,并从文本字段中分离颜色。这使得插件能够为内核调色板中不存在的颜色提供默认值。
!! 参数
;名称
: 调色板项目的名称,例如 `page-background`
<<.macro-examples "colour">>
<$macrocall $name=".example" n="1" eg="""<<colour code-border>>"""/>
<$macrocall $name=".example" n="2" eg="""<<colour foreground>>"""/>
<$macrocall $name=".example" n="3" eg="""<<colour page-background>>"""/>
<$macrocall $name=".example" n="4" eg="""<<colour sidebar-tab-background>>"""/>
<$macrocall $name=".example" n="5" eg="""<<colour tag-foreground>>"""/>
<<.def colour-picker>> [[宏|Macros]]显示一个交互式颜色选取器,在核心 bitmap 编辑器中可以看到。
参数
;动作
: 当用户选取一个颜色时,应运行的动作小工具的 Wikitext。在本文中,变量 `colour-picker-value` 包含所选的颜色的条目名称。
<<.macro-examples "colour-picker">>
颜色: <$edit-text tiddler='$:/_MyColour' tag='input' placeholder='(未设置)' default=''/>
---
<$macrocall $name='colour-picker' actions="
<$action-setfield $tiddler='$:/_MyColour' $value=<<colour-picker-value>>/>
"/>
<$macrocall $name=".example" n="1" eg={{colour-picker Macro (Example 1)}}/>
调色板为一[[数据条目|DataTiddlers]],为每个颜色名称提供一个 [[CSS]] 颜色值,例如 ''yellow'' 或 ''#fe0'',像这样:
```
page-background: #fe0
table-border: #ccc
...
```
几个调色板形成核心的一部分。系统条目 [[$:/palette]] 总是包含当前选定的调色板条目的名称。 您可以使用 <<.icon $:/core/images/palette>> ''调色板''按钮更改配色,在侧边栏中的''工具''页签上找到。
从当前调色板中取得已命名的颜色,例如用于样式表条目,使用 <<.mlink colour>> 宏:
```
<<colour page-background>>
```
调色板条目应该有以下字段:
|!名称 |!内容 |
|title |通常开头为 `$:/` |
|type |`application/x-tiddler-dictionary` |
|tags |`$:/tags/Palette` |
|name |在调色板浏览器中显示 |
|description |显示于调色板浏览器 |
|text |颜色定义,其格式为 `name: value` |
依照惯例,每个主题在 [[$:/config/DefaultPalette]] 条目中提供了默认调色板。因此设置条目 [[$:/theme]] 为字符串 `$:/config/DefaultPalette` 将还原为与当前主题打包在一起的调色板 (只要它还没有被重新定义,因为它是默认条目)。
<<.dlink-ex CSV "https://en.wikipedia.org/wiki/Comma-separated_values">> 是一种存放数据表格的纯文本格式的标准。
表格中的每一列都被称为一笔<<.def 纪录>>,且占用一个横列。
直行称为<<.def 字段>>。一列的每个字段都以逗号分隔,且通常以引号区隔。
<<.mlink csvtiddlers>> 宏以这种格式返回条目的内容。
一个<<.def 指令>>为下列关键字之一,与 `--` 首码并用为 Node.js 下的的一个命令行选项,指示所需的操作。有关如何使用的详细信息,请参阅 [[TiddlyWiki on Node.js]] 。
<<list-links "[tag[Commands]]">>
<<.operator-examples "commands">>
<<.operator-example 1 "[commands[]]">>
<<.tip "最新和最有用的链接现在被收集在[[社群链接聚合器|Community Links Aggregator]]中。">>
一旦转移了所有相关链接,这些条目将从主 tiddlywiki.com 网站中删除。
<<tabs "Forums Latest Tutorials [[Community Editions]] [[Community Plugins]] [[Community Themes]] [[Community Palettes]] [[Other Resources]] Examples Articles Meetups" "Latest">>
这些是 ~TiddlyWiki [[社群|Community]]创建的预包装版本。这些是带有添加的插件和配置的 ~TiddlyWikis,以促进特定的使用案例。如果您想快速进入 ~TiddlyWiki,并开始使用它,而自己不花太多时间配置,那么这些是很好的起点。
<div class="tc-link-info">
<$list filter='[tag[Community Editions]!sort[modified]]'>
<div class="tc-link-info-item">
! <$link><$view field="title"/></$link>
<div class="tc-subtitle">发布于 <$view field="modified" format="relativedate"/></div>
<$transclude/>
</div>
</$list>
</div>
~TiddlyWiki 社群链接聚合器是由我们的社群编辑团队策划的有用和有趣的 TiddlyWiki 材料的定期更新链接的集合。该网站汇总了由 ~TiddlyWiki 社群个别成员策划的链接。它允许您查看最新的链接,并通过类别和时间轴进行探索。
https://links.tiddlywiki.com/
此网站最适用于人群张贴链接。对个人的压力减轻了,因为不是每个人都需要抓住飞过去的每一个有趣的链接。聚合效应可减少错误的影响。例如,如果一个人在不合适的主题下,错误地标记了链接,则网站将显示只有一个人添加了该标签,而大多数人使用更合适的标签。这样,我们希望生成一种群众的智能,就描述和分类联系的最有用方法,达成共识。方法。
这是由 ~TiddlyWiki [[社群|Community]]成员制作的调色板列表。调色板改变 TiddlyWiki 的颜色方案,可以与布景主题结合使用。
<div class="tc-link-info">
<$list filter='[tag[Community Palettes]!sort[modified]]'>
<div class="tc-link-info-item">
! <$link><$view field="title"/></$link>
<div class="tc-subtitle">发布于 <$view field="modified" format="relativedate"/></div>
<$transclude/>
</div>
</$list>
</div>
这些是由 ~TiddlyWiki [[社群|Community]]创建的插件。访问他们的网站,试插件。请仔细阅读安装说明,并在安装前进行备份!这些插件可能并不总是最新的,并可能包含错误或不需要的行为。有关更多插件,请造访 [[TiddlyWiki 论坛|Forums]],新的插件首先张贴并发布于该处。
<div class="tc-link-info">
<$list filter='[tag[Community Plugins]!sort[modified]]'>
<div class="tc-link-info-item">
! <$link><$view field="title"/></$link>
<div class="tc-subtitle">发布于 <$view field="modified" format="relativedate"/></div>
<$transclude/>
</div>
</$list>
</div>
这是 ~TiddlyWiki [[社群|Community]]成员制作的布景主题列表。布景主题改变 TiddlyWiki 的外观,从而实现了另一种程度的客制化。安装布景主题与[[安装插件|Manually installing a plugin]]相同。
<div class="tc-link-info">
<$list filter='[tag[Community Themes]!sort[modified]]'>
<div class="tc-link-info-item">
! <$link><$view field="title"/></$link>
<div class="tc-subtitle">发布于 <$view field="modified" format="relativedate"/></div> 天前
<$transclude/>
</div>
</$list>
</div>
<<.from-version "5.1.22">> <<.op compare>> 筛选器允许运行数字、字符串和日期比较。
<<.op compare>> 运算符使用延伸语法指定所有选项:
```
[compare:<type>:<mode>[<operand>]]
```
''type'' 可以是:
* "number" - 无效的数字被解译为零
* "integer" - 无效的整数被解译为零
* "string"
* "date" - 无效的日期被解译为 1st January 1970
* "version" - 无效的版本被解译为 "v0.0.0"
''mode'' 可以是:
* "eq" - 等于
* "ne" - 不等于
* "gteq" - 大于或等于
* "gt" - 大于
* "lteq" - 小于或等于
* "lt" - 小于
运算符将选定的每个项与参数的值进行比较,仅保留通过指定条件的项目。
例如:
```
[[2]compare:number:eq[3]] returns nothing
[[2]compare:number:lt[3]] returns "2"
[[2]compare:number:eq[2]] returns "2"
```
请注意,<<.op compare>> 运算符的多个变体与一些现有运算符的同义,其提供是为了一致性。例如, `compare:string:eq[x]` 与 `match[x]` 同义。
<<.operator-examples "compare">>
<<.operator-example 1 "[[20200101]compare:date:gt[201912311852]]" "compares two partial dates">>
<<.operator-example 2 "[[202001011852]compare:integer:gt[20191231]]" "compares the same two strings as integers">>
<<.operator-example 3 "[list[Days of the Week]compare:string:gt[M]compare:string:lt[W]]">>
<<.operator-example 4 "[[v5.1.23-prerelease]compare:version:gt[v5.1.22]]">>
<<.operator-example 5 "[[1]compare:number:gt[2]then[yes]else[no]]">>
//[[工作管理示例|TaskManagementExample]]的样品任务//
这是 ~TiddlyWiki 常见的使用案例,您会想把变量的结果与各种比特的文本串放在一起。在一些编程语言中,这个处理通常被称为 "串联" 文本。
例如,您可能希望为您的客户数据库设置模板,其中链接将自动参照有关客户的其他联系信息。在您的条目内,您可以尝试这样:
|注意|k
|@@font-size:1.5em;⚠@@ 注意:<br/> 别这么做!| `[[附加信息|<<currentTiddler>>-Contact]]` |
但这不会工作。如果您尝试此操作,该链接被逐字解译,并且尝试将您带至︰
```
<<currentTiddler>>-Contact
```
解决方式是使用宏将 `<<currentTiddler>>` 的渲染值与附加文本的比特 `-Contact` 放在一起。
在该条目的顶端创建一个宏,像这样:
```
\define linkup(link) [[Additional Info|$link$-Contact]]
```
您可能会想像这样调用新的宏:
|注意|k
|@@font-size:1.5em;⚠@@ 注意:<br/> 别这么做!| `<<linkup <<currentTiddler>> >>` |
但是如果您这样做,您会发现 `<<currentTiddler>>` 不会被渲染,而是逐字传递。
相反,您可以使用 [[MacroCallWidget]] 小工具,像这样︰
```
<$macrocall $name="linkup" link=<<currentTiddler>> />
```
在这种情况下,我们将一个变量的值直接传递给我们的宏。这通常是进行此任务的一般方式。如果您想基于其他变量创建更多的链接,可以重复使用宏的每种情况。
如果,在这种情况下,您使用的唯一的变量是 `currentTiddler` ,那么您可以写一个简单的宏,像这样:
```
\define linkup() [[附加信息|$(currentTiddler)$-Contact]]
```
请注意,在这种情况下,我们不传递参数。相反,我们使用特殊语法 `$(variable)$` 引用变量。由于我们不传递参数,我们可以更简单地调用宏,而不用 `<$macrocall>` 小工具,像这样:
```
<<linkup>>
```
<style>
.warning code {background-color:#ffff80}
table.warning {background-color:#ffff80;}
</style>
这些是 TiddlyWiki 的基本概念。了解这些想法是如何组合在一起,是从 TiddlyWiki 获得最大的关键。
<<list-links "[tag[Concepts]]">>
<<.from-version "5.1.20">> 条件筛选器运算符,允许在筛选器中表示 ''if-then-else'' 逻辑。
基础是以下惯例:空列表可用于表示布尔值 ''false'',而包含一个(或多个)条目的列表则表示 ''true''。
条件运算符是:
* [[then 运算符|then Operator]] 将任何输入值替换为常量字符串。例如:
** <<.inline-operator-example "[[HelloThere]is[missing]then[FOO]]">>
** <<.inline-operator-example "[[Missing Tiddler]is[missing]then[FOO]]">>
* [[else 运算符|else Operator]] 如果标题清单为空,则返回常量字符串,否则返回原始标题清单
** <<.inline-operator-example "[[HelloThere]is[tiddler]else[BAR]]">>
** <<.inline-operator-example "[[Missing Tiddler]is[tiddler]else[BAR]]">>
这些运算符可以组合。例如:
* <<.inline-operator-example "[[新条目]is[missing]then[我佚失了]else[不,我没有佚失]]">>
[[else 运算符|else Operator]]可用于对佚失值套用默认值。在此示例中,我们利用以下事实:如果字段或条目不存在,或为空值,则 [[get 运算符|get Operator]]返回一个空清单:
* <<.inline-operator-example "[[HelloThere]get[custom-field]else[默认值]]">>
<<list-links "[tag[Conditional Operators]]">>
您可以利用[[首页|DefaultTiddlers]]机制,将 ~TiddlyWiki 配置为使用任何单个或一组条目来启动。
在 "控制台" 的 "信息" 页签下,输入字段标记为 "默认打开的条目",您可以列出要在启动时打开的任何条目。使用双方括弧包含空格的条目名称。例如:
```
FirstTiddler
SecondTiddler
[[Third Tiddler]]
```
你也可以使用[[筛选器表达式|Filter Expression]]打开多个条目。例如:
```
[tag[HelloThere]]
```
将打开标签为 <<tag HelloThere>> 的所有条目。
您还可以使用此技术以[[保留在启动时打开的条目|Preserving open tiddlers at startup]]
另请参阅 [[StartupActions]],以控制更高级的启动行为。
组态条目 [[$:/config/TiddlerInfo/Default]] 包含条目名称为缺省的条目信息页签。
缺省为 `$:/core/ui/TiddlerInfo/Tools` 对应到 ''工具'' 页签。其他可能的值为:
<ul>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]">
<li>
<$view field="title"/>
</li>
</$list>
</ul>
同意横幅插件有助于使网站符合 "cookie 规范",如[[欧盟一般数据保护规范|https://gdpr.eu/cookies/]]。
它呈现一个横幅,邀请用户接受或拒绝 cookies,在本地存储中跟踪其同意状态,以便横幅可以在后续访问中隐藏。
默认情况下,嵌入包含 <iframe>、<embed> 和 <object> 的内容将被封锁,除非用户同意接受 cookies。
可通过配置条目获得同意状态,以便根据是否授予同意,可以构造行为不同的内容。例如,提供一个用于嵌入的 ~YouTube 视频的宏,除非用户已接受 cookies,否则该视频自动使用 youtube-nocookie.com 变体网址。
请注意,使用此插件不保证符合任何特定法规。您将需要了解特定于您的情况的技术问题,并在必要时寻求法律建议。
<<.operator-examples "contains">>
<<.operator-example 1 "[contains:tags[HelloThere]]" "相当于 [tag[HelloThere]]">>
<<.operator-example 2 "[[$:/StoryList]contains[HelloThere]]" "检查条目 'HelloThere' 当前是否显示在故事河中">>
在互联网协定中,用于指示应该用于解译 web 资源的内容的类型。
在 TiddlyWiki, `type` 字段提供套用于主要的 `text` 字段的内容类型。
!! 常见的内容类型的清单
|!群组 |!类型 |!`type` 字段的内容|
|^''开发人员'' |数据字典 |application/x-tiddler-dictionary|
|~|~JavaScript 代码 |application/javascript|
|~|JSON 数据 |application/json|
|~|静态样式表 |text/css|
|^''图像''|GIF 图像 |image/gif|
|~|ICO 格式图标档 |image/x-icon|
|~|JPEG 图像 |image/jpeg|
|~|PDF 图像 |application/pdf|
|~|PNG 图像 |image/png|
|~|结构化的矢量图 |image/svg+xml|
|^''文本''|HTML 标记 |text/html|
|~|[[CSS|Cascading Style Sheets]] 样式表 |text/css|
|~|[[以逗号分隔的值|Comma-Separated Values]] |text/csv|
|~|纯文本 |text/plain|
|~|~TiddlyWiki 5 |text/vnd.tiddlywiki|
|~|~TiddlyWiki Classic |text/x-tiddlywiki|
<<.def contrastcolour>> [[宏|Macros]] 传回任两个被认为是最好的已知的 [[CSS|Cascading Style Sheets]] 对比颜色。
可以在[[标签丸的范本条目|$:/core/ui/TagTemplate]]看到一个示例。
!! 参数
;target
: 对比颜色 (通常是一个背景颜色)
;fallbackTarget
: 用于当 <<.param target>> 是未定义或无效的颜色时,一个替代选择对比颜色。
;colourA
: 两个可供选择的颜色中的第一个
;colourB
: 两个可供选择的颜色中的第二个
在此,我们专注于通过 Github 拉取请求的贡献,但有许多其他方式可以协助 ~TiddlyWiki 项目,例如[[回报错误|ReportingBugs]],或帮助[[改进我们的文档|Improving TiddlyWiki Documentation]]。
!! 拉取请求的规则
PRs 必须满足这些最低要求,然后才能考虑合并:
* PR 中的材料必须不受许可限制。这意味着:
** 作者必须拥有所有材料本身的版权
** 材料必须根据与 ~TiddlyWiki 的 BSD 授权兼容的授权
* 提交人必须签署贡献者授权协定(见下文)
* 每个 PR 只应进行单个功能更改
* PR 的标题应该不超过 50 个字符
* PR 的标题应该是大写的,不应该以句点结尾
* PR 的标题应该写为迫切情态。请参阅下文
* 在 PR 的本文中充分解释变革的动机和实施情况。专注于//为什么//和//什么//,而不是//如何//
* PRs 必须是自成一体的。虽然它们可以链接到其他地方的材料,一切需要了解的 PR 意图应该包括在内
* 适用于最终用户或开发人员的文档
* 观察编码样式
* 阅读开发者文档
* 在投资时间制作大型 PR 前,请先开立咨询问题
!! PR 标题的迫切情态
“迫切的情态” 是指写成发出命令或指示。详情请参阅[[此贴文|https://chris.beams.io/posts/git-commit/#imperative]],但要点是,PR 的标题应该是合理的,当使用完整句子 "If applied, this commit will..."。因此,例如,这些都是好的 PR 标题:
* If applied, this commit will //update the contributing guidelines//
* If applied, this commit will //change css-escape-polyfill to a $tw.utils method//
* If applied, this commit will //make it easier to subclass the wikitext parser with a custom rule set//
这些是措辞拙劣的 PR 标题:
* ~~If applied, this commit will //edit text widgets should use default text for missing fields//~~
* ~~If applied, this commit will //signing the CLA//~~
* ~~If applied, this commit will //don't crash if options.event is missing//~~
PR 标题可能还包括一个简短的首码,以指示其适用的子系统。例如:
* //Menu plugin: Include menu text in aerial rotator//
! 对拉取请求的评论
开源的原则之一是,许多对眼睛注视着代码,可以提高品质。因此,我们欢迎对代处理 PRs 的意见和批评。[[常规评论|https://conventionalcomments.org]]有一些技术用语,有助于使评论尽可能具有建设性和可操作性。值得注意的是,他们建议在评论前加上标签,以澄清意图:
|praise |Praise 美突显一些正向的东西。请尝试每次审核至少留下其中一条注释。请勿留下虚假的赞美(这实际上可能是有害的)。要寻找真诚的赞美 |
|nitpick |Nitpicks 是很小、琐碎,但必要的变化。区分挑剔的意见,有助于引导读者关注需要更多参与的评论 |
|suggestion |Suggestion 是改进正在审查的主题的具体要求。假设我们都想做最好的事,因此,这些意见永远不会被驳回为 “单纯的建议”,但被认真对待 |
|issue |Issues 代表面向用户的问题。如果可能的话,遵循这种评论的建议是非常好的 |
|question |Questions 是合适的,如果您有潜在的疑虑,但不太确定它是否有关。请提交人澄清或调查可快速解决 |
|thought |Thoughts 代表从审查中弹出的想法。这些评论本质上是不被阻止的,但它们是非常有价值的,可以更集中的倡议和指导机会 |
|chore |Chores 是在主题可以“正式”接受之前必须完成的简单任务。通常,这些评论引用了一些共同的处理。尝试留下处理描述的链接,以便读者知道如何解决该 chore |
! 贡献者授权协议
{{Contributor License Agreement}}
! 如何签署 CLA
{{Signing the Contributor License Agreement}}
---
//此项目的 CLA 文档,系使用 [[Harmony 项目模板|http://www.harmonyagreements.org]] 创建。"HA-CLA-I-LIST Version 1.0" 用于 "CLA-individual" 而 "HA-CLA-E-LIST Version 1.0" 用于 "CLA-entity"。//
\define tv-wikilink-template() https://tiddlywiki.com/static/$uri_doubleencoded$.html
! 对 TiddlyWiki5 作出贡献
{{Contributing}}
//此档是由 TiddlyWiki5 自动生成//
像其他开放源代码项目,TiddlyWiki5 需要个人贡献者签署一个贡献者许可协议。这是允许贡献者声称他们拥有自己的贡献著作权的法律协议,他们同意将其授权给 UnaMesa 协会(拥有 TiddlyWiki 的社区代表的法律实体)。
* 个人使用:[[licenses/CLA-individual|https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-individual.md]]
* 实体使用:[[licenses/CLA-entity|https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-entity.md]]
下列个人慷慨地付出他们的时间对 [[TiddlyWiki 的开发作出贡献|https://github.com/Jermolene/TiddlyWiki5/graphs/contributors]]:
* Jeremy Ruston ([[@Jermolene|https://github.com/Jermolene]])
* Dave Gifford ([[@giffmex|https://github.com/giffmex]])
* Bram Chen ([[@BramChen|https://github.com/BramChen]])
* Mario Pietsch ([[@pmario|https://github.com/pmario]])
* Xavier Cazin ([[@xcazin|https://github.com/xcazin]])
* Eric Shulman ([[@ericshulman|https://github.com/ericshulman]])
* Stephan Hradek ([[@Skeeve|https://github.com/Skeeve]])
* ~BuggyJef ([[@buggyj|https://github.com/buggyj]])
* Nathan Cain ([[@natecain|https://github.com/natecain]])
* Ton Gerner ([[@gernert|https://github.com/gernert]])
* Devin Weaver ([[@sukima|https://github.com/sukima]])
* João Bolila ([[@jbolila|https://github.com/jbolila]])
* David Johnston ([[@Brennall|https://github.com/Brennall]])
* David Jade ([[@davidjade|https://github.com/davidjade]])
* Bob Robison ([[@grayeul|https://github.com/grayeul]])
* [[@nameanyone|https://github.com/nameanyone]]
* Maurizio Pollio ([[@mpollio|https://github.com/mpollio]])
* Ogoshi Masayuki ([[@ogoshima|https://github.com/ogoshima]])
* Chris Sugden ([[@csugden|https://github.com/csugden]])
* [[@asampal|https://github.com/asampal]]
* Bow Yi Jang ([[@Eucaly|https://github.com/Eucaly]])
* Mal Gamble ([[@malgam|https://github.com/malgam]])
* Michael Fogleman ([[@mwfogleman|https://github.com/mwfogleman]])
* Daniel Barrett ([[@shendaras|https://github.com/shendaras]])
* Simon Baird ([[@simonbaird|https://github.com/simonbaird]])
* James Anderson ([[@welford|https://github.com/welford]])
* Jon Lister ([[@jayfresh|https://github.com/jayfresh]])
* [[@TheDiveO|https://github.com/TheDiveO]]
* Danielo Rodríguez ([[@danielo515|https://github.com/danielo515]])
* [[@willover|https://github.com/willover]]
* [[@slotik|https://github.com/slotik]]
* Irene Knapp ([[@IreneKnapp|https://github.com/IreneKnapp]])
* Brian Shaver ([[@shakerlxxv|https://github.com/shakerlxxv]])
* Tobi Beer ([[@tobibeer|https://github.com/tobibeer]])
* Craig Cook ([[@BoyCook|https://github.com/BoyCook]])
<<.def copy-to-clipboard>> [[宏|Macros]]显示一个将指定文本复制到剪贴板的按钮。如果操作成功,则显示通知;某些浏览器不允许此操作。
!! 参数
;src
: 要复制到剪贴板的文本
;class
: 可选的要指定给按钮的 CSS classes (缺省为 `tc-btn-invisible`)
;style
: 可选的要指定给按钮的 CSS 样式
<<.macro-examples "copy-to-clipboard">>
<$macrocall $name=".example" n="1" eg="""<<copy-to-clipboard "Mary had a little lamb">>"""/>
<$macrocall $name=".example" n="2" eg="""<$macrocall $name="copy-to-clipboard" src={{$:/SiteTitle}}/>"""/>
您可以经由从一个浏览器窗口拖动条目链接到另一个窗口,来复制 TiddlyWiki 文件里的个别条目到另一个 TiddlyWiki 文件。
如果要拖动链接,请先将其垂直移动,因为浏览器会将水平移动识别为文本选择。
下列[[宏|Macros]]内置于 ~TiddlyWiki 的核心:
<<list-links "[tag[Core Macros]]">>
下列[[变量|Variables]]内置于 ~TiddlyWiki 的核心:
<<list-links "[tag[Core Variables]] -[tag[Configuration Variables]]">>
如果您定义各种组态变量和宏,核心也会使用它们:
<<list-links "[tag[Configuration Variables]]">>
计数输入清单中的项目数,并将其十进位形式传回为一个字符串。
<<.operator-examples "count">>
<<.operator-example 1 "[tag[HelloThere]count[]]">>
! 简介
计数小工具在指定的[[筛选器表达式|Filters]]的输出中,显示唯一项目的个数。
! 内容与属性
`<$count>` 小工具的内文将被忽略。
|!属性 |!说明 |
|filter |进行计数的筛选器表达式 |
! 示例
<<wikitext-example-without-html """有 <$count filter="[tag[Examples]]"/> 个条目具有 <$macrocall $name=".tag" _="Examples" /> 标签""">>
若要创建自订格式导出条目的原始正文:
# 使用下列字段创建一条目:
#* ''tags'': [[$:/tags/Exporter]]
#* ''description'': 此导出的说明
#* ''extension'': 缺省扩展名为此导出格式 (包括句点:例如 `.tid`)
# 设置以下内容:
```
\define renderContent()
{{{ $(exportFilter)$ ||$:/core/templates/plain-text-tiddler}}}
\end
<<renderContent>>
```
其中变量 `exportFilter` 包含筛选器定义应导出的条目。
默认情况下,TiddlyWiki 在加载时,显示空白画面。如果您愿意,可以在维基加载时,增加一个特殊的 "启动画面"。
为了在 TiddlyWiki 初始化之前,显示启动画面,它将当作静态 HTML/CSS 嵌入到 TiddlyWiki HTML 文件中。这是通过 [[SystemTag: $:/tags/RawMarkupWikified/TopBody]] 完成的。
另一个在维基完成加载时,删除启动画面,HTML 应该包含在一个带有特殊类 `tc-remove-when-wiki-loaded` 的容器中。一旦维基加载,核心将自动删除具有此类的任何 DOM 元素。
这是一个简单的启动画面示例,只显示文本 //加载中...//。要使用它,将文本复制到一个新的条目,设其类型 `text/plain` 和标签 `$:/tags/RawMarkupWikified/TopBody`:
```
<div class="tc-remove-when-wiki-loaded">
加载中...
</div>
```
如果条目被赋予维基文本类型 `text/vnd.tiddlywiki` ,那么在保存文件时,维基化内容,允许进行转换等。例如,这是一个在加载消息中,引用网站标题的示例。要使用它,将文本复制到一个新的条目,设其类型 `text/vnd.tiddlywiki` 和标签 `$:/tags/RawMarkupWikified/TopBody`:
```
\rules only filteredtranscludeinline transcludeinline
<div class="tc-remove-when-wiki-loaded">
{{$:/SiteTitle}} 加载中,请稍候
</div>
```
`\rules` 指令用于限制被识别为两种内联转换形式的维基文本语法。这避免了对条目内容的意外破坏。
使用 CSS 动画和在此维基中配置的图像,有一个更复杂的示例启动画面:请参阅 $:/SplashScreen
! 创建条目
创建一个条目,可点击侧边栏的 <<.icon $:/core/images/new-button>> 按钮,或点击链接到一个佚失条目。链接到佚失条目显示为[[蓝色斜体|blue italics]]。
另请参阅:
* [[创建日志条目|Creating journal tiddlers]]
! 编辑条目
欲编辑现有的条目,请点击该条目右上方的 <<.icon $:/core/images/edit-button>> 按钮。
!! 草稿模式
当您创建一个新的条目或编辑一个现有条目时,该条目将进入草稿模式。这会以各种方式,显现一个修改该条目的控制皮肤。其包含几个部分,由上至下:
*''名称字段'' - 用于更改条目名称
*''标签选择器'' - 用于添加或移除标签。当您在框中输入标签的名称,下拉清单将显示匹配的现有标签,您可以从该清单中选择,或创建一个新的标签,然后点击添加按钮或按下 <kbd>Enter</kbd> 键 ,将标签添加至条目。每个标签显示为彩色丸,可点击标签丸中的 "×" 来移除该标签。
*''本文区域'' - 用于编辑条目的主要内容。点击''预览''按钮 (<<.icon $:/core/images/preview-closed>> / <<.icon $:/core/images/preview-open>>),预览您的更改。
*''类型选择器'' - 用于当一条目需要以特殊的方式显示,例如图像。 选项的清单,请参阅[[内容类型|ContentType]]。其默认值为 `text/vnd.tiddlywiki`,这表示该条目包含 WikiText。
*''字段选择器'' - 用于添加或删除条目的字段。例如,如果您正在编辑的条目用于标记其他条目,您可以添加一个 [[''list'' 字段|ListField]]用于改变这些将被列出的条目的顺序
! 保存、取消或删除
完成编辑后,点击条目右上方的按钮:
* ''确定''按钮 (<<.icon $:/core/images/done-button>>) 保存您对此条目的更改并离开草稿模式。若您的维基配置为[[自动保存|AutoSave]],则您的更改将永久保存。否则,他们将只是暂存于您的网页浏览器。而且,如果关闭您的 ~TiddlyWiki 页面之前,不先点击侧边栏的''保存变更''按钮 (<<.icon $:/core/images/save-button>>),您将失去这些变更。
* ''取消''按钮 (<<.icon $:/core/images/cancel-button>>) 放弃您的更改 (在询问您确认之后) 且离开草稿模式。
* ''删除''按钮 (<<.icon $:/core/images/delete-button>>) 删除整个条目 (在询问您确认之后)。
! 简介
日志条目都是使用日期和/或时间作为其名称,他们通常被作为记录时间戳信息的快速方式。
您可以使用附加标签于日志条目,将其链接到其他条目,帮助创建信息的项目之间的关系。
例如,您可以使用名为 "''2014 年 10 月 10''" 的日志条目,记录在那个特别的日子被捕捉的想法和信息。标签''购物''及''伦敦''可用来表示在伦敦购物的相关项目。
! 创建日志条目
创建一个日志条目最简单的方法,是使用在侧边栏的''工具''页签的''添加日志''按钮 <<.icon $:/core/images/new-journal-button>>。如果您发现自己经常使用该按钮,请点击旁边的复选框,使按钮出现于搜索框的上方。
''添加日志''按钮会创建一个空白的日志条目,标签为''日志'',且以今天的日期为其名称。如果该名称已存在,则开启此日志条目进行编辑。
! 创建设置标签的日志条目
一种常见的操作顺序,是创建 (或重新开启) 今天的日志条目,并以其他条目为其标签。这可由在其他条目的工具栏的''添加日志''按钮 <<.icon $:/core/images/new-journal-button>>来达成。您可以在条目的信息面板的''工具''页签找到该按钮。
例如,您可能正在查看一个名为 ''Oxford Street'' 的条目,并了解它是有关规划您的购物之旅。点击 ''Oxford Street'' 条目的''添加子日志''按钮,以创建标签为 ''Oxford Street'' 的日志条目。
! 自定义的日志条目
配置日志条目如何被创建,请点击 <<.icon $:/core/images/options-button>>[[控制台|$:/ControlPanel]]中的''信息''下的''基本''页签:
* "新日志条目的名称" 指定如何将这些条目命名为[[日期格式字符串|DateFormat]]。默认值 `DDth MMM YYYY` 会导致新条目的名称为 "10th October 2014"
* "新日志条目的标签" [指定|标题列表]标签将自动出现在新的日志条目。例如: `Journal [[Summer vacation]]`
提示:如果您想在点击''添加日志''时,创建一个单独的日志条目(即使您在同一天多次这样做),也可以在标题格式中包含时间。指定像是 `YYYY-0MM-0DD at 0hhh0mm0ss` 为日期格式。
另一个有用的技巧,是在标题格式的某处包含 `<<current条目>>`。这意味着,如果您在几个不同的条目上点击''添加子日志'',那么每个条目的名称,将构成所得日志条目名称的一部分。
! 制作自定义''添加日志''按钮
关于如何制作您自己的自定义添加日志按钮,请参阅[[制作自定义日志按钮|Making a custom journal button]]条目
<<.def csvtiddlers>> [[宏|Macros]]传回一些 [[CSV|Comma-Separated Values]] 格式的[[甄选条目|Title Selection]]的字段,每个条目一笔纪录(横列)。
于[[导出 CSV 的范本条目|$:/core/templates/exporters/CsvFile]]可以看到一个示例。
!! 参数
;filter
: 一个选择要包括哪些条目的[[筛选器|Filters]]
;format
: 预留日后扩充。应设置为 `quoted-comma-sep`
<<.def "当前条目">>提供了于 WikiText 的几个方面的上下文解释。
例如,无论当前条目为何,`{{!!title}}` 皆表示其 <<.field title>> 字段的值。这种技术可以用于创建通用的[[范本条目|TemplateTiddlers]].
当前条目的名称总是可以在 <<.vlink currentTiddler>> 变量找到。
更改当前条目的两个最常见的方式是:
* <<.wlink TiddlerWidget>> 小工具
* <<.wlink ListWidget>> 小工具 (当其 <<.attr variable>> 属性未被覆写时)
当前条目因此往往<<.em 不>>同于 [[条目正被查看或编辑|storyTiddler Variable]]。
<<.def currentTiddler>> [[变量|Variables]]包含[[当前条目|Current Tiddler]]的名称。
WikiText 的几个方面使用此条目为其上下文。其结果是,在一个 <<<.wlink ListWidget>> 小工具或[[范本条目|TemplateTiddlers]],通常无需明确指定条目名称。
比较 <<.vlink storyTiddler>>。
<<.variable-examples "currentTiddler">>
下列两个示例具有相同的含义:
<$macrocall $name=".example" n="1" eg="""<$view field=title/>"""/>
<$macrocall $name=".example" n="2" eg="""<$view tiddler=<<currentTiddler>> field=title/>"""/>
下一个示例显示 <<.wlink ListWidget>> 小工具如何改变当前条目:
<$macrocall $name=".example" n="3"
eg="""<ol>
<$list filter="[prefix[J]]">
<li><<currentTiddler>></li>
</$list>
</ol>"""/>
[data-tiddler-title="Custom styles by data-tiddler-title"] {
border: 1px solid blue;
}
[data-tags*="example-test"] {
border: 2px solid pink;
}
[data-tags*="example-hardlinebreaks"] .tc-tiddler-body {
word-break: normal;
word-wrap: break-word;
white-space: pre-wrap;
}
[data-tags*="data-tags-styles"] .tc-tiddler-body {
display: block;
padding: 14px;
margin-top: 1em;
margin-bottom: 1em;
word-break: normal;
word-wrap: break-word;
white-space: pre-wrap;
background-color: #f5f5f5;
border: 1px solid #cccccc;
padding: 0 3px 2px;
border-radius: 3px;
font-family: Monaco, Consolas, "Lucida Console", "DejaVu Sans Mono", monospace;
}
! 属性:data-tags
<<.from-version "5.1.16">>
~TiddlyWiki 核心为呈现的内容,添加几个''属性'',可以将自订样式套用于条目内容。
例如, 此条目设标签为:<<tag "How to apply custom styles">> 与 <<tag "example-test">> ,所以属性看起来像这样:
```
data-tags="[[How to apply custom styles]] example-test"
```
''重要:''条目标签是''未''排序的,所以呈现输出的顺序可能不同!
!! 示例
下列的 CSS 在[[自订 data-styles|Custom data-styles]] 中定义,并为此条目创建一个下列的 CSS 在[[自订 data-styles|Custom data-styles]] 中定义,并为所有标签为 `example-test` 的条目 (包含此条目) 建立一个粉红色边框。
```
[data-tags*="example-test"] {
border: 2px solid pink;
}
```
!!! 样式样式表
因此,要以一个合适的方式,显示标签为 `data-tags-styles` 的条目,可用以下代码。(本可以使用: `$:/tags/Stylesheet` , 但这将影响此维基的所有样式,此非我们本意)
''重要:'' 别忘了也指定 `.tc-tiddler-body`,否则整个条目,包括条目名称都会改变!请参阅:[[自订数据样式|Custom data-styles]]
```
[data-tags*="data-tags-styles"] .tc-tiddler-body {
display: block;
padding: 14px;
margin-top: 1em;
margin-bottom: 1em;
word-break: normal;
word-wrap: break-word;
white-space: pre-wrap;
background-color: #f5f5f5;
border: 1px solid #cccccc;
padding: 0 3px 2px;
border-radius: 3px;
font-family: Monaco, Consolas, "Lucida Console", "DejaVu Sans Mono", monospace;
}
```
!! 硬式换行
此机制对想写散文的用户,可能很方便!请参阅[[使用 CSS 硬式换行|Hard Linebreaks with CSS]]
!! 更多可能性
{{Attribute Selectors}}
! 属性:data-tiddler-title
<<.from-version "5.1.16">>
~TiddlyWiki 核心为呈现的内容添加了几个''属性''。使用这些属性,可以将自定义样式套用到条目内容。
例如,此条目名为:"{{!!title}}" ,因此属性如下所示:
```
data-tiddler-title="Custom styles by data-tiddler-title"
```
!! 示例
下列的 CSS 在[[自定义 data-styles|Custom data-styles]] 中定义,并为此条目创建一个蓝色边框。
```
[data-tiddler-title="Custom styles by data-tiddler-title"] {
border: 1px solid blue;
}
```
要为每一个名称以 `$:/` 起始的条目即系统条目,创建一个绿色边框,您需要像这样使用 CSS:(此处未套用,但您可以试用它)
```
[data-tiddler-title^="$:/"] {
border: 1px solid green;
}
```
!! 更多可能性
{{Attribute Selectors}}
''条目字段:<<.field class>>'' <<.from-version "5.1.16">>
[[标签管理器|$:/TagManager]]允许我们设置一个条目 <<.field color>> 字段,用于定义 "标签丸" 的颜色。自 <<.from-version "5.1.16">> 起,我们可以定义一个 <<.field class>> 字段,直接插入于 [[ViewTemplate|$:/core/ui/ViewTemplate]],且可以用于样式:
"""
title: `anyName`
tags: `$:/tags/Stylesheet`
class: `myClass`
"""
每个具有 <<.field class>> 字段的条目,可以这样的订制样式!
```
.myClass {
border: 2px solid blue;
}
```
了解更多信息:[[如何套用自订样式|How to apply custom styles]]
<<.from-version "5.1.16">>
<<list-links "[tag[Custom Styles FAQ]]">>
有关客制化 TiddlyWiki 的信息
<<list-links "[tag[Customise TiddlyWiki]]">>
默认情况下,侧边栏的搜索框结果显示为条目名称的简单列表。搜索结果可通过添加插件可视化定制,以不同的方式显示搜索结果。 (如果检测到另外的搜索结果的可视化,则自动分页签显示)。
可视化搜索结果存放在条目标签为 [[$:/tags/SearchResults]] 的条目。默认的搜索结果列表是实现在系统条目 [[$:/core/ui/DefaultSearchResultList]]。
若要创建一个新的搜索结果可视化:
# 创建一个新条目,设其标签为 [[$:/tags/SearchResults]]
# 使用小工具变量 ''searchTiddler'' 访问包含当前搜索词的条目名称
如果你想要默认显示新的可视化,创建一名为 [[$:/config/SearchResults/Default]] 的条目,包含您想要默认显示搜索可视化的条目名称。
以下是显示结果按时间倒序的另一种可视化的一个示例:
```
\define searchResults()
<$set name="resultCount" value="""<$count filter="[!is[system]search{$(searchTiddler)$}]"/>""">
{{$:/language/Search/Matches}}
</$set>
<<timeline subfilter:"!is[system]search{$(searchTiddler)$}">>
\end
<<searchResults>>
```
<<.from-version 5.1.23>> 侧边栏搜索引入了更复杂的搜索机制,让使用快捷键 <kbd><<displayshortcuts ((input-down))>></kbd> 和 <kbd><<displayshortcuts ((input-up))>></kbd> 导航搜索结果成为可能. 要将该机制添加到您自定义的搜索结果,请按照以下简单步骤操作:
# 您的条目标签 <<tag-pill "$:/tags/SearchResults">> 可通过 the <<.var configTiddler>> 变量访问
# 搜索字段中的用户输入,可通过 <<.var userInput>> 变量访问
# 使用字段 <<.field first-search-filter>> 和 <<.field second-search-filter>> 保存用于搜索结果的筛选器。相关详细信息,请参阅条目 $:/core/ui/DefaultSearchResultList
# 使用以下表单,突出显示导航的搜索结果,修改之以满足您的需求:
```
<$list filter="[<userInput>minlength[1]]" variable="ignore">
<$list filter={{{ [<configTiddler>get[first-search-filter]] }}}>
<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>
<$transclude tiddler="$:/core/ui/ListItemTemplate"/>
</span>
</$list>
</$list>
```
<$macrocall $name=".tip" _="请注意,<<.var searchTiddler>> 变量仍然包含用于对搜索结果进行排序的条目的名称。<<.var editTiddler>> 变量包含正在编辑的条目的名称。"/>
默认情况下,一个 [[TiddlyWiki 于 Node.js|TiddlyWiki on Node.js]] 的实例使用一个[[维基文件夹|TiddlyWikiFolders]],并创建新条目文件,通过使用消毒和消除歧义的条目名称作为文件名称。所有文件路径操作都相对于一个 `default-tiddler-location` 其默认为维基文件夹的 `tiddlers/` 目录。可以通过映射维基的 tiddlywiki.info 文件中的路径,使用 `config` 对象中的 `default-tiddler-location` 属性来覆盖此内容。
`.tid` 的默认文件扩展名用于缺少 `type`字段的条目,或类型为 "text/vnd.tiddlywiki" 的条目。其他类型的条目会根据其 MIME 类型(在启动时定义)保存。
逻辑路径(目录和文件名)和扩展名,都可以通过创建可选的 [[$:/config/FileSystemPaths]] 和 [[$:/config/FileSystemExtensions]] 来独立自定义。
! 文件系统路径
可以通过创建包含一个或多个[[筛选器表达式|Filter Syntax]] 的 [[$:/config/FileSystemPaths]] 条目,来自定义逻辑路径,每列一个。每次将条目保存到磁盘时,都会依序针对每个筛选器进行测试,并且第一个筛选器的第一个输出,用于生成任何输出,被视为用于条目文件的逻辑路径。如果逻辑路径已更改,则将创建一个新文件,并删除旧文件。
条目仅限于写入至[[维基文件夹|TiddlyWikiFolders]],在 `default-tiddler-location` 设置中定义的路径,或保存在 $:/config/OriginalTiddlerPaths 条目中的特定路径 (详见 [[tiddlywiki.files 文件|tiddlywiki.files Files]])。将条目保存到磁盘的任何错误,其逻辑路径不会以维基文件夹的路径开始,这是最常见的错误,会导致通过 Javascript 的 `encodeURIComponent()` 方法对文件路径进行编码,并且将条目保存为此档,在维基文件夹的 `default-tiddler-location` 中。
逻辑路径不包括磁盘上的扩展名(见下文),且可以使用 `/` 或 `\` 作为目录分隔符号(在生成物理路径时,此路径将被替换为 ~TiddlyWiki 运行所在平台的正确分隔符号)。如果所有筛选器都不匹配,则逻辑路径只是将标题中的所有字符 `/\<>~:"|?*^` 的匹配项替换为 `_`,以确保生成的路径,在所有受支持的平台上都是合法的。逻辑路径也限制为 200 个字符。如果具有此名称的文件已存在,则一个空格和数字将追加到最终的文件路径中,并且数字会递增,直到找到未使用的路径。
!! 示例
```
[is[system]!has[draft.of]removeprefix[$:/]addprefix[_system/]]
[is[draft]search-replace:g:regexp[/|\\],[_]addprefix[drafts/]]
[tag[task]addprefix[mytasks/]]
[!tag[externalnote]addprefix[wiki/]]
```
<<.note "所有路径都相对于维基的 `default-tiddler-location`。">>
这将存放新创建的系统条目于 `./_system` (去除 `$:/` 首码之后),不是其他条目的草稿。接下来,所有草稿名称中的路径分隔符都替换为 `_`,并存放于 `./drafts/`。,标签为 [[task]] 的条目,则存放于子目录 `./mytasks`。最后,标签不为 "externalnote" 的所有条目,将符合最终的 `[!tag[externalnote]addprefix[wiki/]]` 将其存放在 `/wiki/`。在此示例中,使用 [[tiddlywiki.files 文件|tiddlywiki.files_Files]] 导入了具有标签 "externalnote" 的条目,其 "isEditableFile" 标志设置为 `true`,导致服务器记住其在 $:/config/OriginalTiddlerPaths 条目中的源文件案路径。
每当一个条目生成一个 $:/config/FileSystemPaths 筛选器匹配时,条目名称中的任何 `/` 或 `\` 都映射到路径分隔符号。使用上述筛选器,非系统、非草稿条目 `some/thing/entirely/new`(没有标签)将保存到 `./wiki/some/thing/entirely/new.tid`(即,名为 `entirely/` 的目录中的文件 `new.tid`)。因此, $:/config/FileSystemPaths 本身的最终结果为 `./_system/config/FileSystemPaths.tid` 或 `.\_system\config\FileSystemPaths.tid`,取决于平台。
! 文件系统扩展名
通常,磁盘上条目的档系统扩展名取决于由坏字段的存在(<<.field text>> 字段以外的多行字段、可以自前面或后面修剪空格的字段等),在这种情况下,使用单档 ".json" 条目文件格式。
如果条目没有错误字段,则参考 <<.field type>> 字段以查找匹配的文件类型,'. tid' 则用于无类型值的条目。引导引擎在 [[$:/boot/boot.js]] 条目中,定义了一组这些条目类型到文件类型的关系。搜索 `// Add file extension information`,以寻找定义这些关系的代码部分。
可以通过创建包含一个或多个[[筛选表达式|Filter Syntax]]的条目 [[$:/config/FileSystemExtensions]],来自定义个别条目文件的扩展名,每个都在其自己的一行。每次将条目将保存到磁盘时,都会根据这些筛选器进行测试,并且以第一个筛选器的第一个输出,生成任任何输出,这些输出将用作条目文件的扩展名。扩展名应始终以前导句点开始(参见示例)。 如果没有筛选器匹配,则使用默认扩展名。如果扩展名已更改,则创建一个新档,并删除旧档。
<<.note """一个 ".tid" 的结果将强制将条目当作单档文本条目写入磁盘。".json" 的结果将强制将条目当作 json 格式的单档条目写入磁盘(数组中的单个条目字段对象),而不是当作类型为 "application/json" 的条目。所有其他已识别的文件类型,都将使用其定义的扩展名保存,''text'' 字段以外的所有字段,则以同文件名的 *.meta 文件保存。""">>
!! 示例
```
[tag[.txt]then[.txt]]
[tag[.json]then[.json]]
[tag[.tid]then[.tid]]
```
这将导致具有标签 ".txt" 的所有条目的标签字段,都保存在取决于文件系统路径筛选器的文件路径上,但其 <<.field text>> 字段保存为一个 *.txt 文件,且其他所有字段保存为 *.txt.meta 文件。
最后的 `[!has[draft.of]]` 将匹配所有剩下的非草稿条目。因为有一个匹配,条目名称中的任何 `/` 或 `\` 都映射到路径分隔符号。因此, `some/thing/entirely/new` 将被保存到 `tiddlers/some/thing/entirely/new.tid`(例如 `new.tid` 文件在一个名为 `entirely` 的目录中)。
接下来,所有带有 ".json" 标签的条目,保存为 *.json 单个文件条目。最后,所有带有标签 ".tid" 的条目,均保存为单文件文本条目。如果一个条目不匹配任何筛选器,则将使用取决于条目的 `type` 字段的默认的扩展名。
<<.from-version "5.1.23">>
<<.op cycle>> 操作符至少需要一个参数。
```
[cycle[<titles>],[step-size]]
```
* ''titles'' : 要循环切换输入列表中的标题列表。如果输入中没有参数的标题,将添加第一个标题。如果输入中存在参数的标题,它替换为参数中的下一个标题。请注意,此参数中指定的所有标题应是唯一的。
* ''step-size'': (可选)。默认值为 1。指定参数清单中每次要移动的步骤数。可以是负数。
<$macrocall $name=".tip" _="<<.op cycle>> 操作符将其第一个参数解译为要循环的标题列表,[[toggle 操作符|toggle Operator]]接受无限数量的不同参数,并提供类似的功能。"/>
<<.operator-examples "cycle">>
循环浏览要添加为标签值的清单:
```
<$action-listops $tiddler="target" $tags="+[cycle[todo soon now maybe done ]]" />
```
以相反的顺序循环浏览要添加为标签值的清单:
```
<$action-listops $tiddler="target" $tags="+[cycle[todo soon now maybe done ],[-1]]" />
```
<<.using-days-of-week>>
<<.operator-example 1 """[list[Days of the Week]first[]] +[cycle{Days of the Week!!list}]""">>
<<.operator-example 2 """[list[Days of the Week]first[]] +[cycle{Days of the Week!!list},[2]]""">>
此 D3 插件集成 D3 可视化程序库 与 TiddlyWiki。
请参阅演示于 https://tiddlywiki.com/plugins/tiddlywiki/d3
您可以用 `--` 生成一个 n-dash 字符、`---` 生成一个 m-dash。例如 -- 这是一个例子 --- 这个也是
<<.dlink-ex "data URI" "https://en.wikipedia.org/wiki/Data_URI_scheme">> 是一种存储数据的方式 (如图像),与用于网页和[[样式表|Cascading Style Sheets]]访问外部资源的地址兼容。
<<.mlink datauri>> 宏可以用于 ~TiddlyWiki 内生成 data URIs。
数据条目是包含在条目里的小型数据库。
有两种标准的格式:
* [[字典条目|DictionaryTiddlers]]
* [[JSON 条目|JSONTiddlers]]
也可以解析其他格式条目,使其生成表现得像数据条目的数据区块。
使用 TextReference 查找一个属性名称的值。例如,若一名为 `MonthDays` 的[[字典条目|DictionaryTiddlers]]包含:
```
oct:31
nov:30
dec:31
```
... 则 `{{MonthDays##nov}}` 将解析为 `30` 的值。
同样是如此,若 `MonthDays` 为一[[JSON 条目|JSONTiddlers]] 其内容如下:
```
{"oct":31,"nov":30,"dec":31}
```
请注意,//目前只能从 JSONTiddler 的根对象的直接属性中检索数据。//
ActionSetFieldWidget 和 ActionListopsWidget 小工具可以通过标示在 $index 属性的属性名称,操作数据条目的命名属性。以 ActionSetFieldWidget 命名属性创建或修改其 $value 属性。以 ActionSetFieldWidget 命名属性删除,则忽略 $value 属性。 ActionListopsWidget 分配经由其 $filter 和 $subfilter 属性构造的列表的命名属性。
<<.def datauri>> [[宏|Macros]]传回一个条目内容的 [[data URI|Data URI]]
此宏常用于[[样式表|Cascading Style Sheets]]条目,例如引用行内图像和字体:
> `background: url(<<datauri "Motovun Jack.jpg">>);`
对于非文本的条目,data URI自动为 [[base64|Base64]] 编码。
!! 参数
;title
: 一个条目的名称,例如图像
<<.macro-examples "datauri">>
<$macrocall $name=".example" n="2"
eg="""<style>
.jack {
background: url(<$macrocall $name="datauri" title="Motovun Jack.jpg" $output="text/plain"/>);
height: 300px;
}
</style>
<div class="jack"/>"""/>
该示例由 <<.wid macrocall>> 小工具调用 <<.var datauri>>。它需要防止宏的输出被解析为 WikiText,因为这会将 data URI 转成一个 <<.wlink LinkWidget>> 小工具而破坏该示例。如果该示例是在 CSS 条目,你可以简单地写成:
> `background: url(<<datauri "Motovun Jack.jpg">>);`
一个条目的某些[[字段|TiddlerFields]]用来存放日期和时间。~TiddlyWiki 支持从 -9999 到 9999 年的日期。
两个标准的日期字段是 <<.field created>> 和 <<.field modified>>。
日期字段的值是 17 或 18 个字符的字符串:
* 4 位数的年
* 2 位数的月
* 2 位数的日
* 2 位数的时
* 2 位数的分
* 2 位数的秒
* 3 位数的毫秒
为了避免因时区差异生成的问题,~TiddlyWiki 总是使用 [[UTC|https://en.wikipedia.org/wiki/Coordinated_Universal_Time]]。
当作一个示例,本条目的 <<.field created>> 字段值为 <<.value """<$view field="created"/>""">>。
日期可以[[转换为其他格式|DateFormat]]显示:
<$macrocall $name="wikitext-example-without-html"
src="""<$view field="created" format="date" template="DDD DDth MMM YYYY"/>""">
当用于显示日期值 (将 `format` 属性设置为 ''date'') 时,ViewWidget 接受 `template` 属性,该属性允许指定日期值的格式。格式字符串有以下替换处理:
|!替换符号 |!替换值 |
|`DDD` |星期别全名 (例如,"Monday") |
|`ddd` |星期别缩写 (例如,"Mon") |
|`DD` |日 |
|`0DD` |日,前补零 |
|`DDth` |日,后缀 |
|`WW` |ISO-8601 当年度周别 |
|`0WW` |当年度周别,前补零 |
|`MMM` |月份全名 (例如,"July") |
|`mmm` |月份缩写 (例如,"Jul") |
|`MM` |月份 |
|`0MM` |月份,前补零 |
|`YYYY` |四位数西元年份 |
|`YY` |两位数西元年份 |
|`wYYYY` |四位数西元年份与当年度周别 |
|`aYYYY` |<<.from-version "5.1.23">> 完全年分,但负日期显示为正数 |
|`wYY` |两位数西元年份与当年度周别 |
|`{era:BCE||CE}` |<<.from-version "5.1.23">> 显示年份为负数、零或正数的其他字符串(见下文) |
|`hh` |时 |
|`0hh` |时,前补零 |
|`hh12` |时,12 时制 |
|`0hh12` |时,12 时制,前补零 |
|`mm` |分 |
|`0mm` |分,前补零 |
|`ss` |秒 |
|`0ss` |秒,前补零 |
|`XXX` |毫秒 |
|`0XXX` |毫秒,前补零 |
|`am` or `pm` |小写字母 AM/PM |
|`AM` or `PM` |大写字母 AM/PM |
|`TZD` |时区位移 |
|`\x` |用于脱逸字符,否则将有特殊意义 |
|`[UTC]`|时间位移表示日期到 UTC。必须始于格式字符串 |
请注意,其他文本通过不变,允许逗号、冒号或其他要使用的分隔符号。
`{era:BCE||CE}` 符号可以为年份指定不同的字符串,可以是负数、零或正数。例如, `{era:BC|Z|AD}` 将显示 `BC` 表示负数年, `AD` 表示正数年,而 `Z` 表示零年。
! 示例
|!标记 |!输出 |
|`DDth MMM YYYY` |16th February 2011 |
|`DDth MMM \M\M\M YYYY` |16th February MMM 2011 |
|`DDth mmm YYYY 0hh:0mm:0ss` |16th Feb 2011 11:38:42 |
基于[[Pikaday|https://github.com/dbushell/Pikaday]]的交互式日期选择器插件,可以在这里找到演示:{{!!url}}。
<<<
datepicker is a TiddlyWiki plugin that allows you to use a widget much like EditTextWidget to pick a date, and optionally a time. It shows a nice interactive mini-calendar when clicked, allows you to set a date format for display, and is compatible with core date fields such as `modified` and `created`.
<<<
<<.this-is-operator-example>> 其 <<.field list>> 字段包含下列项目:
<<list-links "[list[]]">>
选择指定的日期字段 (默认为 "modified") 于指定的日期范围的条目。时间部分将被忽略。
<<.operator-examples "days">>
<<.operator-example 1 "[days[-14]]" "最近 14 天内修改的条目">>
<<.operator-example 2 "[!days:created[-800]]" "超过 800 天前创建的条目">>
此筛选器可用于强调清单中的新项目。例如:
<$macrocall
$name="wikitext-example-without-html" src=
"""
<ul>
<$list filter="[tag[ReleaseNotes]!<currentTiddler>!sort[modified]]">
<li>
<$link><$view field="title"/></$link>
<$list filter="[<currentTiddler>days[-180]]"> @@color:red;^^新^^@@</$list>
<$list filter="[<currentTiddler>days[-500]!days[-180]]"> @@color:black;^^近期^^@@</$list>
</li>
</$list>
</ul>
"""/>
"HTML 解码" 意思是替换 HTML 实体呈现特殊字符为该字符︰
* `&` 替换为 `&`
* ` ` 替换为 ` ` (不分行空格)
* `<`替换为 `<`
* `>` 替换为 `>`
* `"` 替换为 `"`
<<.operator-examples "decodehtml">>
<<.operator-example 1 "[[Title with < angle brackets >]] +[decodehtml[]]">>
<<.operator-example 2 "[[Title with an & ampersand]] +[decodehtml[]]">>
[[decodeURI|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI]] 操作的详细信息,请参阅 Mozilla 开发者网络。
<<.operator-examples "decodeuri">>
<<.operator-example 1 "[[Title%20with%20Space]] +[decodeuri[]]">>
<<.operator-example 2 "[[Title%20with%20Space]] [[Another%20title%20with%20Space]] +[decodeuri[]]">>
[[decodeURIComponent|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent]] 操作的详细信息,请参阅 Mozilla 开发者网络。
<<.operator-examples "decodeuricomponent">>
<<.operator-example 1 "[[Title%20with%20Space]] +[decodeuricomponent[]]">>
<<.operator-example 2 "[[Title%20with%20Space]] [[Another%20title%20with%20Space]] +[decodeuricomponent[]]">>
"Default tiddlers" 是指在浏览器启动时开启的条目清单,如果网址列不包括[[固定链接|PermaLinks]])。
启动时,系统条目 [[$:/DefaultTiddlers]] 的内文,将被当作[[筛选器表达式|Filter Expression]]检索并计算。然后,条目名称的结果清单插入[[故事河|Story River]]。
[[控制台|$:/ControlPanel]]的''信息/基本''页签包含一个文本方块,用于直接访问 [[$:/DefaultTiddlers]]。
这些都是在本文档中使用的技术的单词和惯用语的定义(与 TiddlyWiki 本身生成的[[概念|Concepts]]不同)。
<<list-links "[tag[Definitions]]">>
! 定义
以此语法创建 HTML 定义清单:
<<wikitext-example src:"; Term being defined
: Definition of that term
; Another term
: Another definition
">>
{{$:/language/Help/deletetiddlers}}
这些都是示例条目提供为 TiddlyWiki 文档的一部分。
\define allshortcuts(descriptor)
<$wikify name=scutlist text=<<displayshortcuts (($descriptor$)) '' ' ' ''>> >
<$list filter="[<scutlist>split[ ]join[</kbd> or <kbd>]addprefix[<kbd>]addsuffix[</kbd>]]" variable=scts><<scts>></$list>
</$wikify>
\end
\define kdi-demo-textmacrocall()
```
<$macrocall $name=keyboard-driven-input
tiddler="$(tiddler)$"
storeTitle="$(storeTitle)$"
selectionStateTitle="$(selectionStateTitle)$"
configTiddlerFilter="$(configTiddlerFilter)$"
/>
```
\end
<$vars configTiddlerFilter="[[kdi-demo-configtid]]" tiddler="kdi-demo-tiddler" storeTitle="kdi-demo-storeTitle" selectionStateTitle="kdi-demo-selectionStateTitle" >
[[keyboard-driven-input 宏|keyboard-driven-input Macro]]用于创建依用户类型更新的筛选清单。它还允许浏览清单,并以键盘使用清单项目调用宏。
它由 ''[[edit-text 小工具|EditTextWidget]]'' 组成,包裹在 [[keyboard 小工具|KeyboardWidget]]。有 <<.def keyboard>> 小工具侦听 `((input-accept))`、`((input-accept-variant))` 和 `((input-cancel))` 快捷键,但是响应这些事件没有默认行为; 必须编写宏,以适应使用案例。过滤选项清单也没有默认可视化。
!! 由 <<.var keyboard-driven-input>> 宏处理的键盘输入类型:
!!! 无法设置:
以下键盘事件调用定义于 [[$:/core/macros/keyboard-driven-input]] 中的 <<.var keyboard-driven-input>> 宏。
|输入 |目的 |宏 |h
|键入输入 |组成一个字符串,用于清单筛选器 |<<.var keyboard-input-actions>> |
|`((input-up))` (<<allshortcuts input-up>>) |暂时选择筛选清单中的上一个项目 |<<.var input-next-actions>> with parameters <<.param afterOrBefore>>=`"before"`, <<.param reverse>>=`"reverse[]"` |
|`((input-down))` (<<allshortcuts input-down>>) |暂时选择筛选清单中的下一个项目 |<<.var input-next-actions>> with <<.param afterOrBefore>>=`"after"`, <<.param reverse>>=`""` |
上述所有操作都会生成或修改数据,<<.var keyboard-driven-input>> 将保留这些数据在使用宏参数的指定条目中。然后,不仅可以通过快捷键调用的宏访问数据,还可以在这些之外访问数据,例如显示筛选清单的宏。
!!! 可通过参数设置:
以下键盘事件,调用其名称在参数中指定的宏至 <<.var keyboard-driven-input>>。预期目的为建议由参数名称,但在 [[$:/core/macros/keyboard-driven-input]] 中未定义默认宏。
|[[快捷键描述符号|Keyboard Shortcut Descriptor]] |组合键 |参数 |h
|`((input-accept))` |<<allshortcuts input-accept>> |<<.param inputAcceptActions>> |
|`((input-accept-variant))` |<<allshortcuts input-accept-variant>> |<<.param inputAcceptVariantActions>> |
|`((input-cancel))` |<<allshortcuts input-cancel>> |<<.param inputCancelActions>> |
<<.var keyboard-driven-input>> 在动作中可以看作是 ~TiddlyWiki 中的各种内核功能的一部分,例如:[[搜索功能|Searching in TiddlyWiki]]、[[tag-picker Macro]] 和 [[编辑器工具栏|Editor toolbar]] 中的 dropdown 界面,如[[插入链接|Insert link]].
!! 演示的最小成分
请记住,<<.var keyboard-driven-input>> 宏本身不会显示清单结果,或用选定的选项做任何事情,一个 <<.var keyboard-driven-input>> 宏的最小的示范需要:
# ''一个条目,包含一个筛选器'',其结果取决于用户的文本输入,以生成用户可以选择的选项
# ''几个参数:''
#*''一个筛选器'',返回可以找到步骤 1 中描述的筛选器的条目名称,以及
#*''条目名称'',用于存放状态信息以回应输入事件。这些条目不需要已经存在。如果他们已经存在,<<.var keyboard-driven-input>> 宏将更改其内容。
!! 搜索筛选器
默认情况下, <<.var keyboard-driven-input>> 将搜索于一个条目的 (其标题由下面讨论的参数指定) <<.field first-search-filter>> 和 <<.field second-search-filter>> 字段中的筛选器。
此筛选器可以参考称为 <<.var userInput>> 的变量,其显示 <<.def edit-text>> 小工具的内容,如存放于状态条目(下面讨论),在最近的 <kbd><<displayshortcuts ((input-up))>></kbd> 或 <kbd><<displayshortcuts ((input-down))>></kbd> 事件的时间.
''注意:'' 如果要在 <<.var keyboard-driven-input>> 宏之外的上下文中引用此筛选器 (例如在显示筛选器选项的弹出窗口中),变量 <<.var userInput>> 也必须在这些上下文中定义(通过从状态条目中读取)。
!! 最小参数
|参数名称 |Notes |h
|<<.param configTiddlerFilter>> |这是一个筛选器,而不是一个条目名称,允许有条件的行为 (例如,检查作用中的选项卡,或选择可能不存在的筛选器,并带有回传)。<br>返回的标题必须属于现有的条目,包含至少一个筛选器,其中 <<.var keyboard-driven-input>> 可以生成其结果清单。 |
|<<.param tiddler>> |此条目包含键入的输入,或即时结果选择,取决于最近的事件。其更新了 ''edit-text'' 小工具中的每个按键,//和// 当用户使用 <kbd><<displayshortcuts ((input-up))>></kbd> 或 <kbd><<displayshortcuts ((input-down))>></kbd> 键,循环筛选结果。 |
|<<.param storeTitle>> |此条目始终反映用户输入 (嵌入自条目 <<.param tiddler>>,每次于 ''edit-text'' 小工具内按键后)。 |
|<<.param selectionStateTitle>> |此条目已更新于 <kbd><<displayshortcuts ((input-up))>></kbd> 或 <kbd><<displayshortcuts ((input-down))>></kbd> 事件,并包含用户输入带有后缀 `-userInput`,或与后缀 `-primaryList` 或 `-secondaryList` 的即时选择, 取决于最多两个筛选器中哪一个生成它的来源清单。 |
!! 演示设置
我已创建了一个名为 <$list filter=<<configTiddlerFilter>> /> 的条目,并将以下筛选器放入其 <<.field first-search-filter>> 字段:
<code><$list filter=<<configTiddlerFilter>> ><$text text={{!!first-search-filter}}/></$list></code>.
此筛选器用于非系统条目,其名称包含用户键入的文本。
以 <<.var keyboard-driven-input>> 使用上述筛选器,参数 <<.param configTiddlerFilter>> 的值,应该是返回 <$list filter=<<configTiddlerFilter>> /> 的筛选器。
我可以相当任意地选择 <<.param tiddler>>、<<.param storeTitle>> 和 <<.param selectionStateTitle>> (只需确保不要使用我不想改变的条目名称)。
此展示现在可以调用以下宏调用:
<<kdi-demo-textmacrocall>>
!! 演示
请试着在此处键入: <$macrocall $name=keyboard-driven-input
tiddler=<<tiddler>>
storeTitle=<<storeTitle>>
selectionStateTitle=<<selectionStateTitle>>
configTiddlerFilter=<<configTiddlerFilter>>
/>
观察下表中各种状态条目的变化。使用 <kbd><<displayshortcuts ((input-up))>></kbd> 和 <kbd><<displayshortcuts ((input-down))>></kbd> 键浏览筛选器结果。如果没有任何变化,请尝试较短的输入,扩大筛选器。如果输入的长度为零,清单将包含所有非系统条目。
@@.tablestyle
|参数名称 |条目名称 |条目的 <<.field text>> 字段的内容 |h
|<<.param tiddler>> |{{{[<tiddler>]}}} |<pre><$text text={{{[<tiddler>get[text]]}}}/></pre>|
|<<.param storeTitle>> |{{{[<storeTitle>]}}} |<pre><$text text= {{{[<storeTitle>get[text]]}}}/></pre>|
|<<.param selectionStateTitle>> |{{{[<selectionStateTitle>]}}} |<pre><$text text={{{[<selectionStateTitle>get[text]]}}}/></pre>|
@@
<<.var keyboard-driven-input>> 宏有许多可用的参数,包含封闭的 ''edit-text'' 小工具的所有属性,使其在如何使用、以及如何显示和与结果交互方面,非常灵活。
另请参阅:[[自定义搜索结果|Customising search results]] 和 [[$:/core/ui/DefaultSearchResultList]]
<style>
.tablestyle {width:100%;}
.tablestyle td + td + td {width: 50%;}
</style>
首先:''请保持冷静!''
{{$:/deprecated}}
对于 ~TiddlyWiki 而言,这意味着您不应该使用这种机制于新的内容,''并且您应该更新现有的内容''!
弃用的功能有一个标记。请参阅:[[如何依标签套用自定义样式|How to apply custom by tag]]
''标签为 `$:/deprecated` 的条目''
><<list-links "[tag[$:/deprecated]]">>
<<.tip "您可以指定一个特定的解串器,用于一个 DropzoneWidget">>
<<.operator-examples "deserializers">>
<<.operator-example 1 "[deserializers[]]">>
有一些开发者的资源,可了解更多 TiddlyWiki 的相关信息和讨论,以及对其开发作出贡献。
* [[tiddlywiki.com/dev|https://tiddlywiki.com/dev]] 是官方的开发者文档
* 参与[[在 GitHub 上的开发|https://github.com/Jermolene/TiddlyWiki5]]
** [[Discussions|https://github.com/Jermolene/TiddlyWiki5/discussions]] 用于问答和开放式讨论
** [[Issues|https://github.com/Jermolene/TiddlyWiki5/issues]] 用于提出错误报告,并提出具体的、可行的新想法
* 旧的 ~Tiddlywikidev Google 论坛现已关闭,转而支持 [[GitHub Discussions|https://github.com/Jermolene/TiddlyWiki5/discussions]],但仍是一个有用的归档:https://groups.google.com/group/TiddlyWikiDev
** 在 [[mail-archive.com|https://www.mail-archive.com/tiddlywikidev@googlegroups.com/]] 有个增强的讨论群组搜索工具可用
* 追随 [[@TiddlyWiki 在 Twitter|http://twitter.com/#!/TiddlyWiki]] 的最新消息
* 在 https://gitter.im/TiddlyWiki/public 聊天 (开发聊天室即将到来)
字典条目是一个包含简单的成对 `name: value` 清单的[[数据条目|DataTiddlers]]。
其[[内容类型|ContentType]]为 `application/x-tiddler-dictionary`.
`text` 字段内容由一或多行的 <code>//name//: //value//</code> 所组成。
[[调色板|ColourPalettes]]即为字典条目,例如,[[缺省的香草调色板|$:/palettes/Vanilla]]。
! 简介
<<.from-version "5.1.16">> 差异文本小工具分析一对来源和目标文本字符串之间的差异,并将结果显示为高亮的插入和删除(类似于文本处理器的 "跟踪更改" 功能)。例如:
<$diff-text source="Hey Jude, don't make it bad. Take a sad song and make it better. Remember to let her into your heart
Then you can start to make it better." dest="Hey Jude, don't be afraid. You were made to go out and get her. The minute you let her under your skin. Then you begin to make it better."/>
! 内容和属性
!! 内容
`<$diff-text>` 小工具的内容在差异之前立即显示。在其内部,变量 `diff-count` 可用于包含找到的差异数量。如果小工具没有内容,它会自动嵌入条目[[$:/language/Diffs/CountMessage]]。
<<<
换句话说,这三个调用都是同样的:
```
<$diff-text source={{FirstTiddler}} dest={{SecondTiddler}}>
{{$:/language/Diffs/CountMessage}}
</$diff-text>
<$diff-text source={{FirstTiddler}} dest={{SecondTiddler}}>
</$diff-text>
<$diff-text source={{FirstTiddler}} dest={{SecondTiddler}}/>
```
<<<
!! 属性
|!属性 |!描述 |
|source |来源文本 |
|dest |目标文本 |
|cleanup |见下文 |
''cleanup'' 属性决定哪些可选的后续处理应该套用于差异:
* ''none'': 不运行清理
* ''semantic'' (默认): 改写为人类可辨识的差异
* ''efficient'': 改写差异以最小化后续处理的操作次数
(请注意,在许多情况下,不管清理选项如何,结果都是相同的。详细信息请参阅底层程序库的[[文档|https://github.com/google/diff-match-patch/wiki/API]])。
! 范例
在这个例子中,我们比较两段文本:
<$macrocall $name='wikitext-example-without-html'
src="""<$edit-text tiddler="SampleTiddlerFirst"/>
<$edit-text tiddler="SampleTiddlerSecond"/>
<$diff-text source={{SampleTiddlerFirst}} dest={{SampleTiddlerSecond}}/>"""/>
!! 停用插件
停用插件,可借由创建名称为 `$:/config/Plugins/Disabled/` 串接插件名称的条目名称,并设其内容为 `yes`。
例如,若要停用插件 `$:/plugins/tiddlywiki/highlight`,该条目名称将是︰
```
$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/highlight
```
您从没见过//任何东西//像 ~TiddlyWiki。~TiddlyWiki 是:
:: 一种工具,
:: 一个工具箱,
:: 一个社区,
:: 和一种哲学。
! ~TiddlyWiki 是一种工具
''~TiddlyWiki 首先是一种工具:''它是一个免费的可下载工具,用于从网站、从您的文档或从您的大脑截取和管理内容。它是笔记、书签、便条、写作、管理待办事项清单和项目、协作、博客和出版的工具。
在 ~TiddlyWiki 您创建或剪贴内容到称为条目的笔记,然后用超链接和标签连接您的条目。可由如标签丸、侧栏页签和 ~TiddlyWiki 的闪电般快速搜索窗口等功能快速访问您的笔记。您甚至可以动态引入一个条目内容于另一个条目 - 类似使用构建基块 - 创建文章、清单、演示文稿和更多的内容。
! ~TiddlyWiki 是一个工具箱
除作为一种多功能的工具之外,''~TiddlyWiki 也是一个工具箱。''
其他笔记产品以基本程序钩住您,然后以非常有用的功能向您收费。~TiddlyWiki 有不断扩充的完全免费的视觉主题、调色板、插件、小工具和宏的搜集,您可以混用与匹配,因此您可以调整和自订您的 ~TiddlyWiki,使其成为您想要的方式。
! ~TiddlyWiki 也是一个社区
我们是一个用户和开发人员的[[社区|Community]],彼此互相帮助想像新的思维和组织方式,并创建新的解决方案,故此 ~TiddlyWiki 正在不断调适以便更好地服务您的需求。~TiddlyWiki 用户和开发者分享问题和意见于 ~TiddlyWiki Google 论坛。他们还创建教学、应用和插件来提升您的 ~TiddlyWiki 经验。更多详细信息,请参阅[[目录|TableOfContents]]的''社区''部分。
! 最后,~TiddlyWiki 是一种哲学
取得和组织一份笔记(或记录任何类型的内容)的目的是为了能于稍后检索。如果在您的笔记记录系统中找不到您的笔记,则您的笔记变成浪费太多时间。
[[TiddlyWiki 哲学|Philosophy of Tiddlers]],是最好的做笔记方式,是把他们分成条目,可能的最小语义单位。条目可以是一张图片、一个网页链接、一个概念、一个术语定义或是一个特定的自订宏。
这些条目则可以被编织在一起以创建更长的单位:故事、文章、清单、图库和更多。~TiddlyWiki 的功能如标签、超链接和筛选器,可以协助您以多种方式将条目联系和连接在一起,便于将来检索您的笔记,甚至帮助您看到条目与其包含的信息之间的非预期的关系。
使用此插件可以让访问者有机会对您的提示者发表评论,而无需更改维基本身。
[[Disqus|https://disqus.com/]] 是一个网络社群平台,由遍布网络的数十万个网站使用。通过 Disqus,您的网站可以获得功能丰富的评论系统,包括集成社交网络、高级管理和审核选项,以及其他广泛的社群功能。
{{!!url}}
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "divide">>
<<.operator-example 1 "[[355]divide[113]]">>
<<.operator-example 2 "=1 =2 =3 =4 +[divide[2]]">>
网页的 <<.dlink-ex DOM "https://en.wikipedia.org/wiki/Document_Object_Model">> 是其内容的树状模型,当用户与内容交互时,由网页浏览器内部维护。在树中每个点都称为一个 <<.def node>>。
当 ~TiddlyWiki 运行于网页浏览器,其[[小工具|Widgets]]被呈现染为显示的 DOM 节点。
当 ~TiddlyWiki 运行于 [[Node.js|TiddlyWiki on Node.js]],则使用虚设的 DOM 来仿真浏览器的行为。
下列宏使用于整个 ~TiddlyWiki 的文档中。他们的名称前缀句点,避开用户可能尝试使用的名称。
! 一般
|!宏 |!用于 |!示例 |
|.def |定义术语实例 |<<.def widget>> |
|.em |句子中的次要强调 |<<.em not>> |
|.place |用户可以填写的预留位置 |<<.place tagname>> |
|.strong |条目中的主要的重点 |<<.strong Important!>> |
|.word |提到普通的单字或词组 |<<.word "hello world">> |
! 建议
|!宏 |!用于 |!示例 |
|^.tip |^提示和技巧 |<<.tip "Turn your screen on, otherwise<br>you won't be able to see much.">> |
|^.warning |^警示建议 |<<.warning "Make a backup of your file<br>before you upgrade.">> |
! 区块
|!宏 |!用于 |
|.preamble |位于条目其余内容之外的开场白 |
! 条目与字段
|!宏 |!用于 |!示例 |
|.tid |条目名称 |<<.tid Example>> |
|.tag |标签 |<<.tag Example>> |
|.field|字段名称 |<<.field example>> |
|.value|字段值 |<<.value "example value">> |
|.op |a filter operator |<<.op backlinks>> |
|.var|变量或宏名称 |<<.var currentTiddler>> |
|.wid|小工具名称 |<<.wid list>> |
|.attr |属性名称 |<<.attr filter>> |
|.param |宏参数名称 |<<.param text>> |
! 链接
|!宏 |!用于 |!示例 |
|.link |包含 WikiText 的链接 |<<.link "^^an^^ ~~example~~" Example>> |
|.clink |代码的链接 |<<.clink `<$list>` ListWidget>> |
|.dlink |a link on a defining instance of a term |<<.dlink widget Widgets>> |
|.dlink-ex |an external link on a defining instance of a term |<<.dlink-ex Example "http://example.com/">> |
|.flink |a link to a field |<<.flink ListField>> |
|.mlink |a link to a macro |<<.mlink qualify>> |
|.mlink2 |a link to a macro, with specified target |<<.mlink2 foo "Examples of Macros">> |
|.olink |a link to an operator |<<.olink prefix>> |
|.olink2 |a link to an operator, with specified target |<<.olink2 foo prefix>> |
|.vlink |a link to a variable |<<.vlink currentTiddler>> |
|.vlink2 |a link to a variable, with specified target |<<.vlink2 foo "Examples of Variables">> |
|.wlink |a link to a widget |<<.wlink ButtonWidget>> |
|.wlink2 |a link to a widget, with specified text |<<.wlink2 foo ButtonWidget>> |
! 用户接口
|!宏 |!用于 |!示例 |
|.key |键盘上的按键 |<<.key Escape>> |
|.keycombo |组合键 |<<.keycombo Ctrl Enter>> |
! 页签
|!宏 |!用于 |!示例 |
|.sidebar-tab |侧边栏页签的名称 |<<.sidebar-tab More>> |
|.more-tab |更多页签的子页签的名称 |<<.more-tab Shadows>> |
|.info-tab |条目信息页签的名称 |<<.info-tab Fields>> |
|.controlpanel-tab |控制台页签的名称 |<<.controlpanel-tab Settings>> |
|.advancedsearch-tab |t高端搜索页签的名称 |<<.advancedsearch-tab Filter>> |
|.toc-tab |tw5.com 目录页签的名称 |<<.toc-tab>> |
|.example-tab |示例页签名称 |<<.example-tab "Notes">> |
!! .sidebar-tab 的参数
|Open |<<.sidebar-tab Open>> |
|Recent |<<.sidebar-tab Recent>> |
|Tools |<<.sidebar-tab Tools>> |
|More |<<.sidebar-tab More>> |
!! .more-tab 的参数
|All |<<.more-tab All>> |
|Recent |<<.more-tab Recent>> |
|Tags |<<.more-tab Tags>> |
|Missing |<<.more-tab Missing>> |
|Drafts |<<.more-tab Drafts>> |
|Orphans |<<.more-tab Orphans>> |
|Types |<<.more-tab Types>> |
|System |<<.more-tab System>> |
|Shadows |<<.more-tab Shadows>> |
!! .info-tab 的参数
|Tools |<<.info-tab Tools>> |
|References |<<.info-tab References>> |
|Tagging |<<.info-tab Tagging>> |
|List |<<.info-tab List>> |
|Listed |<<.info-tab Listed>> |
|Fields |<<.info-tab Fields>> |
|Advanced |<<.info-tab Advanced>> |
!! .controlpanel-tab 的参数
|Info |<<.controlpanel-tab Info>> |
|Appearance |<<.controlpanel-tab Appearance>> |
|Settings |<<.controlpanel-tab Settings>> |
|Saving |<<.controlpanel-tab Saving>> |
|Plugins |<<.controlpanel-tab Plugins>> |
!! .advancedsearch-tab 的参数
|Standard |<<.advancedsearch-tab Standard>> |
|System |<<.advancedsearch-tab System>> |
|Shadows |<<.advancedsearch-tab Shadows>> |
|Filter |<<.advancedsearch-tab Filter>> |
! 按钮
|!宏 |!用于 |!示例 |
|.button |标准按钮名称和图标 |<<.button "new-tiddler">> |
!!.button 的参数
!!! 条目工具列
|clone |<<.button "clone">> |
|close |<<.button "close">> |
|close-others |<<.button "close-others">> |
|edit |<<.button "edit">> |
|export-tiddler |<<.button "export-tiddler">> |
|info |<<.button "info">> |
|more-tiddler-actions |<<.button "more-tiddler-actions">> |
|new-here |<<.button "new-here">> |
|new-journal-here |<<.button "new-journal-here">> |
|permalink |<<.button "permalink">> |
!!! 编辑模式工具列
|cancel |<<.button "cancel">> |
|delete |<<.button "delete">> |
|save |<<.button "save">> |
!!! 页面工具列
|advanced-search |<<.button "advanced-search">> |
|close-all |<<.button "close-all">> |
|control-panel |<<.button "control-panel">> |
|encryption |<<.button "encryption">> |
|export-page |<<.button "export-page">> |
|full-screen |<<.button "full-screen">> |
|home |<<.button "home">> |
|import |<<.button "import">> |
|language |<<.button "language">> |
|more-page-actions |<<.button "more-page-actions">> |
|new-journal |<<.button "new-journal">> |
|new-tiddler |<<.button "new-tiddler">> |
|permaview |<<.button "permaview">> |
|refresh |<<.button "refresh">> |
|save-wiki |<<.button "save-wiki">> |
|storyview |<<.button "storyview">> |
|tag-manager |<<.button "tag-manager">> |
|theme |<<.button "theme">> |
~TiddlyWiki 的文档试图遵循一贯的编辑风格。它有两个主要领域,都有其自有的笔调和读者:
* [[简介条目|Instruction Tiddlers]]
* [[参考条目|Reference Tiddlers]]
保留这两个领域的不同,避免初学者不堪重负,同时还提供专业用户所需要的快访问信息。
* [[条目名称策略|Tiddler Title Policy]]
* [[条目结构|Tiddler Structure]]
* [[拼写|Spelling]]
* [[排版|Typography]]
* [[技术散文风格|Technical Prose Style]]
[[筛选器|Filters]]操作[[名称集合|Title Selection]],其中没有名称会出现不止一次。此外,他们常常需要追加一个此类集合到另一个。
在这种情况下,如果名称重复,该名称先前的副本将被丢弃。正在追加的名称占主导地位。
例如,如果所选内容包含 `Andrew Becky Clara Daniel`,然后追加`Andrew Barney Clara Daisy`,则结果为 `Becky Daniel Andrew Barney Clara Daisy`。
使用[[数学运算符|Mathematics Operators]]时,此行为可能会导致意外的结果。例如,`1 2 3 +[sum[]]` 一如预期,计算结果为 `6`。但 `1 1 1 +[sum[]]` 计算结果为 `1`。从每个筛检器删除 `+[sum[]]` 揭示问题:`1 2 3` 其结果为列表 `1`, `2`, `3`,而由于消除重复项,`1 1 1` 其结果为单个项 `1`。
在这种情况下,`=`前缀可用于禁用消除重复项。例如,`=1 =1 =1 +[sum[]]` 一如预期,计算结果为 `3`。或者,可使用 [[split 运算符|split Operator]]:`[[1,1,1]split[,]sum[]]`。
有一个 `draft.of` 字段的条目被视为处理中的条目草稿。草稿条目也应该有一个 `draft.title` 字段,于保存时指定为条目名称。
协同工作的一些功能,给予草稿条目所需的行为:
* ListWidget 可以借由不同的范本,选择性地呈现草稿条目
* NavigatorWidget 包含以下事件处理常式:
** `tm-new-tiddler` 在草稿模式中创建一新条目
** `tm-edit-tiddler` 为一条目进入编辑模式
** `tm-cancel-tiddler` 取消一条目编辑模式
** `tm-save-tiddler` 为保存草稿条目
* 草稿条目被自动排除于搜索操作
~TiddlyWiki 使用拖放强化两个独立的功能:
* [[导入条目|Importing Tiddlers]]至 ~TiddlyWiki
* 操纵条目于 ~TiddlyWiki
在下列情况下,核心用户界面支持通过拖放方式操纵条目:
* 侧边栏的"开启"页签中的项目可以通过拖放来重新排序;可以通过将标题拖到清单中来开启新的条目
* 标签丸下拉清单中的项目可以通过拖放来重新排序;可以通过将标题拖放到清单中来为新条目指定标签
* [[控制台|$:/ControlPanel]] "视觉外观"/"工具栏"页签中的项目可以通过拖放来重新排序。(不太有用,但可以通过将其标题拖到列表中添加项目到工具栏)
默认情况下,所有条目链接都可以拖动。它们可以在浏览器窗口中拖动以操纵条目,或者拖动到不同的浏览器窗口以启动[[导入操作|Importing Tiddlers]]
如果要拖动链接,请先将其垂直移动,因为浏览器会将水平移动识别为文本选择。
标签丸也可拖动,相当于同时拖动所有具有该标签的个别条目。
一些常见的拖放条目操纵的场景可用作可重用的宏:
* [[list-links-draggable 宏|list-links-draggable Macro]]用于重新排序在条目的 [[list 字段|ListField]]中的项目
* [[list-tagged-draggable 宏|list-tagged-draggable Macro]]用于重新排序具有指定标签的条目
如何使用低级的拖和放基元以营造更复杂的交互的详细信息,请参阅 DragAndDropMechanism。
~TiddlyWiki 使用的标准 HTML 5 拖放 API,通常不适用于智能型手机或平板电脑上的行动版浏览器。[[行动版拖放 Shim 插件|Mobile Drag And Drop Shim Plugin]]增加了一个开源程序库,实现了许多行动版浏览器(包括 iOS 和 Android)的部分支持。
这个条目讨论 ~TiddlyWiki 用于实现拖放功能的内部机制。有关功能的一般说明,请参阅[[拖放|Drag and Drop]]。
<<.warning """
~TiddlyWiki 使用 [[标准的 HTML 5 拖放应用程序接口|https://www.w3.org/TR/2010/WD-html5-20101019/dnd.html]]。但是,这是一个众所周知的跨浏览器兼容性问题的领域。因此,特别是您可能期望的某些功能不一定适用于所有浏览器。
""">>
以下小工具涉及拖放功能:
* DraggableWidget 创建一个可拖动元素,代表用于拖动的一个或多个条目
** ButtonWidget 和 LinkWidget 包含 DraggableWidget 的功能
* DroppableWidget 创建一个区域于条目,使其可以通过拖动进行触发定制的操作
* DropzoneWidget 处理从文件导入外部条目或从另一个浏览器窗口拖放条目
拖放操作的一般顺序如下︰
# 用户按下鼠标并将指针拖至一个可拖动的元素,如 DraggableWidget、ButtonWidget 或 LinkWidget
# 可拖动元素随鼠标指针移动,直到释放点击
# 将指针移动到可拖放元素如 DroppableWidget 上,显示高亮表示该项目可以被拖动
# 如果拖动在可拖放元素的尾端,则运行配置的动作
DraggableWidget 创建一个可以由用户拖动的 DOM 元素。其仅适用于支持拖放的浏览器,通常指的是桌面浏览器,但也[[有变通方法|Mobile Drag And Drop Shim Plugin]]。
可拖动的元素可以分配为有效载荷的条目清单。
如果需要,它可以在拖动开始和结束时调用操作。
有关概述,请参阅 DragAndDropMechanism。
! 内容和属性
|!属性 |!说明 |
|tiddler |可选的拖动的有效载荷条目名称 |
|filter |可选的筛选器定义拖动的有效载荷条目 |
|class |要分配给可拖动元素的可选 CSS 类别。类别 `tc-droppable` 会自动添加,且类别 `tc-dragging` 当项目被拖动到可拖放元素上时被套用 |
|tag |可选的标记,将覆写默认的 "div" 元素 |
|startactions |可选的操作字符串,在拖动''开始''时调用 |
|endactions |可选的操作字符串,在拖动''结束''时调用 |
为使一个有效载荷被拖动,必须指定 ''tiddler'' 和 ''filter'' 其中之一或两个属性。
''actionTiddler'' 变量可于 //startactions// 与 //endactions// 两者中访问。通过 //tiddler// 和 //filter// 属性当作[[名称清单|Title List]],使用双方括号引用包含空格的名称,保留指定的有效载荷条目。
<<.tip """请注意,[[actionTiddler 变量|actionTiddler Variable]]包含带双括号的[[名称清单|Title List]]。这与 DroppableWidget 不同,DroppableWidget 使用相同的变量传递一个不带引号的名称。""">>
LinkWidget 通过 ''draggable'' 属性包含 DraggableWidget 的功能。
\define droppable-image-actions()
<$action-setfield $tiddler=<<actionTiddler>> $field="icon" $value=<<currentTiddler>>/>
\end
\define colour-demo-body()
<$droppable actions=<<droppable-colour-actions>>>
<span style="display: inline-block; width: 1em; height: 1em;background-color: $(currentTiddler)$;">
</span>
</$droppable>
\end
\define droppable-colour-actions()
<$action-setfield $tiddler=<<actionTiddler>> $field="color" $value=<<currentTiddler>>/>
\end
`droppable` 小工具创建一个 DOM 元素,用户可放下拖动的项目,触发指定的操作。其只适用于支持拖放的浏览器,通常指的是桌面版浏览器,但也[[有变通方法|Mobile Drag And Drop Shim Plugin]]。
有关概述,请参阅 DragAndDropMechanism。
! 内容和属性
|!属性 |!说明 |
|actions |拖放项目时运行的操作 |
|class |要分配给可拖动元素的可选 CSS 类别。类别 `tc-droppable` 会自动添加,且类别 `tc-dragover` 当项目被拖动到可拖放元素上时被套用 |
|tag |可选的标记,将覆写默认的小工具呈现在区块模式时的 "div" 元素,或在串联模式下的 "span" 元素 |
|enable |<<.from-version "5.1.22">> 可选值 "no" 禁用拖放功能(默认为 "yes") |
在 action 字符串中,有两个由 DroppableWidget 生成的变量:
* [[actionTiddler 变量|actionTiddler Variable]] 包含被拖放的项目的标题
* [[modifier 变量|modifier Variable]] 包含拖动时按住的辅助键(可以是一般键、Ctrl、Shift 或 Ctrl-Shift)
如果多个项目被拖放,则对每个拖放的项目重复运行一次操作。
<<.tip """请注意,[[actionTiddler 变量|actionTiddler Variable]]包含单一不带引号的名称。这与 DraggableWidget 不同,后者使用相同的变量来传递引用的[[名称清单|Title List]]。""">>
! 示例
此例显示一个图标的调色板。将一个条目拖放至其中一个图标上,将分配该图标至该条目。
<$list filter="[all[tiddlers+shadows]tag[$:/tags/Image]sort[title]]">
<$droppable actions=<<droppable-image-actions>>>
<$transclude/>
</$droppable>
</$list>
同样,此例显示一个颜色的调色板。将一个条目拖放到其中一种颜色上,将分配该颜色用于呈现条目的图标。
<$list filter="LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black">
<<colour-demo-body>>
</$list>
! 简介
`dropzone` 小工具创建一个用户可以拖动文件和其它对象的区域。它还支持通过剪贴板粘贴,目前的限制为需浏览器的支持。
它送出一个 [[WidgetMessage: tm-import-tiddlers]] 携带 JSON 格式的条目,经由其上层导入。此消息通常由添加条目至保存库且更新显示已打开条目的 NavigatorWidget 捕获。
! 内容与属性
|!属性 |!说明 |
|deserializer |<<.from-version "5.1.15">> 可选的要使用的解串器名称(默认解串器从扩展名派生) |
|enable |<<.from-version "5.1.22">> 可选的值 "no" 以禁用 dropzone 功能 ( 默认值为 "yes" ) |
|class |<<.from-version "5.1.22">> 可选的 CSS 类,被分配给 dropzone 创建的 DOM 节点 (默认为 "tc-dropzone") |
|autoOpenOnImport |<<.from-version "5.1.23">> 可选值 "no" 或 "yes" 可以覆写 tv-auto-open-on-import |
|importTitle|<<.from-version "5.1.23">> 用于导入过程,可选的条目名称,而不是 ~$:/Import |
|actions|<<.from-version "5.1.24">> 在发送 `tm-import-tiddlers` 消息后,要调用的可选动作字符串。变量 `importTitle` 提供用于导入过程的条目名称。 |
|contentTypesFilter |<<.from-version "5.1.24">> 指定被 dropzone 接受的[[内容类型|ContentType]]的可选筛选器。 |
|filesOnly|<<.from-version "5.1.24">> 可选的。当设置为 "yes" 时,拖放区仅接受文件,而不接受字符串数据。默认为 "no" |
<<.tip """使用 `prefix` 筛选器操作符,轻松接受多个相关内容类型。例如,此筛选器将接受所有图片内容类型: `[prefix[image/]]`""">>
<<.tip "通过使用[[高级搜索|$:/AdvancedSearch]]的筛选选项卡中的筛选器 `[deserializers[]]`,可以看到可用的解串器清单。">>
此 `dropzone` 小工具显示悬浮区内包含的的所有内容。
! 显示
此 `dropzone` 小工具创建一个 HTML `<div class="tc-dropzone">` 来包含其内容。在拖动操作期间添加类别 `tc-dragover` 。CSS 用来提供用户回馈。
! 支持的数据类型
支持以下的数据传输类型:
* ''text/vnd.tiddler'' - 一个 JSON 格式的条目清单 (此格式由 LinkWidget 生成)
* ''text/plain'' - 纯文本
* ''text/uri-list'' - 一个 URIs 清单为单一条目
<<.def dumpvariables>> [[宏|Macros]]传回一个表格显示存在于[[小工具树|Widgets]]中的该位置的所有[[变量|Variables]]的值和[[宏|Macros]]。
对于调试和探索 ~TiddlyWiki 的内部,这是有用的。
在正常的方式,以值替换预留位置,但对所有宏的参数使用默认值。
!! 参数
(无)
<<.macro-examples "dumpvariables">>
<$macrocall $name=".example" n="1"
eg="""<$set name="EXAMPLE" value="123.$(EXAMPLE2)$.789">
<$set name="EXAMPLE2" value="456">
<<dumpvariables>>
</$set>
</$set>"""/>
<<.from-version "5.1.23">> <<.olink slugify>> 可用于转换任意条目名称为适合在网址或文件名中使用的人类可读的字符串。但是,多个不同的名称可能会被转换到同一字符串。<<.olink duplicateslugs>> 筛选器运算符可用于显示一个警告。例如:
<$macrocall $name='wikitext-example-without-html'
src='<$list filter="[!is[system]duplicateslugs[]limit[1]]" emptyMessage="没有重复的 slug">
以下条目有重复的 slug:
<ul>
<$list filter="[!is[system]duplicateslugs[]]">
<li><$link><$text text=<<currentTiddler>>/></$link></li>
</$list>
</ul>
</$list>'/>
Dynaview 插件可以构建用户接口,通过滚动或缩放动态回应浏览器查看画面中的更改:
* 允许延迟呈现直到输出滚动到视图中的 CSS 类
* 允许 DOM 元素的不透明度依据当前缩放级别而变化的 CSS 类
请参阅演示于 https://tiddlywiki.com/plugins/tiddlywiki/dynaview
依次处理每个输入名称。相应的条目的 <<.place F>> 字段值会被检验。
;each
:只要字段的值是唯一的(即之前未曾遇到),即追加该名称到输出。
;each:list-item
:其值如同[[条目名称列表|Title List]]被处理。清单中的每个名称会依次被考虑。只要之前未曾遇到的,即追加该名称到输出。
;each:value
:只要条目名称是唯一的, 就会追加到输出中,无论是否存在相应的条目。
请注意,如果一条目不包含字段 <<.place F>>,被视为字段的值为空值。因此,像 `[each[motovun]]` 这样的筛选器表达式将返回一个没有 `motovun` 字段的条目,以及一个条目具有该字段每个不同值,如果有的话。要只获取具有非空白值的 `motovun` 字段的条目,可以使用 `[each[motovun]has[motovun]]`。
<<.operator-examples "each">>
<<.operator-example 1 "[each[color]]">>
<<.operator-example 2 "[sort[title]each[type]]" "每种类型的依字母顺序排列的第一个条目">>
<<.operator-example 3 "[each:list-item[list]]" "在核心 list 字段中的任何位置列出的所有条目">>
<<.operator-example 4 "[[Non existing]] [[GettingStarted]] +[each:value[]]" "比较此例与下列 `+[each[]]`">>
<<.operator-example 5 "[[Non existing]] [[GettingStarted]] +[each[]]" " 比较此例与上例 `+[each:value[]]`">>
使用 <<.op each>> 运算符生成的群组与成员的两级清单的示例,请参阅 [[GroupedLists]]。
依次处理每个输入的名称。检查相应条目的 <<.place F>> 字段值,且只要遇到之前没有的日期,即追加名称到输出。
如果一个条目不包含字段 <<.place F>>,则不输出。
<<.operator-examples "eachday">>
<<.operator-example 1 "[eachday[created]]" "在每一日创建的第一个条目">>
使用 <<.op eachday>> 运算符生成的群组与成员的两级清单的示例,请参阅 [[GroupedLists]]。
La edición española de ~TiddlyWiki se encuentra aquí:
* ''Documentación'' : https://tiddlywiki.com/languages/es-ES/index.html
* ''~TiddlyWiki en blanco'' : https://tiddlywiki.com/languages/es-ES/empty.html
! 简介
编辑位图小工具提供用于浏览器中编辑位图条目的用户接口。目前仍为一个原始的概念验证,支持调整大小和用单一颜色与线宽绘画。
! 内容与属性
`<$edit-bitmap>` 小工具的任何内文将被忽略。
|!属性 |!说明 |
|tiddler |编辑的条目 (默认为[[当前条目|Current Tiddler]]) |
! 设置
编辑位图小工具可由这些系统条目设置之:
* [[$:/config/BitmapEditor/LineWidth]] 确定线条的宽度:<$edit-text tiddler="$:/config/BitmapEditor/LineWidth" tag="input"/>
* [[$:/config/BitmapEditor/Colour]] 确定线条的颜色:<$edit-text tiddler="$:/config/BitmapEditor/Colour" tag="input" type="color"/>
Devin Weaver 写了一个 [[Vim|http://www.vim.org/]] 插件于 https://github.com/sukima/vim-tiddlywiki
它支持大多数 TiddlyWiki 语法,并包括一个文件类型插件,它会自动更新 `modified` 字段。
依次处理每个输入名称,忽略任何不是 ~TiddlyWiki 版本的名称。
<<.node-only-operator>>
TiddlyWiki 发布为几个为特定目的优化的不同版本。
一个应用版包括 TiddlyWiki 核心组件,以及插件、文档和示例内容,让您能尽快运行。
您可以混合和匹配这些版本的组件,为您的特定应用的唯一解决方案。
<<list-links "[tag[Editions]]">>
<$macrocall $name=".tip" _="""请注意,应用版不应与 TiddlyWiki 运行的[[平台|Platforms]]混淆 (例如,[[单个 HTML 文件|Saving]] 与 [[Node.js|TiddlyWiki on Node.js]])"""/>
{{$:/language/Help/editions}}
!! 如何运作
编辑器工具栏是一个工具栏,可帮助您轻松地格式化文本。在编辑模式下,它出现在条目中的 <<.field text>> 字段上方。其具有与 Microsoft Word 或 Libre Office Write 等桌面文本编辑器类似的外观。
!! 编辑器工具栏的作用
当您按下某个功能的按钮时,它会在 <<.field text>> 字段中插入[[维基文本|WikiText]]。例如,如果按下粗体按钮,它将插入 `'' ''`。
如果您''标示''一段文本,标记代码将自动绕过该段标示文本。
如果您处于其他模式,如 [[MarkDown|Markdown Plugin]],工具栏将更改为该语法并插入适当的代码。但是,它不会更改先前已键入的文本或标记。
除了标准的[[维基文本|WikiText]]格式外,编辑器工具栏还有以下按钮:
<<list-links "[tag[Editor toolbar]sort[title]]">>
! 简介
`<$edit-text>` 小工具提供一个用于编辑条目的通用界面,在浏览器用于编辑纯文本条目字段。编辑元素动态绑定到基础的条目值:对条目的更改将立即反映,且所有编辑立即将显现。
在条目的 `text` 字段中应用 EditTextWidget,默认会生成一个 `<textarea>` HTML 编辑元素,亦即一个多行编辑器。应用 EditTextWidget 于任何其他条目字段,会生成一个 `<input type="text">` HTML 元素,即一个单行编辑器。此行为可被 `tag` 和 `type` 属性覆盖。
! 内容与属性
此 `<$edit-text>` 小工具的内文会被忽略。
|!属性 |!说明 |
|tiddler |编辑的条目 (默认为[[当前条目|Current Tiddler]]) |
|field |编辑的字段 (默认为 `text`)。优先级高于 `index` 属性 |
|index |编辑的索引 |
|default |当目标条目不存在时,以此为默认内容 |
|class |指定给生成的 HTML 编辑元素的 CSS 类别 |
|placeholder |当编辑字段为空值时,会显示此占位文本 |
|focusPopup |为当鼠标点击编辑元素时,显示的弹出的状态条目名称 |
|focus |设为 "yes" 或 "true",创建后自动聚焦编辑 |
|tabindex |将 `input` 或 `textarea` 的 `tabindex` 属性设置为给定值 |
|autocomplete |<<.from-version 5.1.23>> 一个可选字符串,向浏览器提供如何处理此输入的自动完成功能的提示 |
|tag |覆写生成的 HTML 编辑元素的 `tag` 属性。用 `tag=textarea` 于多行编辑器。用 `tag=input` 於单行编辑器。 |
|type |覆写生成的 HTML 编辑元素的 `type` 属性 |
|size |输入字段的大小(以字符为单位) |
|autoHeight |以 "yes" 或 "no" 指定是否自动调整 `textarea` 编辑器大小,以适合其内容(默认值为 "yes") |
|minHeight |自动调整 `textarea` 编辑器大小,在 CSS ,其长度单位如 "px"、"em" 或 "%" |
|rows|设置生成的 `textarea` 的 `rows` 属性 |
|cancelPopups |<<.from-version "5.1.23">> 若设置为 "yes",当聚焦于输入时,取消所有弹出窗口 |
|inputActions |<<.from-version 5.1.23>> 每次输入字段或文本区域内发生输入事件时,触发的可选的操作 |
|refreshTitle |<<.from-version 5.1.23>> 可选的条目名称,每当指定的条目更动时,使得输入字段更新 |
|disabled|<<.from-version "5.1.23">> 可选的。如果设置为 "yes",则禁用该文本输入。默认为 "no" |
|fileDrop|<<.from-version "5.1.24">> 可选的。当设置为 "yes" 时,允许拖放或粘贴图像到条目编辑器,导入图像。默认为 "no"|
! 注意事项
一个陷阱,需要注意的是编辑文本的小工具不能用于包含该字段的条目。每次按键的会使条目被重新呈现,而失去了在文本字段内的光标位置。
取而代之,将该编辑文本的小工具放在 [[样板条目|TemplateTiddlers]] 引用您想要修改的条目。
例如,若您想要在 GettingStarted 条目中编辑 "AppSettings" 条目的 "myconfig" 字段的值,你可以通过创建一单独条目 "ChangeAppSettings" 包含以下内容来运行此操作:
```
<$edit-text tiddler="AppSettings" field="myconfig"/>
```
且于其他条目中 (例如 GettingStarted) 以 `{{ChangeAppSettings}}` 引用模板.
当您使用的条目//不是//导致的递归问题的 AppSettings 本身时,可正常运行工作。在下列的实例中,您必须将字段保存于暂时的 (或替代) 条目 (与上例相反) 如下:
```
<$edit-text tiddler="StoreAppSettings" field="myconfig"/>
```
总之 <<.wlink EditTextWidget>> //可以不//改变嵌入的条目或其部分的属性。它只能改变//其他//条目的字段。必要时,人们可以使用[[影子条目|ShadowTiddlers]]完成字段的存放。
! 简介
`<$edit>` 小工具提供一个用于编辑条目的通用界面,根据条目的类型动态地选择适当的小工具(目前有 EditTextWidget 或 EditBitmapWidget)。
! 内容与属性
此 `<$edit>` 小工具的内文会被忽略。
|!属性 |!说明 |
|tiddler |编辑的条目 (默认为[[当前条目|Current Tiddler]]) |
|field |编辑的字段 (默认为 `text`)。优先级高于 `index` 属性 |
|index |编辑的索引 |
|class |加入生成编辑小工具的 CSS 类别 |
|tabindex |将 `input` 或 `textarea` 的 `tabindex` 属性设置为给定值 |
|autocomplete |<<.from-version 5.1.23>> 一个可选字符串,向浏览器提供如何处理此输入的自动完成功能的提示 |
|cancelPopups |<<.from-version "5.1.23">> 若设置为 "yes",当聚焦于输入时,取消所有弹出窗口 |
|inputActions |<<.from-version 5.1.23>> 每次输入字段或文本区域内发生输入事件时,触发的可选的操作 |
|refreshTitle |<<.from-version 5.1.23>> 可选的条目名称,每当指定的条目更动时,使得输入字段更新 |
<<.from-version "5.1.20">> 相关概述,请参阅[[条件运算符|Conditional Operators]]。
<<.operator-examples "else">>
<<.operator-example 1 "[[HelloThereMissing]is[missing]else[yes]]">>
<<.operator-example 2 "[[HelloThere]is[missing]else[yes]]">>
如果出于任何原因,您发现当前的 TiddlyWiki 实例未保存(例如,插件或服务器已停止运作),此方法非常有用。它应该适用于任何平台。
* 到高级搜索 {{$:/core/ui/Buttons/advanced-search}}
** 进到筛选页签
** 输入以下筛选条件:<dl>
```
[!is[system]!sort[modified]limit[25]]
```
</dl>
* 检查条目清单。
* 调整筛选器中的数字 "25",以确保找到所有最近修改过的条目
* 点击右方的导出条目按钮 <button class="tc-btn-invisible" disabled><<.icon $:/core/images/export-button>></button>
* 对话框将要求您选择下载名为 tiddler.json 的文件在本地磁盘上的位置,或者根据浏览器配置,只是提醒您将会下载这样的文件。点击保存,按下存盘。
* tiddlers.json 文件可以被导入(侧边栏中的工具),或者将文件拖放到另一个 TddlyWiki 的故事河的顶端。
** 您可以(不)选择特定的条目。
** 最后,按`导入`。
TiddlyWiki 的空白版本是纯净的散布,没有核心程序以外的额外插件或配置。
空白版本可以从下列网址下载:
* 链接:https://tiddlywiki.com/empty.html
* 内置:{{$:/editions/zh-Hant/snippets/download-empty-button}} {{$:/editions/zh-Hans/snippets/download-empty-button}}
"HTML 编码" 的意思是特殊的 HTML 字符替换为相应的 HTML 实体︰
* `&` 替换为 `&`
* `<` 替换为 `<`
* `>` 替换为 `>`
* `"` 替换为 `"`
<<.operator-examples "encodehtml">>
<<.operator-example 1 "[[Title with <angle brackets>]] +[encodehtml[]]">>
<<.operator-example 2 "[[Title with an & ampersand]] +[encodehtml[]]">>
[[encodeURI|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI]] 操作的详细信息,请参阅 Mozilla 开发者网络。
<<.operator-examples "encodeuri">>
<<.operator-example 1 "[[Title with Space]] +[encodeuri[]]">>
<<.operator-example 2 "[[Title with Space]] [[Another title with Space]] +[encodeuri[]]">>
[[encodeURIComponent|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent]] 操作的详细信息,请参阅 Mozilla 开发者网络。
<<.operator-examples "encodeuricomponent">>
<<.operator-example 1 "[[Title with Space]] +[encodeuricomponent[]]">>
<<.operator-example 2 "[[Title with Space]] [[Another title with Space]] +[encodeuricomponent[]]">>
使用为单独的 HTML 文件,TiddlyWiki5 允许使用 [[Stanford JavaScript Crypto Library]] 加密内容。
# 切换到侧边栏的''工具''页签,并找到带有一个锁形图标的按钮
# 如果按钮为 <<.icon $:/core/images/unlocked-padlock>> ''设置密码''则当前维基尚未加密。按一下该按钮将提示输入用于加密以后保存的密码
# 如果按钮为 <<.icon $:/core/images/locked-padlock>> ''清除密码''则当前维基内容已被加密。按一下按钮将移除除密码,以便后续不加密保存
# 可以在文本编辑程序中,开启被保存的文件,并核实您的数据已被加密
# 在您的浏览器中开启该文件,在内容显示之前,浏览器会提示输入密码
请注意,TiddlyWiki 有两个有关密码/加密与其他无关的功能:
* 保存到 TiddlySpot 时的设置密码的能力。这在 <<.icon $:/core/images/options-button>> 控制台中的''保存''页签
* 上述功能使用标准 HTTP 基本验证与 [[Node.js|TiddlyWiki on Node.js]] 服务器配置。这是在命令行中使用 ServerCommand 上完成的。与 SSL 并用时,你会得到与在线服务,如 Google 或 Dropbox 同级的发送加密,但这没有加密的磁盘上的数据。
TiddlyWiki5 允许以 Stanford JavaScript 加密程序库加密 TiddlyWiki HTML 文件的全部内容。在浏览器中开启加密的 TiddlyWiki 于解密和显示内容之前提示输入密码。
有关说明如何使用 TiddlyWiki5 的加密功能,请参阅 [[用加密保存|Saving with Encryption]]。
[[加密机制|EncryptionMechanism]]的实现具有以下元素:
* BootMechanism 里的 PasswordVault 保存当前的加密密码
* BootMechanism 能够从 TiddlyWiki 档读取加密的条目区块,提示用户输入密码并解密这些条目
* [[WidgetMessage: tm-set-password]] 与 [[WidgetMessage: tm-clear-password]] 消息的处理进程处理更改密码的用户接口
* 主文件范本内的 EncryptWidget 使用目前的密码加密筛选的条目
* [[$:/isEncrypted]] 条目包含 "yes" 或 "no" 根据是否有一个密码在密码存储库
** 此条目的可用性允许 RevealWidget 用于依据加密是否生效有选择地显示用户接口元素
* [[$:/snippets/encryptionstatus]] 片段显示当前的加密状态
! 简介
加密小工具呈现一个条目的筛选清单于以被留置在 PasswordVault 的密码加密区块。加密区块随后可以由 TiddlyWiki5 [[引导机制|BootMechanism]]解密。更多详细信息请参阅[[加密机制|EncryptionMechanism]]。
! 内容与属性
`<$encrypt>` 小工具的内文将被忽略。
|!属性 |!说明 |
|filter |筛选器限定条目包含在加密的区块。如果未指定,则使用所有非系统条目 |
<<.tip """ 文本筛选器操作数不能包含方括弧,但您可以解决此问题,通过使用一个变量。''了解更多信息于:'' [[SetWidget]] 文档的 "筛选后的清单变量赋值" 标题下""">>
```
<$set name="myList" value="first [[second with a space]] third">
<$list filter="[enlist<myList>]">
...
```
<<.operator-examples "enlist">>
<<.operator-example 1 "[enlist[one two three]addsuffix[!]]">>
<<.operator-example 2 "[enlist[one one one]]">>
<<.operator-example 3 "[enlist:raw[one one one]]">>
<<.operator-example 4 "[enlist{$:/StoryList!!list}]">>
<<.from-version "5.1.23">>
<<.tip " 与 [[enlist|enlist Operator]] 操作符比较,解释其操作数为一个名称清单">>
```
<$vars days={{{ [[Days of the Week]get[list]] }}}>
{{{ [enlist<days>] }}}
</$vars>
```
等效于:
```
{{{ [[Days of the Week]get[list]enlist-input[]] }}}
```
<<.operator-examples "enlist-input">>
<<.operator-example 1 "[[Days of the Week]get[list]enlist-input[]]">>
对比: <<.operator-example 2 "[[Days of the Week]get[list]]">>
<<.operator-example 3 "'HelloThere GettingStarted [[Customise TiddlyWiki]]' +[enlist-input[]]">>
对比: <<.operator-example 4 "'HelloThere GettingStarted [[Customise TiddlyWiki]]'">>
<<.operator-example 5 "'HelloThere HelloThere GettingStarted [[Customise TiddlyWiki]]' +[enlist-input:raw[]]">>
对比:<<.operator-example 6 "'HelloThere HelloThere GettingStarted [[Customise TiddlyWiki]]' +[enlist-input[]]">>
! 简介
`<$entity>` 小工具显示一个指定的 HTML 字符实体。
! 内容与属性
`<$entity>` 小工具的内文会被忽略。
|!属性 |!说明 |
|entity |欲显示的 entity (例如,`×`) |
[[TiddlyWiki on Node.js]] 支持下列操作系统环境变量,用于指定一个分隔的路径搜索插件和版本清单:
* `TIDDLYWIKI_PLUGIN_PATH` - 插件的搜索路径
* `TIDDLYWIKI_THEME_PATH` - 布景主题的搜索路径
* `TIDDLYWIKI_LANGUAGE_PATH` - 语言的搜索路径
* `TIDDLYWIKI_EDITION_PATH` - 版本的搜索路径 (适用于 InitCommand)
''注意'':分隔符号可能因操作系统而异。在 Windows 上使用分号 `;`,Linux 则使用冒号 `:`。
每个附加路径应该指到文件夹结构就像 TiddlyWiki5 GitHub 存储库中的等价文件夹: 插件、布景主题、及语言文件夹包含 `publisher/pluginname/<files>` 而该版本文件夹包含 `editionname/<files>`
例如:
```
TIDDLYWIKI_PLUGIN_PATH=~/MyPluginStore
tiddlywiki mywiki --build index
```
[[CSS.escape()|https://developer.mozilla.org/docs/Web/API/CSS/escape]] 操作的详细信息,请参阅 Mozilla 开发者网络。
<<.operator-examples "escapecss">>
<<.operator-example 1 "[all[tiddlers]tag[Resources]escapecss[]]">>
[[正则表达式语法|https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp]]的详细信息,请参阅 Mozilla 开发者网络。
<<.operator-examples "escaperegexp">>
<<.operator-example 1 """[[Title with dots . and dollars $]] +[escaperegexp[]]""">>
! 简介
<<.from-version "5.1.23">>
//这是一个高级小工具,供熟悉 HTML、CSS 和 JavaScript 处理 DOM 事件的人使用。//
事件捕获器小工具,捕获在其子内容中分派的 DOM-initiated JavaScript 事件,并允许调用一系列 ActionWidget 以回应这些事件。
为了捕获事件,它们必须:
* 是事件捕获器小工具的 `events` 属性中,指定的事件之一
* 出现在小工具的 `selector` 属性指定的 DOM 节点内
* 支持事件冒泡
当使用大量其他触发器小工具(如 ButtonWidget)导致性能问题时,使用事件捕获器小工具非常有用。其激活的工作流程类似于 JavaScript 用语中的 "事件委派"。
! 内容和属性
`<$eventcatcher>`小工具的内容正常显示。
|!属性 |!说明 |
|events |用空格分隔的 JavaScript 事件列表,例如 "click" 或 "click dblclick" |
|selector |一个 CSS 选择器。只有源自此选择器的 DOM 节点内部的事件才被捕获 |
|actions-* |捕获匹配事件时要调用的操作字符串。每个事件都映射到表单 `actions-"event"` 的一个操作属性名称,其中 `event` 表示事件的类型。例如:`actions-click` 或 `actions-dblclick` |
|tag |可选的。小工具为捕获事件而创建的 html 元素,默认为:<br>» `span` 在内联模式下解析时<br>» `div` 在区块模式下解析时 |
|class |可选的。指定给小工具 HTML 元素的 CSS 类别名称(或名称) |
|stopPropagation |<<.from-version "5.1.24">> 可选的。设为 "always",即使没有相应的行动需要调用,也要始终停止事件传播;设为 "never" 则永远不要停止事件传播,或默认值 "onaction",只有在调用相应操作时,才会停止事件传播。 |
! 变量
以下变量可用于操作:
|!变量 |!说明 |
|`dom-*` |匹配给定选择器节点的所有 DOM 属性都可用为变量,其前置码为 `dom-` |
|`modifier` |[[modifier 变量|modifier Variable]]包含事件期间按住的辅助键 (可以是 "normal"、"ctrl"、"shift"、"alt" 或为其组合) |
|`event-mousebutton` |用于触发事件的鼠标按钮(如果有) (可以是 "left"、"right" 或 "middle")。请注意,并非所有事件类型都支持 mousebutton 属性 |
|`event-type` |JavaScript 事件的类型属性 |
|`event-detail-*` |事件详细属性中的任何属性都可用首码 `event-detail-` |
|`tv-popup-coords` |可与 ActionPopupWidget 一起使用的座标字符串,用于在与事件起源的选择器匹配的 DOM 节点上,触发弹出窗口 |
|`tv-selectednode-posx` |所选 DOM 节点的 `x` 偏移位置 |
|`tv-selectednode-posy` |所选 DOM 节点的 `y` 偏移位置 |
|`tv-selectednode-width` |所选 DOM 节点的 `offsetWidth` |
|`tv-selectednode-height` |所选 DOM 节点的 `offsetHeight` |
|`event-fromselected-posx` |事件相对于所选 DOM 节点的 `x` 位置 |
|`event-fromselected-posy` |事件相对于所选 DOM 节点的 `y` 位置 |
|`event-fromcatcher-posx` |事件相对于事件捕获器 DOM 节点的 `x` 位置 |
|`event-fromcatcher-posy` |事件相对于事件捕获器 DOM 节点的 `y` 位置 |
! 示例
此示例使用 ActionLogWidget,并将按下的 DOM 节点的 `data-item-id` 属性,记录到浏览器的 JavaScript [[主控台|Web Developer Tools]]
```
\define clickactions()
<$action-log item=<<dom-data-item-id>> event=<<event-type>>/>
\end
\define contextmenu-actions()
<$action-log item=<<dom-data-item-id>> event=<<event-type>>/>
\end
<$eventcatcher events="click contextmenu" selector=".item" actions-click=<<clickactions>> actions-contextmenu=<<contextmenu-actions>> tag="div">
<div class="item" data-item-id="item1">
Click events here will be trapped
</div>
<div class="item" data-item-id="item2">
And here too
</div>
<div data-item-id="item3">
Not here
</div>
<div class="item" data-item-id="item4">
And here
</div>
</$eventcatcher>
```
title: $:/config/tiddlyweb/host
text: $protocol$//$host$/MyApp/
{
"name": "MyStuff",
"description": "A description of this wiki",
"dependencies": {
"sax": "1.2.4",
"tiddlywiki": "*"
}
}
<$macrocall $name=".example" n="1"
eg="""<div class="tc-table-of-contents">
<<toc-expandable "Contents">>
</div>"""/>
<$macrocall $name=".example" n="1"
eg="""<div class="tc-table-of-contents">
<<toc-selective-expandable "Contents">>
</div>"""/>
<$macrocall $name=".example" n="1"
eg="""<div class="tc-table-of-contents">
<<toc "Contents">>
</div>"""/>
<$macrocall $name=".example" n="1"
eg="""<div class="tc-table-of-contents">
<<toc-expandable "Contents" "sort[title]">>
</div>"""/>
<$macrocall
$name="toc-tabbed-external-nav"
tag="TableOfContents"
selectedTiddler="$:/temp/toc/selectedTiddler"
unselectedText="<p>选择目录中的一个主题,点击箭头可展开主题。</p>"
missingText="<p>佚失条目。</p>"
/>
```
<$macrocall
$name="toc-tabbed-external-nav"
tag="TableOfContents"
selectedTiddler="$:/temp/toc/selectedTiddler"
unselectedText="<p>选择目录中的一个主题,点击箭头可展开主题。</p>"
missingText="<p>佚失条目。</p>"
/>
```
<$macrocall
$name="toc-tabbed-internal-nav"
tag="TableOfContents"
selectedTiddler="$:/temp/toc/selectedTiddler"
unselectedText="<p>选择目录中的一个主题,点击箭头可展开主题。</p>"
missingText="<p>佚失条目。</p>"
/>
```
<$macrocall
$name="toc-tabbed-internal-nav"
tag="TableOfContents"
selectedTiddler="$:/temp/toc/selectedTiddler"
unselectedText="<p>选择目录中的一个主题,点击箭头可展开主题。</p>"
missingText="<p>佚失条目。</p>"
/>
```
{
"description": "My wiki",
"plugins": [
"tiddlywiki/tiddlyweb",
"tiddlywiki/filesystem"
],
"themes": [
"tiddlywiki/vanilla",
"tiddlywiki/snowwhite"
]
}
arguments=".\node_modules\tiddlywiki\tiddlywiki.js ./wiki --listen username=joe "password=bloggs" port=PORT path-prefix=/MyApp">
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add
name="httpplatformhandler"
path="*"
verb="*"
modules="httpPlatformHandler"
resourceType="Unspecified"
requireAccess="Script" />
</handlers>
<httpPlatform
stdoutLogEnabled="true"
stdoutLogFile=".\node.log"
startupTimeLimit="20"
processPath="C:\Program Files\nodejs\node.exe"
arguments=".\node_modules\tiddlywiki\tiddlywiki.js ./wiki --listen port=PORT path-prefix=/MyApp">
<environmentVariables>
<environmentVariable name="PORT" value="%HTTP_PLATFORM_PORT%" />
<environmentVariable name="NODE_ENV" value="Production" />
</environmentVariables>
</httpPlatform>
</system.webServer>
</configuration>
此搜集展示启发和有趣的 ~TiddlyWiki 的使用示例。经由 GitHub、Twitter 提交新项目,或张贴在 [[TiddlyWiki 论坛|Forums]]。
<div class="tc-link-info">
<$list filter="[tag[Examples]!sort[modified]]">
<div class="tc-link-info-item">
! <$link><$view field="title"/></$link>
!!! <a href={{!!url}} target="_blank"><$text text={{!!url}}/></a>
<div class="tc-subtitle">发布于 <$view field="modified" format="relativedate"/></div>
<$transclude/>
</div>
</$list>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
''exponential'' 运算符返回输入数字的指定位数的指数表示法。如果一个数字的位数多于请求的数字,则该数字四舍五入为指定的位数表示的最接近的数字
<<.operator-examples "exponential">>
<<.operator-example 1 "123456789 +[exponential[4]]">>
<<.operator-example 2 "123456789 +[exponential[13]]">>
<<.operator-example 3 "1.23E23 +[exponential[90]]">>
外部附件插件提供导入条目为外部附件的支持。这意味着,它不是将二进制文件导入为单独的条目,而是通过 ''_canonical_uri'' 字段,导入作为引用原始文件的 "精简" 的条目。这减少维基的大小,从而提高性能。但是,这并不表示维基不再完全独立。
此插件仅在使用 TiddlyWiki 于如 TiddlyDesktop 等支持导入/拖放文件的 ''path'' 属性的平台有效。
TiddlyWiki 里的外部图片为一些指向图片的网址的条目,而非嵌入完整的图片数据。其性能优于嵌入图片,尤其是与大量或大尺寸的图片。然而,使用它们便打破了 TiddlyWiki 的单一文件模式。
外部图片用于浏览器。他们可以于生成 TiddlyWiki 时,由 Node.js 配置创建,或者也可以在浏览器内手动创建。
! 什么是外部图片
外部图片是具有包含图片网址的 ''_canonical_uri'' 字段的普通图片条目。该网址可以是绝对或相对于 HTML 文档。若给定此规范网址,则该条目的 ''text'' 字段将被忽略,也应被省略。
! 手动创建外部图片
要手动创建一个外部图片,只需创建具有适当的图片内容类型的条目,增加一个 ''_canonical_uri'' 字段,其值为指向实际图片位置的网址。
''重要:'' 请仔细检查你的拼写,``_canonical_uri`` 的拼写为 [[URI|https://en.wikipedia.org/wiki/URI#The_relationship_between_URIs.2C_URLs.2C_and_URNs]], 而非 URL。
! 于 Node.js 创建外部图片
下面的步骤用于创建一个静态 HTML 文件版本的 wiki 伴有包含引用的外部图片的 ''images'' 文件夹:
# 于您的 TiddlyWikiFolders 以一般方式创建一些图片条目
# 保存这些图片为个别文件 (按例在名为 ''images''子文件夹)
# 指定一个''_canonical_uri'' 字段,具体化图片条目
# 保存主要 HTML 文件
请注意,在他们具体化之前,必须是已保存的图片档。具体化摧毁 ''text'' 字段内的内存中副本的 wiki 存储,这意味着尝试保存他们将失败。
有关示例,请参阅 ''externalimages'' 构建示例 ''tw5.com'' 维基的目标:
```
--savetiddlers [is[image]] images
--setfield [is[image]] _canonical_uri $:/core/templates/canonical-uri-external-image text/plain
--setfield [is[image]] text "" text/plain
--rendertiddler $:/core/save/all externalimages.html text/plain
```
!! 保存单独的图片档
下列 `--savetiddlers` 命令,可以用来将一个 wiki 的图片保存到 ''images'' 子文件夹:
```
--savetiddlers [is[image]] images
```
!! 具体化图片条目
使用两个 `--setfield` 命令:第一个设置 ''_canonical_uri'' 字段为一自何条目取得 URI ,且第二个清除 ''text'' 字段。
```
--setfield [is[image]] _canonical_uri $:/core/templates/canonical-uri-external-image text/plain
--setfield [is[image]] text "" text/plain
```
范本条目 [[$:/core/templates/canonical-uri-external-image]] 包含:
<pre>
<$view tiddler="$:/core/templates/canonical-uri-external-image" field="text" format="text"/>
</pre>
注意,这些操作修改在 wiki 里的条目,这样可能会影响后续命令的操作。
! 使用外部图片
您不能直接在浏览器中编辑外部图片,除了更改 URI 字段指向一个不同的图片。
Favorites plugin is a set of tool for creating favorites (bookmarks) in Tiddlywiki. Each favorite item is a shortcut to a tiddler.
{{!!url}}
A favorite item also called a bookmark is a shortcut, you are creating for quick access to it. You can access that bookmark at any time and view that as many times as you want without having to search and find it again.
The Favorites plugin contains three modes
* flat mode: one favorite list, no folder
* structured mode: use folder, search tool, export and delete tool
* frozen list: read only, simple table of content style
有关特定的 TiddlyWiki 功能的进一步信息:
<<list-links "[tag[Features]]">>
最后但并非最不重要,TiddlyWiki 是一种实用的 [[quine|Quine]] 的一个罕见例子
Federatial 有限公司是由 TiddlyWiki 的创始人 JeremyRuston,创立的一间软件顾问公司。Federatial 透过复杂的基于网络的工具的快速原型,来帮助组织探索新用户交互概念。
详见 http://federatial.com/ 与 http://twitter.com/federatial。
{{$:/language/Help/fetch}}
如果 <<.place S>> 是空的 <<.op 字段>> 将匹配以下两者:
* 不包含字段 <<.place F>> 的条目
* 条目具有字段 <<.place F>>,但为空的值
[[筛选器 step|Filter Step]] 的语法对于任何无法识别的[[筛选器运算符|Filter Operators]],视为 <<.op field>> 运算符的尾码。
<<.operator-examples "field">>
<<.operator-example 1 "[field:author[JeremyRuston]]" "由 JeremyRuston 编写的插件">>
<<.operator-example 2 "[plugin-type[theme]author[JeremyRuston]]" "由 JeremyRuston 创作的布景主题">>
<$macrocall $name=".example" n="1"
eg="""
<$fieldmangler>
添加标签 ''example'' 至此条目 (当前)<$button message="tm-add-tag" param="example">{{$:/core/images/new-button}}</$button>
<br>
自此条目 (当前) 移除标签 ''example''<$button message="tm-remove-tag" param="example">{{$:/core/images/delete-button}}</$button>
</$fieldmangler>
"""/>
<$macrocall $name=".example" n="2"
eg="""
<$fieldmangler tiddler="Hello World">
添加标签 ''example'' 至 "Hello World" 条目 <$button message="tm-add-tag" param="example">{{$:/core/images/new-button}}</$button>
<br>
自 "Hello World" 条目移除标签 ''example'' <$button message="tm-remove-tag" param="example">{{$:/core/images/delete-button}}</$button>
</$fieldmangler>
"""/>
! 简介
字段管理小工具操作的条目的字段和标签。有下列的回应[[消息|Messages]]:
|!消息 |!说明 |
|''tm-remove-field'' |移除指定于 `event.param` 的字段 |
|''tm-add-field'' |添加指定于 `event.param` 的字段 |
|''tm-remove-tag'' |移除指定于 `event.param` 的标签 |
|''tm-add-tag'' |添加指定于 `event.param` 的标签 |
! 内容与属性
字段管理小工具显示任何包含的内容,并回应于其内分派的[[消息|Messages]]。
|!属性 |!说明 |
|tiddler |操作的条目名称 (缺省为[[当前条目|Current Tiddler]]) |
<<.widget-examples "FieldMangler">>
依次处理每个输入条目,检索其字段名称的清单(无特定的顺序),然后[[主导追加|Dominant Append]]到运算符的输出。
<<.operator-examples "fields">>
<<.operator-example 1 "[[HelloThere]fields[]]" "HelloThere 的字段">>
<<.operator-example 2 "[tag[Common Operators]fields[]]" "所有标签为 [[Common Operators]] 的条目的字段">>
! 简介
`<$fields>` 小工具经由一个简单的文本范本,呈现每个指定条目的字段。可以提供字段的排除清单。它用于 TiddlyWiki5 内部,尤其是通过[[文件保存机制|FileSavingMechanism]]。
!! 范本处理
所提供的范本呈现以下特定替换:
|!符号 |!替代 |
|$name$ |字段名称 |
|$value$ |字段内容 |
|$encoded_value$ |HTML 编码形式的字段内容 |
! 内容与属性
`<$fields>` 小工具的内文将被忽略。
|!属性 |!说明 |
|tiddler |要显示字段的条目名称(缺省为[[当前条目|Current Tiddler]]) |
|template |范本的文本(见上文) |
|exclude |要排除的字段清单(缺省为 "text") |
|stripTitlePrefix |若设为 "yes",那么大括号中的前缀将自名称中被删除(例如 `{prefix}HelloThere` 转换为`HelloThere`) |
其中 `stripTitlePrefix` 属性用于生成 TiddlyWiki 经典版;请参阅 TiddlyWiki5 源码保存库里的 `editions/tw2`。
<$railroad text="""
[{:
[: [[<" 空白字符 ">|"Filter Whitespace"]] ]
("+"|"~"|:-|"-"|"="|":"[[" 命名前置码 "|"Named Filter Run Prefix"]])
[[run|"Filter Run"]]
}]
"""/>
<<.def "筛选器表达式">>是[[筛选器语法|Filter Syntax]]的最外层,由一个或多个 [[runs|Filter Run]] 组成。
如果一个 run:
* 没有前置码,其输出名称则[[直接追加|Dominant Append]]到筛选器的输出。
* 前置码 `=`,输出的名称附加到筛选器的输出中,而不消除重复项。<<.from-version "5.1.20">>
* 具有前置码 `-`,其输出的名称则从筛选器的输出<<.em 移除>>(若此等条目存在)。
* 具有前置码 `+`,它接收筛选器到目前为止的输出作为其输入;其输出则<<.em "替换">>有筛选器输出到目前为止,并形成下一个 run 的输入
* 具有前置码 `~`,如果到目前为止的筛选器输出是一个空列表,则 run 的输出名称是[[主要追加|Dominant Append]]到筛选器的输出。如果到目前为止的筛选器输出不是空列表,则忽略该 run 。<<.from-version "5.1.18">>
* 筛选器 runs 的命名前置码可用。 <<.from-version "5.1.23">>
* 命名前置码 `:filter`,它接收筛选器的输出,直到其输入为止。下一个 run 将评估输入的每个名称,删除输出为空清单的每个输入名称。<<.from-version "5.1.23">>
* 命名前置码 `:intersection` 将到目前为止的所有筛选器输出,替换为此 run 输出中存在的标题,以及之前 run 的输出。为下一次 run 形成输入。 <<.from-version "5.1.23">>
* 命名前置码 `:reduce` 通过重复将公式应用于每个输入标题,将到目前为止的所有筛选器输出替换为单个项目。一个典型的用途是,将每个输入标题的给定字段中的值相加。<<.from-version "5.1.23">>
** [[示例|Filter Run Prefix (Examples)]]
* 命名前置码 `:sort` 通过将此 run 应用于每个输入名称,到目前为止排序所有筛选器输出,并根据该输出排序。
** 见 [[Sort Filter Run Prefix]]。
<<.tip "比较命名筛选器 run 前置码 `:filter` 与[[筛选器操作符|filter Operator]],后者将子筛选器应用于每个输入名称,删除从子筛选器返回空结果的名称">>
<<.tip "将命名筛选器 run 前置码 `:reduce` 与 [[reduce 操作符|reduce Operator]]进行比较,该前置码用于通过重复应用子筛选器,将项目清单平展到单个项目。">>
<<.tip """于筛选器 run 前置码 `:reduce`、`:sort` 和 `:filter` 内,"<<.var currentTiddler>>" 变量设置为正在处理的条目名称。子筛选器外部的 <<.var currentTiddler>> 的值可用于 "<<.var ..currentTiddler>>" 变量中。<<.from-version "5.1.24"<<.from-version "5.1.24">>""" >>
技术/ 逻辑术语:
|!Run |!等效命名的前置码 |!解译 |!输出 |
|`run` |`:or[run]` |联集,消除重复项 |... OR run |
|`=run` |`:all[run]` |联集,不消除重复项 |... OR run |
|`+run` |`:and[run]` |筛选器步骤的累积 |... AND run |
|`-run` |`:except[run]` |差集 |... AND NOT run |
|`~run` |`:else[run]` |其他 |... ELSE run |
||`:intersection`|交集||
有关 `+` 和 `:intersection` 的区别,请参阅 [[Filter Run Prefix (Examples)]]。
一个 run 的输入通常是维基中的所有非[[影子|ShadowTiddlers]]条目的名称清单(没有特定的顺序)。但是,前置码 `+` 可以更改之。
|前置码 |输入|h
|`-`、`~`、`=`、`:intersection` 或无| <$link to="all Operator">`[all[]]`</$link> 条目名称,除非另有第一个[[筛选器操作符|Filter Operators]]|
|`+`、`:filter`、`:reduce`、`:sort`|到目前为止所有之前的 run 的筛选器输出 |
、
正因为有不同的输入,请注意前置码 `-` 和 `+` 不能相互反转!
例如,在下面的两个例子中,只有当 `$:/baz` 实际存在时,才会被移除:
* <$link to="is Operator"> `foo bar $:/baz -[is[system]]`</$link>
* <$link to="prefix Operator">`foo bar $:/baz -[prefix[$:/]]`</$link>
理解为什么,考虑使用 `-` 前置码进行最终 run 的输入。
为了在任何情况下删除 `$:/baz`,存在或不存在,只需在[[否定的筛选操作符|Filter Operators]]使用 `+` 前置码:
* <$link to="is Operator">`foo bar $:/baz +[!is[system]]`</$link>
* <$link to="prefix Operator">`foo bar $:/baz +[!prefix[$:/]]`</$link>
<<.from-version "5.1.23">> <<.op filter>> 操作符为每个输入名称运行一个子筛选器,并返回子筛选器返回非空结果的那些输入名称 (换句话说,结果不是空清单)。子筛选器的结果将被扔掉。
简单的筛选操作可以直接连接在一起 (例如 `[tag[HelloThere]search[po]]`),但是当筛选操作需要计算中间结果时,这不起作用。<<.op filter>> 操作符可用于筛选被丢弃的中间结果。举同一个示例,并由 <<.field text>> 字段超过 1000 个字符的条目进行筛选:
```
<$vars myfilter="[get[text]length[]compare:integer:gteq[1000]]">
<$list filter="[tag[HelloThere]search[po]filter<myfilter>]">
<div>
<$link>
<$text text=<<currentTiddler>>/>
</$link>
</div>
</$list>
</$vars>
```
请注意,在子筛选器中,"<<.var currentTiddler>>" 变量设置为正在处理的条目名称。子筛选器外部的 <<.var currentTiddler>> 的值可用于 "<<.var ..currentTiddler>>" 变量中。<<.from-version "5.1.24">>
<<.tip "与运行一个子筛选器,并直接返回结果的类似[[子筛选器|subfilter Operator]]进行比较。">>
<<.tip "与类似的命名筛选器 run 前置码 `:filter` 进行比较">>
```
\define larger-than-1k() [get[text]length[]compare:integer:gteq[1000]]
{{{ [tag[HelloThere]filter<larger-than-1k>] }}}
```
等效于:
```
{{{ [tag[HelloThere]] :filter[get[text]length[]compare:integer:gteq[1000]] }}}
```
<<.operator-examples "filter">>
\define larger-than-1k() [get[text]length[]compare:integer:gteq[1000]]
\define smaller-than-2k() [get[text]length[]compare:integer:lteq[2000]]
\define contains-missing-links() [links[]!is[shadow]is[missing]]
\define display-variable(name)
''<$text text=<<__name__>>/>'': <code><$text text={{{ [<__name__>getvariable[]] }}}/></code>
\end
这些示例使用以下预先定义的变量:
* <<display-variable larger-than-1k>>
* <<display-variable smaller-than-2k>>
* <<display-variable contains-missing-links>>
<<.operator-example 1 "[tag[HelloThere]filter<larger-than-1k>]">>
<<.operator-example 2 "[tag[HelloThere]filter<smaller-than-2k>]">>
<<.operator-example 3 "[tag[HelloThere]filter<larger-than-1k>filter<smaller-than-2k>]">>
<<.operator-example 4 "[tag[Features]filter<contains-missing-links>]">>
\define .operator-rows(filter)
<$list filter="$filter$"><tr>
<td><$link>{{!!caption}}</$link></td>
<td>{{!!op-purpose}}</td>
<td align="center"><$list filter="[all[current]tag[Common Operators]]">✓</$list></td>
<td align="center"><$list filter="[all[current]tag[Negatable Operators]]">`!`</$list></td>
</tr></$list>
\end
\define .group-heading(_)
<tr class="doc-table-subheading"><th colspan="4" align="center">$_$</th></tr>
\end
<<.def "筛选器操作符">>是一个预先定义的关键字,附加于到个别的[[筛选器|Filters]]的 [[step|Filter Step]],定义了该 step 的特定动作。
每个[[筛选器运行|Filter Run]]的第一[[步骤|Filter Step]]不给予任何输入标题接受 <$link to="all Operator">[all[tiddlers]]</$link> 的输出作为其输入。
下列表格列出所有内核操作符,最常见的是勾选 ✓。最后一栏标示哪些操作符允许使用 <$link to="Filter Step"> <code>!</code> 前缀 </$link> 来''反转''他们的意义。每个操作符反转输出的细节请参阅其文档。
<table>
<tr>
<th align="left">操作符</th>
<th align="left">目的</th>
<th align="center">✓</th>
<th align="center">`!`</th>
</tr>
<<.operator-rows "[tag[Filter Operators]!tag[Order Operators]!tag[Mathematics Operators]!tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">>
<<.group-heading "顺序操作符">>
<<.operator-rows "[tag[Filter Operators]tag[Order Operators]!tag[Listops Operators]!tag[Mathematics Operators]!tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">>
<<.group-heading "Listops 操作符">>
<<.operator-rows "[tag[Filter Operators]tag[Listops Operators]tag[Order Operators]!tag[Mathematics Operators]!tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">>
<<.group-heading "字符串操作符">>
<<.operator-rows "[tag[Filter Operators]!tag[Order Operators]!tag[Mathematics Operators]tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">>
<<.group-heading "数学操作符">>
<<.operator-rows "[tag[Filter Operators]!tag[Order Operators]tag[Mathematics Operators]!tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">>
<<.group-heading "标签操作符">>
<<.operator-rows "[tag[Filter Operators]!tag[Order Operators]!tag[Mathematics Operators]!tag[String Operators]tag[Tag Operators]!tag[Special Operators]sort[]]">>
<<.group-heading "特殊操作符">>
<<.operator-rows "[tag[Filter Operators]!tag[Order Operators]!tag[Mathematics Operators]!tag[String Operators]!tag[Tag Operators]tag[Special Operators]sort[]]">>
</table>
一个典型的 step 是写成`[操作符[参数]]`,虽然不是所有的操作符都需要[[参数|Filter Parameter]]。
大多数 steps 处理[[选定的名称|Title Selection]]作为其输入,但有一些是[[构建一个全新的选择|Selection Constructors]]。确切的规则,请参阅[[筛选器语法|Filter Syntax]]。
<$railroad text="""
( "[" [:{/" ] 以外的任何字符 "/}] "]"
|
"{" [:{/" } 以外的任何字符 "/}] "}"
|
"<" [:{/" > 以外的任何字符 "/}] ">"
)
"""/>
[[筛选器操作符|Filter Operators]]的参数可以是:
;<<.def 硬式>>
: `[like this]`
: 该参数为中括号之间的文本。
;<<.def 软式>>
: <<.def 间接>>
:: `{like this}`
:: 该参数是由位于大括号之间的[[文本参考|TextReference]]表示的文本,即一指定条目的一个[[字段|TiddlerFields]],或指定的[[数据条目|DataTiddlers]]的属性值。
: <<.def 变量>>
:: `<like this>`
:: 该参数是[[变量|Variables]]当前的值,角括号之间的文本为参数名称。<<.em 不>>支持宏参数。
<<.from-version "5.1.23">> 筛选器操作符支持多个参数,这些参数由一个 ` , ` 字符分隔。
例如:`[param1],[param2]` 或 `<param1>,{param2}`
<$railroad text="""
( "[" { [[step|"Filter Step"]] } "]"
|
[:{/" [ ] 或空格以外的任何字符 "/}]
|
'"' [:{/' " 以外的任何字符 '/}] '"'
|
"'" [:{/" ' 以外的任何字符 "/}] "'"
)
"""/>
一个 <<.def run>> 系由一些 [[steps|Filter Step]] 组成,且输出[[选定条目|Title Selection]],形成一个较大的[[筛选器表达式|Filter Expression]]。
这些 steps 的处理是由左而右。首个 step 的输入与 run 的输入相同,而每个后续 step 的输入是前一个 step 的输出。
{{Selection Constructors}}
在图中下方的三个选项匹配语法像 `HelloThere`、`"HelloThere"`、`'HelloThere'` 和 `"Filter Operators"` 是 `[title[...]]` 的简写。
可选的引号支持名称中包含方括号,例如 `"An [[[[Unusual]]]] Tiddler"`。
!! `+` 和 `:intersection` 的区别
在正式逻辑中,`+` 前置码应视为 "AND",例如 "给我满足条件 A ''和'' 条件 B 的所有标题"。但它并不适合所有情况;如果条件 B 使用替换其输入的筛选器操作符,则很难使用 `+` 前置码。例如,如果您想要找出两个条目的共同标签,可以尝试编写一个筛选器表达式,例如:
* <$link to="tags Operator">`[[field Operator]tags[]] +[[compare Operator]tags[]]`</$link>
但这不起作用,因为第二个筛选器 run 最终会扔掉其输入,并将其替换为由单个标题 `[[compare Operator]]` 组成的输入。因此,从该筛选器表达式获得的结果将只 `compare Operator` 条目的标签。
对于此类情况,`:intersection` 前置码是您所要的。它采用到目前为止的筛选器输出,//将其放在一旁//的临时存储,并将所有条目名称作为输入,开始下一个筛选器 run。然后,一旦最新的筛选器 run 完成,它采取最新的输出,将其与预留输出比较,并生成一个新的输出,该输出仅包含出现在预留输出和最新输出中的标题。因此,要仅取得 `field Operator` 和 `compare Operator` 条目的共同标签,您需要编写一个筛选器,像这样:
* <$link to="tags Operator">`[[field Operator]tags[]] :intersection[[compare Operator]tags[]]`</$link>
以下示例使用 [[field 操作符|field Operator]] 和 [[compare 操作符|compare Operator]] 条目及其各自的标签。
<<.operator-example 1 "[[field Operator]tags[]]">>
<<.operator-example 2 "[[compare Operator]tags[]]">>
<<.operator-example 3 "[[field Operator]tags[]] +[[compare Operator]tags[]]" """" "field Operator" 条目的标签丢失,因此仅返回 "compare Operator" 条目的标签""">>
<<.operator-example 4 "[[field Operator]tags[]] :intersection[[compare Operator]tags[]]" """返回两个条目的共同标签""">>
!! `:reduce` 示例
```
[tag[shopping]] :reduce[get[quantity]add<accumulator>]
```
等同于:
```
\define num-items() [get[quantity]add<accumulator>]
[tag[shopping]reduce<num-items>]
```
当输入为空时,指定一个默认值:
`[tag[non-existent]] :reduce[get[price]multiply{!!quantity}add<accumulator>] :else[[0]]`
<$macrocall $name=".tip" _="""与 reduce 操作符|reduce Operator]]不同,`:reduce` 首码不能为累加器指定初始值,因此其初始值将始终为空(被数学操作符视为 0)。因此 `=1 =2 =3 :reduce[multiply<accumulator>]` 将生成 0,而不是 6。如果需要指定累加器初始值,请使用 [[reduce 操作符|reduce Operator]]。"""/>
!! `:sort` 示例
见 [[Sort Filter Run Prefix (Examples)]]
<$railroad text="""
[:"!"]
[: [[<" 操作符 ">|"Filter Operators"]] [:":" <" 尾码 ">] ]
[[<" 参数 ">|"Filter Parameter"]]
"""/>
一个 <<.def step>> 为[[筛选器|Filter Syntax]]内的单一操作。
在编程术语中,这就像函数调用,[[该 step 的输入|Filter Run]]当作一个隐含参数传递。一个 step 的输出是一个 [[selection|Title Selection]] 提供给 [[run|Filter Run]],从而为包含它的整个[[筛选器表达式|Filter Expression]]的输出。
step 的<<.def 操作符>> 是[[预先定义名称|Filter Operators]]的清单,可以通过插件扩充。任何无法识别的操作符名称被视为 <<.olink field>> 操作符的尾码。如果完全省略一个 step 的操作符,则其默认为 `title`。
<<.def 尾码>>是额外的文本,通常是[[字段|TiddlerFields]]的名称,为某些操作符的延伸含义。
许多 steps 需要明确的<<.def 参数>>值也称为<<.def 操作数>>,进一步定义该 step 要做什么。
<<.from-version "5.1.23">> 某些步骤接受多个参数,这些参数由一个 ` , ` 字符分隔。
<<.preamble """[[筛选器|Filters]]遵循此处介绍的语法,使用[[语法图表|Railroad Diagrams]]有助于那些寻找正式的语法描述的人。总之,[[您可以编写自己的筛选器|Introduction to filter notation]] ,而无需了解这群条目。""">>
<<.def 筛选器>>是一个转化一个<<.def 输入>>至一个<<.def 输出>>的输送管道。输入和输出是[[有序的条目名称集合|Title Selection]],有如条目和字段。
筛选器是由一些称为 [[runs|Filter Run]] 和 [[steps|Filter Step]] 的较小构建区块所组成的[[表达式|Filter Expression]],每一区块也将输入转换至输出。
筛选器起始于一个空的输出,其 runs 是由左至右处理的,逐步修改输出。
还有各种的构建区块相关的详细信息:
<<list-links "[tag[Filter Syntax]]">>
<$railroad text="""
{( " 空格 " | " 定位 " | " 换行 " | " 归位 " | " 垂直定位 " | " 换页 " )}
"""/>
空白字符可以出现于每个[[筛选器表达式|Filter Expression]]的 [[run|Filter Run]]之间。
您可将 TiddlyWiki 想成是数据库,其记录则为条目。数据库通常提供一种方法,查找哪些记录符合给定的模型,而在 ~TiddlyWiki 此即以筛选器达成。
<<.def 筛选器>>是用于选择一组特定条目的简明符号,称为其<<.def "输出">>。每当 ~TiddlyWiki 遇到一个筛选器,便计算其输出,然后就用那些条目做进一步的工作。像是,对其[[计数|CountWidget]]或[[列表|ListWidget]]。
下列示例将一个筛选器传递给 <<.mlink list-links>> 宏,显示名称开头为字母 H 的所有条目的清单:
> `<<list-links "[prefix[H]]">>`
在维基中加入与删除条目,则筛选器的结果可能改变。~TiddlyWiki 即时重新计算结果,也自动更新任何筛选器为基础的计数或列表。
[[高端搜索|$:/AdvancedSearch]]有一个<<.advancedsearch-tab Filter>>页签,可易于试验筛选器。
;了解更多:
* [[筛选器符号概述|Introduction to filter notation]] -- 逐步演练
* [[筛选器语法|Filter Syntax]] -- 符号的确切规则
* [[筛选器运算符|Filter Operators]] -- 可用的筛选器方法
<<.operator-examples "first">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]first[]]">>
<<.operator-example 2 "[list[Days of the Week]first[5]]">>
<<.operator-example 3 "[tag[Filter Operators]!sort[title]first[]]">>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
''fixed'' 运算符返回不使用指数表示法的输入数字的字符串表示,且小数点后面为准确指定的位数。如有必要,数字将四舍五入,如有必要,小数部分补零,使其具有指定的长度。
<<.operator-examples "fixed">>
<<.operator-example 1 "10.123456789 +[fixed[5]]">>
<<.operator-example 2 "[[355]divide[113]fixed[7]]">>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "floor">>
<<.operator-example 1 "[[1.6]floor[]]">>
<<.operator-example 2 "[[-1.6]floor[]]">>
<<.operator-example 3 "=-1.2 =-2.4 =3.6 =4.8 =5.1 +[floor[]]">>
<<.from-version "5.1.23">>
尾码 <<.place B>> 是以下受支持的字符串格式之一:
|!格式 |!描述 |
|^`date` |输入的字符串将解释为 UTC 日期,并根据可选的操作符参数中指定的[[日期格式|DateFormat]]显示。(默认为 "YYYY MM DD 0hh:0mm") |
|^`relativedate` |输入的字符串将解释为 UTC 日期,并显示为从当前时刻开始的间隔时间。任何操作符参数都将被忽略。 |
|^`titlelist` |<<.from-version "5.2.0">> 如果输入字符串包含一个空格,则用双方括弧包裹。适合用于[[标题清单|Title List]]。 |
<<.operator-examples "format">>
这些示例使用了[[嗨,您好|HelloThere]]条目。
创建日期,为指定格式字符串:
<<.operator-example 1 "[[HelloThere]get[created]format:date[]]">>
创建日期,以格式字符串供作操作符参数:
<<.operator-example 2 "[[HelloThere]get[created]format:date[DDth MMM YYYY]]">>
修改日期显示为相对日期:
<<.operator-example 3 "[[HelloThere]get[modified]format:relativedate[]]">>
条目名称有空格,格式化为标题清单:
<<.operator-example 4 """[[Hello There]format:titlelist[]]""">>
所有标签为 <<tag TableOfContents>> 的条目名称格式化为标题列表:
<<.operator-example 5 """[tag[TableOfContents]format:titlelist[]]""">>
<<.tip "创建一个字符串以保存[[标题清单|Title List]]进一个 <<.field list>> 字段,使用 `format:titlelist[]` 于 [[join 操作符|join Operator]]">>
<<.operator-example 6 """[tag[TableOfContents]format:titlelist[]join[ ]]""">>
例如,保存标签为 `TableOfContents` 的条目名称至条目 [[format titlelist test]] 的 <<.field titles>> 字段:
<$macrocall $name='wikitext-example-without-html'
src='<$button> 测试
<$action-setfield $tiddler="format titlelist test" titles={{{ [tag[TableOfContents]format:titlelist[]join[ ]] }}}/>
</$button>'/>
可用的格式字符包括:
* <code>`反引号`</code> 用于 `代码`
** 另外,<code>``连续两个反引号则为 `可嵌入` 反引号``</code> (<<.icon $:/core/images/mono-line>>)
* `''粗体''` 显示 ''粗体字'' (<<.icon $:/core/images/bold>>)
* `//斜体//` 显示 //斜体字// (<<.icon $:/core/images/italic>>)
* `__底线__` 显示 __底线__ (<<.icon $:/core/images/underline>>)
* `^^上标^^` 显示 ^^上标^^字 (<<.icon $:/core/images/superscript>>)
* `,,下标,,` 显示 ,,下标,,字 (<<.icon $:/core/images/subscript>>)
* `~~删除线~~` 显示 ~~删除文本~~ (<<.icon $:/core/images/strikethrough>>)
参见: [[Code Blocks in WikiText]]
有时您想要 ``<$list>`` 小工具的结果为多行的格式,而非只是直接列表。下面的方法,创建一个实际的表格结构,并使用 [[nth 运算符|nth Operator]]提供列的中断点。它是响应式的,也就是说,如果窗口太小,则重新定位以显示较少的行。
首先,外部清单结构,您必须提供一个计数,指示应该发生在项目数量的列。所以,在下面的示例中,每列在 4 个项目后中断,因此串行为 1,5,9 等等。请注意,这需要您事先知道会有的最大项目数量。还有一个内部限制是设置为 n-1 个项目,其中 n 是您想要的行数。
还要注意,您需要在内部的 `<$list>` 小工具中,重复驱动筛选器运算符。显然,此技术适合于宏实现。
其他表格制作技术也请参阅︰
* [[以 CSS 格式化列表结果为表格 - 可变行数的方法|Formatting List Results as Tables with CSS - Variable Column Method]]
* [[以 CSS 格式化列表结果为表格 - 指定行数的方法|Formatting List Results as Tables with CSS - Specified Columns Methods]]
!! 少于 70 个项目的四行表格的示例代码
```
<table>
<$list filter="1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65" variable ="rows">
<$list filter="[tag[Filter Operators]limit[50]] +[nth<rows>]" variable="cell">
<tr>
<td> <<cell>> </td>
<$list filter="[tag[Filter Operators]limit[50]] +[allafter<cell>limit[3]]" variable="this">
<td> <<this>> </td>
</$list>
</tr>
</$list>
</$list>
</table>
```
!! 结果
<table>
<$list filter="1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65" variable ="rows">
<$list filter="[tag[Filter Operators]limit[50]] +[nth<rows>]" variable="cell">
<tr>
<td> <<cell>> </td>
<$list filter="[tag[Filter Operators]limit[50]] +[allafter<cell>limit[3]]" variable="this">
<td> <<this>> </td>
</$list>
</tr>
</$list>
</$list>
</table>
有时您想要 ``<$list>`` 小工具的结果为多行的格式,而非只是直接列表。此方法使用 CSS 设置列表行数,且假定您知道要多少行。这里的方法是创建一个样式,反映您希望的表格行数,然后再套用样式到结果清单的输出。
其他表格制作技术也请参阅︰
* [[以 CSS 格式化列表结果为表格 - 可变行数的方法|Formatting List Results as Tables with CSS - Variable Column Method]]
* [[格式化列表结果为表格 (不用 CSS)|Formatting List Results as Tables (no CSS)]]
!!! 1) 创建一个该行的条目,标签为 `$:/tags/Stylesheet`,包含︰
```
/* FOUR COLUMN MODE */
.fourcolumns {
display:block;
column-count:4;
column-gap:1em;
-moz-column-count:4;
-moz-column-gap:1em;
-webkit-column-count: 4;
-webkit-column-gap:1em;
}
```
请注意您需要标明行数的不同地方
!!! 2) 然后格式化您的输出像这样:
```
@@.fourcolumns
<$list filter="[tag[Filter Operators]]" variable="foo"><br>
<<foo>>
</$list>
@@
```
!! 示例显示筛选器操作符的部分列表
<style>
.fourcolumns {
display:block;
column-count:4;
column-gap:1em;
-moz-column-count:4;
-moz-column-gap:1em;
-webkit-column-count: 4;
-webkit-column-gap:1em;
}
</style>
@@.fourcolumns
<$list filter="[tag[Filter Operators]limit[24]]" variable="foo"><br>
<<foo>>
</$list>
@@
有时您想要 ``<$list>`` 小工具的结果为多行的格式,而非只是直接列表。此方法使用 CSS 设置列表行数。它是响应式的,也就是说,如果窗口太小,则重新定位以显示较少的行。
您不直接指定固定的行数,而是指定列表的最大宽度(可以是嵌入条目的宽度)和每个项目的宽度。其从左到右列出,然后换行到新行。
其他表格制作技术也请参阅︰
* [[以 CSS 格式化列表结果为表格 - 指定行数的方法|Formatting List Results as Tables with CSS - Specified Columns Methods]]
* [[格式化列表结果为表格 (不用 CSS)|Formatting List Results as Tables (no CSS)]]
!! 使用现有的 50个 ~TiddlyWiki 标签的示例清单
```
<div class="dynamic-table">
<$list filter="[has[tags]tags[]sort[title]first[50]]">
<span class="item">
<$transclude tiddler="$:/core/ui/TagTemplate"/>
</span>
</$list>
</div>
```
!! 用于清单的示例样式表
```
<style>
.dynamic-table {
max-width:700px; /* could transclude tiddler width instead */
-ms-box-orient: vertical; /* might be unnecessary */
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -moz-flex;
display: -webkit-flex;
display: inline-flex;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
flex-direction: row;
}
.item {
max-width:160px; min-width:160px;
flex: 0 0 2em; /* -grow, -shrink, -basis */
}
</style>
```
!! 结果
<div class="dynamic-table">
<$list filter="[has[tags]tags[]sort[title]first[50]]">
<span class="item">
<$transclude tiddler="$:/core/ui/TagTemplate"/>
</span>
</$list>
</div>
<style>
.dynamic-table {
max-width:700px; /* could transclude tiddler width instead */
-ms-box-orient: vertical;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -moz-flex;
display: -webkit-flex;
display: inline-flex;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
flex-direction: row;
}
.item {
max-width:160px; min-width:160px;
flex: 0 0 2em; /* -grow, -shrink, -basis */
}
</style>
在条目的文本中可以使用称为 WikiText 的特殊格式来控制文本的显示方式。
WikiText 可以使用[[编辑器工具栏|Editor toolbar]]输入,或手动键入。虽然前者很方便,但是当您知道 WikiText 标记代码时,后者会更快。
! 简单的格式
简单来说,WikiText 可让您使用熟悉的文本处理功能,如粗体、斜体、清单和表格。例如:
```
The ''quick'' brown ~~flea~~ fox //jumps// over the `lazy` dog
```
显示为:
The ''quick'' brown ~~flea~~ fox //jumps// over the `lazy` dog
! 和条目一起工作
WikiText 允许您链接到条目使用双重方括弧,或利用驼峰匹配单词自动链接:
```
这是一个链接到 HelloThere,一个到 [[History of TiddlyWiki]]
```
显示为:
这是一个链接到 HelloThere,一个到 [[History of TiddlyWiki]]
! 宏
宏让你打包重复片段的 WikiText,以便您可以轻松地重用它们。
例如,下列宏的定义,从其唯一识别码生成一个 YouTube 视频的 URL :
```
\define youtube(video)
https://www.youtube.com/watch?v=$video$
\end
```
有此定义,`<< YouTube的1g66s7UbyuU >>` 生成 URL https://www.youtube.com/watch?v=1g66s7UbyuU
! 高级的 WikiText
高级 WikiText 的功能,可以自动生成列表和像是下拉列表的交互功能。实际上,TiddlyWiki 本身的整个用户接口即是以 WikiText 写成的,因此在 TiddlyWiki 看到的任何功能可在您自己的维基改写使用。
某些高级功能要求复杂编码。TiddlyWiki 包含一些内置宏简化一般的用户接口任务,像是页签、目录和条目清单。
! 了解更多
有关详细介绍写作 WikiText,请参阅 [[WikiText]]。
! 用户
~TiddlyWiki 论坛为谈论有关 ~TiddlyWiki 的邮寄清单: 请求协助、新版本和插件的公告、讨论新功能,或只是分享经验。你可以通过相关的网站参参与,或通过电子邮件订阅。
* 主要的 ~TiddlyWiki 论坛: https://groups.google.com/group/TiddlyWiki
*> 请注意您不需要谷歌帐户即可加入讨论群组。通过发送电子邮件到 mailto:tiddlywiki+subscribe@googlegroups.com 来订阅。
** 在 [[mail-archive.com|https://www.mail-archive.com/tiddlywiki@googlegroups.com/]] 有个增强的讨论群组搜索工具可用
* 关注我们的常规录像 [[TiddlyWiki Hangouts]]
* 追随 [[@TiddlyWiki 在 Twitter|http://twitter.com/TiddlyWiki]] 的最新消息
* 加入我们的即时聊天,在 https://gitter.im/TiddlyWiki/public !
* 另有一个 Discord 网络即时通信,在 https://discord.gg/HFFZVQ8
! 开发者
{{Developers}}
新版的 TiddlyWiki、TiddlyDesktop 和 TiddlyFox 通过论坛和 [[Twitter|https://twitter.com/TiddlyWiki]] 发布(您也可以订阅[[自 GitHub 发布的 TiddlyWiki|https://github.com/jermolene/tiddlywiki5/releases.atom]] 的 Atom/RSS 新闻来源)
! 文档
也有一个专门讨论 TiddlyWiki 文档改进倡议的群组︰https://groups.google.com/group/tiddlywikidocs
TiddlyWiki 的法文翻译版本:
* ''文档'': https://tiddlywiki.com/languages/fr-FR/index.html
* ''空白版本'': https://tiddlywiki.com/languages/fr-FR/empty.html
<<.this-is-operator-example>>
"完整" 版包含 TiddlyWiki 的所有可用的语言、布景主题和插件。其目的是用于检测 TiddlyWiki - 尤其是,对所有可用的语言插件之间切换的检测。
可以从以下网址下载完整版本:
https://tiddlywiki.com/editions/full/index.html
一个插件,集成 [[lunr.js|https://lunrjs.com/]] 搜索引擎,给 TiddlyWiki 更复杂的搜索功能:
{{!!url}}
<<<
Provides an alternative search result list that orders results by search relevance and ignores differences in word forms (ex. //tag// vs //tags//).
On my personal wiki, I have the problem that there are terms I use across a lot of tiddlers, and sometimes I'll use different forms (such as the aforementioned //tag// vs //tags//). I wanted a plugin to allow me to find the tiddler I'm looking for quickly and didn't require me to worry about how I declined a noun or inflected a verb - so I wrote this plugin, which provides an alternative search list powered by [[lunr.js|https://lunrjs.com/]].
<<<
摘录自 2016 年 01 月的[[网络世界|http://www.networkworld.com/article/3028098/open-source-tools/tiddlywiki-a-free-open-source-wiki-revisited.html]]杂志:
<<<
Way back in the mists of time (actually, January 2009) I [[wrote|http://www.networkworld.com/article/2272104/applications/an-amazing-free-microwiki.html]] about a really cool tool called TiddlyWiki, a “non-linear personal web notebook”. Fast forward to today and I just had an out of body experience: Completely by accident I found a TiddlyWiki that I started when I wrote that piece and it still works!
Finding code that works flawlessly after just two or three years is magical enough but after seven years?! And given that TiddlyWiki is written as a single page Web application and considering how different browsers are now than they were in 2009, the fact that the old version of TiddlyWiki still works is not short of miraculous.
<<<
TiddlyWiki 旨在与铭记其用户的长期需求。因为它是开放源码,且无需基础设施,我们可以确信,即使在遥远的未来,所有我们需要访问 ~TiddlyWiki 文件的只是一个普通的 HTML 浏览器。如果在您的职业生涯开始时使用 ~TiddlyWiki,您可以确信它将带您直到退休。
TiddlyWiki5 可用于生成无需 JavaScript 的 TiddlyWiki 静态 HTML 形式。
此处理需要在本地系统上的 Node.js 上安装 Tidlywiki。详细信息请参阅[[在 Node.js 上安装 TidlyWiki|Installing TiddlyWiki on Node.js]]。
生成静态 HTML 的方式有很大的灵活性。以下方案枚举于 https://tiddlywiki.com。
! 维基快照和条目快照
您可于 https://tiddlywiki.com/static.html 探索 TiddlyWiki 主要网站的静态页面。该文件是当前 DefaultTiddlers 的静态快照。它经由如 `/static/HelloThere.html` 形式的 URL 引用链接到任何条目,其指向个别条目静态快照。该条目 HTML 文件引用了 `static.css` 样式表文件。
以下命令用于生成静态版 TiddlyWiki 网页的示例:
```
tiddlywiki wikipath --rendertiddlers '[!is[system]]' $:/core/templates/static.tiddler.html static text/plain
tiddlywiki wikipath --rendertiddler $:/core/templates/static.template.html static.html text/plain
tiddlywiki wikipath --rendertiddler $:/core/templates/static.template.css static/static.css text/plain
```
第一个 RenderTiddlersCommand 生成个别条目的 HTML 表示形式,第二个 RenderTiddlerCommand 保存 DefaultTiddlers 的静态版本,第三个保存样式表。(所有档都放在维基文件夹中的 `output` 文件夹)。
! 用内部链接的维基快照
它也可生成一个单一的 HTML 文件包含一些条目的静态呈现,并使用标准的 HTML 锚链接于它们之间跳转。
例如:https://tiddlywiki.com/alltiddlers.html
该示例是由下列命令创建:
```
--rendertiddler $:/core/templates/alltiddlers.template.html alltiddlers.html text/plain
```
TiddlyWiki 的德文 (奥地利) 翻译版本:
* ''文档'': https://tiddlywiki.com/languages/de-AT/index.html
* ''空白版本'': https://tiddlywiki.com/languages/de-AT/empty.html
另请参阅 [[德文 (德国) 版|German (Germany) Edition]]。
TiddlyWiki 的德文 (德国) 翻译版本:
* ''文档'': https://tiddlywiki.com/languages/de-DE/index.html
* ''空白版本'': https://tiddlywiki.com/languages/de-DE/empty.html
另请参阅 [[德文 (奥地利) 版|German (Austria) Edition]]。
依次处理每个输入的名称。如果对应的条目包含字段 <<.place F>>,且此字段的值不是空的,则将其值追加到输出。
不同于大多数其他的[[筛选器运算符|Filter Operators]],由 <<.op get>> [[选择|Title Selection]]的输出可以包含重复项目。使用 `each[f]get[f]` 可避免重复。
<<.operator-examples "get">>
<<.operator-example 1 "[all[current]get[draft.of]]" "当前条目为草稿条目(亦即当前条处于编辑状态)的条目名称">>
<<.operator-example 2 "[get[tags]]">>
<<.operator-example 3 "[each[tags]get[tags]]">>
//[[工作管理示例|TaskManagementExample]]的样品任务//
依次处理每个输入的名称。如果它并不表示一个[[数据条目|DataTiddlers]]则忽略之。如果条目包含 <<.place P>> 属性,则[[主导追加|Dominant Append]]该属性的值到运算符的输出。
<<.operator-examples "getindex">>
<<.operator-example 1 "[[$:/palettes/Vanilla]getindex[background]]" "传回[[数据条目|DataTiddlers]] [[$:/palettes/Vanilla]] 的索引 ''background'' 的值">>
<<.operator-example 2 "[all[shadows+tiddlers]tag[$:/tags/Palette]getindex[background]]" "返回在 ColourPalettes 中定义的所有的背景颜色">>
这份简短的教学,引导您完成标准版 TiddlyWiki 文件的基本的保存变更。
//请注意,影片是有点过时了,不久后会更新 !//
<iframe width="560" height="315" src="https://www.youtube.com/embed/1g66s7UbyuU" frameborder="0" allowfullscreen></iframe>
点击这里下载一个 TiddlyWiki 的空白副本:
{{$:/editions/en-US/snippets/download-empty-button}}
{{$:/editions/zh-Hans/snippets/download-empty-button}}
{{$:/editions/zh-Hant/snippets/download-empty-button}}
下一步是选择一种保存变更的方法。有各种可用的方法,具有不同的功能和限制。点击方法的徽章查看更多关于它的信息。您还可以点击其中一个平台筛选器,将列表限制为用于该平台的方法。
<<.warning "不要尝试使用浏览器菜单列的''文件''/''另存新档''的功能表选项来保存变更(这无法正确保存 TiddlyWiki)">><br /><br />
{{Saving}}
在 Android 系统上使用 TiddlyWiki 有三个选项:
! 使用 Firefox 与 TiddlyFox
{{Saving with TiddlyFox on Android}}
! 使用 AndTidWiki 应用程序
{{Saving on Android}}
! 在 Termux 中使用 Node.js
{{Serving TW5 from Android}}
于 Google 浏览器,TiddlyWiki 只能用 HTML5 兼容的备用保存模块保存变更。
{{Saving with the HTML5 fallback saver}}
Firefox 提供了最佳的用户体验,使用 TiddlyWiki 与 TiddlyFox 浏览器附加组件。
{{Saving with TiddlyFox}}
{{Saving with TiddlyIE}}
[[Windows HTA Hack]] 描述了于 Internet 浏览器使用 TiddlyWiki 的另一种方法。
{{Saving on iPad/iPhone}}
{{Installing TiddlyWiki on Node.js}}
TiddlyWiki 也可以托管于 Dropbox 和 Cloudant 等在线服务。
;Dropbox (同步整个 HTML 文件)
:要编辑存放在您的 Dropbox 的文件,请到 https://twcloud.github.io/tw5-dropbox/。这将允许您开启找到的任何 HTML 文件。
;Cloudant (或其他 CouchDB 类型服务器) (同步单个条目)
:http://noteself.github.io/
于 Safari,TiddlyWiki 只能用手动的 HTML5 兼容的备用保存模块保存变更。
{{Saving on Safari}}
<<.from-version "5.1.20">> 在筛选器中检索变量值的常用方法,是使用角括弧标记法。例如,`[<currentTiddler>]` 将检索名为 `currentTiddler` 的变量的值。。
`getvariable` 筛选器运算符提供了另一种方法来检索变量。例如,`[[currentTiddler]getvariable[]]` 是检索变量 `currentTiddler` 值的另一种方法.
`getvariable` 的优点是能够使用名称已计算的变量,且事先并不知道该变量名称。例如,`[<myvariable>getvariable[]]` 取得在变量 `myvariable` 中给定其名称的变量的值。
<<.operator-examples "getvariable">>
<<.operator-example 1 "[[currentTiddler]getvariable[]]" " 返回变量 ''currentTiddler'' 的值">>
GitHub 是使用 git 作为其版本控制系统的分布式项目托管服务。允许免费托管和开放源码项目的管理,促进协同发展原始代码。使用 GitHub 非开源的努力则需要额外的费用。
TiddlyWiki 的原代码和文档托管于 GitHub:
https://github.com/Jermolene/TiddlyWiki5
GitHub 还提供一个免费的网络托管服务 [[GitHub Pages|https://pages.github.com/]],可直接从单一文件配置使用。请参阅 [[保存到 Git 服务|Saving to a Git service]]。
GitHub Saver 是一个逐步教学,演示如何集成 Tiddlywiki 5 和 GitHub 页面来创建托管在 https://github.com/。
{{!!url}}
此指令基于 Tiddlywiki 单一 html 文件模型,同时它可以在单独的文件夹中,使用额外材料,如影像、音频、视频、pdf,...于子数据。
!! 其他教学
;Tiddlywiki、Travis-CI 和 GitHub Pages
:https://kookma.github.io/Tiddlywiki-Travis-CI/
:此 wiki 演示如何使用 [[Travis-CI|https://travis-ci.org]] 和 [[Tiddlywiki 5|https://tiddlywiki.com]] 于 Node.js 上,设置托管网站 [[GitHub Pages|https://pages.github.com/]] 。
;Tiddlywiki 和 GitHub Pages
:https://kookma.github.io/Tiddlywiki-and-GitHub-Pages/
:此指令基于本地编辑、保存和推送到 GitHub。它不使用新的 GitHub 保存机制 (需要 Tw 5.1.20+),而允许直接从 Tiddlywiki 编辑和保存!
//[[工作管理示例|TaskManagementExample]]的样品任务//
iVBORw0KGgoAAAANSUhEUgAAAjAAAAE7CAYAAADD3rsxAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACMKADAAQAAAABAAABOwAAAABib+U7AABAAElEQVR4AezdZ7dlRfUu8NWwBQMqJhQV3ZhzAFRAgsQGEfNAB/69gzHUL3Ff3S/i8IUvFDHRKlH/NLFRFLOIGI4Bc8CIgXDXr/Bpi+WOp0/32ed01RjrrL3WqjBr1pzPfKpq7X12XHrppQ++6EUv6l74whd2hxxySPfggw92f/zjH7u1tbXusMMO6571rGd1j33sY8v9rqWmgaaBbaEBfr5jx46V6Qt57rvvvoYzKzMiTZCmgdXTQDDr0EMPLcKNnvjEJ3Z33nlnd+SRR3bPfOYzuz/96U/dDTfc0O3atasQlxNPPLE7++yzuyc/+ckNXFZvPJtETQPr0kCAYF2FW6GmgaaBpoFN0ICJjmSyA8MOOf7447tHPepR3Xe/+93ugQce6P7whz90t9xyS3f33Xd3j3/847vvf//73V133VUyN9DbhBFrTTYNNA00DTQNNA00DTxMA8jMCJOxuvKd73yn+/vf/16YjfOrXvWq7pJLLul+/etfl9WZf/3rX+X5ox/96L1bTQ+rrb8IwQlLGj5v100DTQNNA00DTQNNA00DG6GB0Ze+9KXu3nvv7f7yl7+ULSKrMU996lMLWdHA7373u+6Rj3xk99Of/rT72te+1h199NHdk570pO7Zz352d/jhh+/dVvrnP//Z/fnPfy7vzRxxxBEbIVuro2mgaaBpoGmgaaBpoGlgogZGCMpvf/vbbjweF0KCfPhsG+lHP/pRd+utt5aCp5xySnf99deXF3xf/OIXd29/+9s7L9KMRqNCav72t7+VMlZhzj///LJKM7HFdrNpoGmgaaBpoGmgaaBpYB81MDrppJPKKssxxxxTCInVFt9K+spXvlK2ldzfs2dP95vf/KZ7xCMe0f3+97/vvPh7xx13dDfddFNnS+mss87qnve855VvLv385z/vzjjjjA4R8k6NlK0ln9v2Ei201DTQNNA00DTQNNA0sC8aGD3nOc/pjj322FIHwoGkPPe5z+1OPvnksuLiwV//+tfOCouto+c///nlW0nXXXdd99WvfrV7xSte0fmMpCAzvsUkr88hK7ao3ENqbFG5n2f7Inwr2zTQNNA0sMoagIv1BI6smditstxNtqaBraCB0dCZXD/ucY/r3vCGNxRHs5X09Kc/vTvqqKPKezFe6vX7MA733/jGN3beo7n55pu7ZzzjGZ2XfX1zCblxbTVHmWuuuabU+9KXvrR8Xdtvy8S5hw6+FRTXZGwaaBpoGpimAZgGS03cTOp8MQJmwtbHPOYxZbV7iL3T6mr3mwaaBiZrYDT5dldWWy644ILybSROaNuIw3lfxuqJ34zhiJJvMSExCI0fwbv88su7e+65p3vb295WCIz3ZKziyPO///u/3cte9rLuta99bVnt8R7Ny1/+8vbOzLSBaPebBpoGtpQGkBeE5Qc/+EH35S9/ufvhD39YvuBge96k7gUveEHnPcKnPe1p5R3Cthq9pYa3CbtCGphKYDgVguIXeiVft5aQFLMI20zj/mXfq6++ujjrP/7xjzLDQGC87Otr2BwVQfGtpje/+c1lxeWyyy4rZysw6vfNJW1kawlJAgD5VeDSaPvTNNA00DSwBTQAu3wj8+tf/3r3iU98ovviF7+499uZtuc9Nxk84YQTup07d5bJG2LTSMwWGNwm4sppYCqBIWm9xMnxvNBr5UXyFWov737605/ufvWrX3UveclLyjZTtpeQHCsvynFcX7u28mKryfs1r371q8uqzC9/+cvivAiL7Sd1eRHY1pN3ZppjF3W3P00DTQNbRAM//vGPyy+ZezcQOfENTpM0n30Zwo+G+gIEnLvooou6173udXsncFuki03MpoGV0MBMAjOUsCYTSAlCgmT41V4rM55bmUFcrLD4CrYlU6swCIq8Vl2syHDo2267rUNg/AYN57bNZNn1iiuu6C6++OLygrA60y4y1FLTQNNA08AqagDG+cLC7bffXlZeYOS5555bttJN4FzDOgTn85//fFmptiINF4877rgy2VvFfjWZmgZWVQN7Ccz999+/d+tmUWGtttgm8s0kyfaRrSIExtetvcj7mte8pnzLCfnwzSRExb8rkLwn470Yy6k/+9nPitN75l8XuLYNhbx4CW6t/+eSiM9TnvKU9r5M0V770zTQNLBKGoBxflfLr5o7IyV+E8tEzzNYZqvctznhmM/f/OY3y0qMb3MiOC01DTQNLK6BkVmD91t8UwihsHWTNG/F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
下列的侧边栏页签,给了创建嵌套式分群清单例子。
!! ''类型''页签
如以下所示的[[类型|$:/core/ui/MoreSideBar/Types]]页签,其外层清单筛选器选择在 `type` 字段中找到的每个离散的值,内层清单筛选器选择该类型的所有(非系统)条目。
<<tw-code-link "$:/core/ui/MoreSideBar/Types">>
!! ''最近''页签
在[[最近|$:/core/ui/SideBar/Recent]]页签的清单系使用 TimelineMacro 生成。这里的外层清单筛选器选择在 `modified` 的字段中找到每个日期,而内层清单筛选器选择所有条目在 `modified` 的字段都为同一天。
<<tw-code-link "$:/core/macros/timeline">>
<<.def "硬式链接">>是一种可以由 WikiText 表面检查被检测到的链接。
若为下列情形则为 <<.def "软式链接">>:
* 包含于从别处[[嵌入|Transclusion]]的文本
* 由[[宏|Macros]]或[[变量|Variables]]提供
* 由其 <<.attr to>> 属性是嵌入、宏或变量的链接小工具生成
<$macrocall $name=".warning" _="""软式链接为链接相关的筛选器运算符未检测到的链接,例如,<<.olink backlinks>>、<<.olink links>>、<<.olink all>> 和 <<.olink is>>。"""/>
! 换行
通常[[段落|Paragraphs in WikiText]]的处理会导致单个换行符号被忽略,且连续两个换行符号被解译为一个段落的结束。
这种行为不太方便处理包含了换行符号的题材 - 例如,诗歌。您可以标记一个包含分行符号的区块,像这样:
<<wikitext-example src:'"""
This is a line
and this is a new line
while this is yet another line
and this is the final one
apart from this one
"""'>>
自 TiddlyWiki 5.1.16 版开始,可以使用 `data-` 属性套用样式。请参阅:[[如何套用自定义样式|How to apply custom styles]]
[[自定义数据样式|Custom data-styles]]样式表条目包含以下定义:
```
[data-tags*="example-hardlinebreaks"] .tc-tiddler-body {
word-break: normal;
word-wrap: break-word;
white-space: pre-wrap;
}
```
如果在没有该标签的情况下呈现,则会像下面这样显示 "使用 CSS 硬式换行 - 范例" 的内容:
>{{Hard Linebreaks with CSS - Example}}
----
开启条目查看套用的自订 CSS 规则:[[使用 CSS 硬式换行 - 范例|Hard Linebreaks with CSS - Example]]
以下文本呈现,不带任何特殊的 WikiText 语法。因此,大部分的 ~WikiText 功能将是可访问的。
This is a line
and this is a new line
while this is yet another line
and this is the final one
apart from this one
<<.operator-examples "has">>
<<.operator-example 1 "[has[color]]">>
<<.operator-example 2 "[tag[Concepts]!has[modified]]">>
<<.operator-example 3 "[has:field[emptyfield]]">>
<<.operator-example 4 "[all[current]!has:field[doesntexist]]">>
<<.operator-example 5 "[all[tiddlers+shadows]has:index[foreground]]">>
<<.operator-example 6 "[all[current]!has:index[doesntexist]]">>
从当前 ~TiddlyWiki 工作阶段开始,如果一个条目已被写回到维基,即被视为已被修改。如果你编辑一个条目,并立即将其再次存储没有做任何改动,即足以将其标记为已修改。
<<.operator-examples "haschanged">>
! Headings
标题为指定为最多六个前导 `!` 字符:
```
! This is a level 1 heading
!! This is a level 2 heading
!!! This is a level 3 heading
```
可指定 CSS 类别给个别的标题,例如:
<<wikitext-example src:"" "!!.myStyle This heading has the class `myStyle`">>
按钮 {{ $:/core/ui/EditorToolbar/editor-height}} 允许您调整文本输入字段的高度。
''您曾感觉您的头不是大得足以容纳一切你需要记住的事吗?''
欢迎使用 ~TiddlyWiki,一个独特的[[非线性|Philosophy of Tiddlers]]笔记本,用于[[截取|Creating and editing tiddlers]]、[[管理|Structuring TiddlyWiki]]和[[共用|Sharing your tiddlers with others]]复杂的信息。
用它来保留您的[[待办清单|TaskManagementExample]]、计划一篇[[散文或一部小说|"TiddlyWiki for Scholars" by Alberto Molina]]、或安排您的婚礼。记录每个闪过您脑中的想法,或创建一个灵活和反应迅速的网站。
<div style="font-size:0.7em;text-align:center;margin-top:2em;margin-bottom:2em;">
<<list-thumbnails filter:"[tag[HelloThumbnail]]" width:"168" height:"95">>
</div>
不同于传统的在线服务,TiddlyWiki 允许您选择在何处保存您的数据,保证在未来几十年,您将[[仍能使用|Future Proof]]今天做的笔记。
<div style="font-size:0.7em;text-align:center;margin:3em auto;">
<a href="https://groups.google.com/group/TiddlyWiki" class="tc-btn-big-green" style="border-radius:4px;background-color:#FF8C19;" target="_blank" rel="noopener noreferrer">
{{$:/core/images/help}} Forum
</a>
<a href="https://www.youtube.com/c/JeremyRuston" class="tc-btn-big-green" style="border-radius:4px;background-color:#e52d27;" target="_blank" rel="noopener noreferrer">
{{$:/core/images/video}} YouTube
</a>
<a href="https://twitter.com/TiddlyWiki" class="tc-btn-big-green" style="border-radius:4px;background-color:#5E9FCA;" target="_blank" rel="noopener noreferrer">
{{$:/core/images/twitter}} Twitter
</a>
<a href="https://github.com/Jermolene/TiddlyWiki5" class="tc-btn-big-green" style="border-radius:4px;background-color:#444;" target="_blank" rel="noopener noreferrer">
{{$:/core/images/github}} GitHub
</a>
<a href="https://gitter.im/TiddlyWiki/public" class="tc-btn-big-green" style="border-radius:4px;background-color:#753a88;background-image:linear-gradient(to left,#cc2b5e,#753a88);" target="_blank" rel="noopener noreferrer">
{{$:/core/images/gitter}} Gitter
</a>
</div>
<<<.tc-big-quote
''The ~TiddlyWiki is the best software I've ever found for organising my ideas.''
It's well worth spending an hour or so playing with it to see how it can help you. This will be time well-spent and will change how you think and how you organise your ideas.
<<< [[Joe Armstrong, Co-inventor of Erlang|https://joearms.github.io/]]
<<<.tc-big-quote
''~TiddlyWiki gets a Gearhead rating of 6 out of 5 (it's that good).''
Finding code that works flawlessly after just two or three years is magical enough but after seven years?!
<<< [[Mark Gibbs, Network World|http://www.networkworld.com/article/3028098/open-source-tools/tiddlywiki-a-free-open-source-wiki-revisited.html]]
<div style="font-size:0.7em;text-align:center;margin:3em auto;">{{Product Hunt Link}}</div>
{{$:/language/Help/help}}
如果您发现 TiddlyWiki 是有用的,有很多方法可以协助确保其未来,并使其更好。
! 教导和告诉
像 ~TiddlyWiki 这样的[[开源|OpenSource]]项目的茁壮成长,在于用户的回馈和参与。~TiddlyWiki 对大家变得更有用,更多的人使用它。所以,如果你发现 ~TiddlyWiki 有用,请散播这个字。确保其未来的最好的方式,是让它变得比以前任何时候都一百倍更受欢迎。
* [img[https://img.shields.io/twitter/url/http/tiddlywiki.com.svg?style=social]]
* [[关于 TiddlyWiki 的推文|https://twitter.com/intent/tweet?text=I+love+TiddlyWiki+because...&source=tiddlywiki5]]
* [img[https://img.shields.io/github/stars/jermolene/tiddlywiki5.svg?style=social&label=Star]]
* [[标示 TiddlyWiki5 的 GitHub 源码保存库|https://github.com/Jermolene/TiddlyWiki5]]
* [[显示 TiddlyWiki 海报|https://tiddlywiki.com/poster]]
[img width=232 [Tiddler Poster.png]]
! 协助改善文档与代码
有很多种方式,您可以为 ~TiddlyWiki 作出贡献:
* 撰写教学文档
* 贡献文档于 tiddlywiki.com
* 制作屏幕截取影片
* 策划相关的链接、提示和技巧的维基
主要的 ~TiddlyWiki 文档与代码放置于 GitHub,并欢迎[[贡献|Contributing]]:
* https://github.com/Jermolene/TiddlyWiki5
可以通过创建名为 $:/config/DefaultTiddlerIcon 的条目来指定默认的条目图标,其中包含条目的名称包含该图标。
<<.from-version "5.1.22">> 要禁用内核内置的所有拖放操作,请将以下条目设置为 "no":
$:/config/DragAndDrop/Enable
选择性地重新激活 [[list-tagged-draggable Macro]] 或 [[list-links-draggable Macro]] 实例的拖放,必须确保变量 `tv-enable-drag-and-drop` 设置为 `yes` ,用于宏调用的范围。例如,请注意,即使 $:/config/DragAndDrop/Enable 设置为 "no",仍可在此清单中使用拖放:
<$macrocall $name="wikitext-example-without-html" src="""<$set name="tv-enable-drag-and-drop" value="yes">
<<list-tagged-draggable tag:"HelloThere">>
</$set>"""/>
请注意,当直接使用 DropzoneWidget 和 DropableWidget 时, ''enable'' 属性独立运作于全域设置。
将此值设置为 `yes`,可禁用延迟加载
$:/config/SyncDisableLazyLoading
<<.from-version "5.1.24">>
$:/config/Editor/EnableImportFilter
此筛选器将决定编辑器中的拖放文件,是否适用于给定的条目。非空的结果,使该条目编辑器激活拖放。
此筛选器以这种方式使用,使其尊重全域的拖放设置。
<<.from-version "5.1.19">> 当点击 <<.button save-wiki>> 按钮保存 ~TiddlyWiki 时,默认以网址的文件名部分为保存的文件名称。
使用的值为 `{{$:/SiteTitle}}.html` 形式,则由网站标题与 `.html` 扩展名构成文件名称。
如果创建了名为 [[$:/config/SaveWikiButton/Filename]] 的条目,则该条目的内容将用于保存 ~TidlyWiki 的默认文件名称。
<<.from-version "5.1.24">> 默认情况下,带有类型 `text/html` 的条目,将显示在设置为空字符串的[[沙箱属性|https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox]]的 iframe 中。这会导致套用所有安全限制,禁用许多功能,如 JavaScript、下载和外部档引用。这是最安全的设置。
要在全域范围内禁用沙箱,请将条目 $:/config/HtmlParser/DisableSandbox 设置为 `yes`。这将意味着 iframe 中的代码可以完全访问 TiddlyWiki 的内部内容,这意味着恶意的 HTML 页面可以从私有维基中渗出数据。
要保留沙箱,但要控制适用哪些限制,请确保 $:/config/HtmlParser/DisableSandbox 不会设置为 `yes`,然后将 $:/config/HtmlParser/SandboxTokens 设置为所需的令牌清单,[[参考自 MDN 文档|https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox]] 。
请注意,这些是全域设置。要在单个条目的基础上控制沙箱,需要使用自定义的 `<iframe>` 。
配置条目 $:/config/Search/NavigateOnEnter/enable 可以用来激活(如果设置为 ''yes''),当分别点击 <kbd>{{$:/config/shortcuts/input-accept}}</kbd> 或 <kbd>{{$:/config/shortcuts/input-accept-variant}}</kbd> 时,在各种搜索输入字段中导航至并创建缺少的条目
默认情况下,使用图像类型 `jpeg` 创建新图像
$:/config/NewImageType 中的隐藏设置,可以设为另一个图像类别,用于新的图像条目,如 `png`
作为导航到条目的一部分,TiddlyWiki 滚动页面使条目的顶部与浏览器窗口的顶部对齐。这意味着当在窗口顶部使用自定义的 `position:fixed` 工具栏时,条目的上半部分可能会被遮挡。
要调整滚动位置以允许工具栏,请将 CSS 类 `tc-adjust-top-of-scroll` 加到工具栏。TiddlyWiki 的滚动机制将根据该元素的高度,动态调整滚动位置。
当 TiddlyWiki 首次于浏览器中开启搜索框中时,缺省自动聚焦。如果这会导致问题,您可以更改将此默认值从 ''true'' 改为 ''false'':
$:/config/Search/AutoFocus
<<.from-version "5.1.14">> 控制搜索字符串的最小长度,然后才显示结果。
默认值为 "3".
$:/config/Search/MinLength
指定 [[Syncadaptor|https://tiddlywiki.com/dev/#Syncadaptor]] 在服务器和浏览器之间同步条目的间隔时间。
默认值为 "60000" (60 * 1000 毫秒 = 1 分).
变更需要重新启动才能生效。
$:/config/SyncPollingInterval
正在编辑的条目的输入字段可以被赋予 ''tabindex'' 值(首选是 1),以便 <kbd>Tab</kbd> 键可以用于直接将焦点依序移动到下一个,或移动至上一个则使用 <kbd>shift-Tab</kbd>
$:/config/EditTabIndex
<<.from-version "5.1.16">> 标签下拉清单: 控制输入字符串在结果被显示之前的最小长度。
默认为 "0"。
$:/config/Tags/MinLength
确定由"保存变更"的页面控制按钮,保存时使用的模板。
默认为 `$:/core/save/all`.
您可以变更此设置,以选择点击"保存变更"按钮时,保存的内容。
$:/config/SaveWikiButton/Template
TiddlyWiki 延迟处理更动草稿条目,直到超时时间已过 (这称为节流)。该机制可以通过添加 `throttle.refresh` 字段,扩充到其他条目。有关详细信息,请参阅[[刷新节流|RefreshThrottling]]。
在大多数情况下,默认值 400ms 有回应的良好平衡,但于低级的行动设备上并不总是最优
现在可以通过更改下列条目的值(单位为毫秒)改变超时设置:
$:/config/Drafts/TypingTimeout
配置条目 $:/config/ui/ViewTemplate 和 $:/config/ui/EditTemplate 可分别用于改变在[[故事页面模板|$:/core/ui/PageTemplate/story]]中使用的 ''~ViewTemplate'' 与 ''~EditTemplate''
TiddlyWiki 最有用的配置设置都在[[控制台|$:/ControlPanel]],但一些更高端的设置没有完整的用户接口,而是直接编辑底层的配置条目。
若要于空白 TiddlyWiki 更改这些设置,您可以直接从此维基拖动链接到您的维基的个别配置条目。
<<list-links "[tag[Hidden Settings]]">>
<<.from-version "5.1.24">>
$:/config/Editor/ImportContentTypesFilter
此筛选器通过拖放到编辑器,来确定哪些 `contentTypes` 可以导入。其由围绕编辑器包裹的 DropzoneWidget,用于 `contentTypesfilter` 属性。
高亮插件提供了套用语法着色到文本的能力。
请参阅演示于 https://tiddlywiki.com/plugins/tiddlywiki/highlight
//这些都是来自 JeremyRuston 对 TiddlyWiki 的发展与历史的个人思维。//
//还有一个[[从 2016 年的 Podcast|https://changelog.com/podcast/196]] 讨论 TiddlyWiki 的背景故事,以及[[从 2021 年录制的|https://twit.tv/shows/floss-weekly/episodes/620]]。//
! TiddlyWiki 的缘起
早在 1997 年,一位同事向我介绍 [[Ward Cunningham 的原创维基|http://c2.com/cgi/wiki]]。令我印象深刻的是,如此强大的功能只用了 700 行 Perl,并且着迷于安全和权限的彻底重新构想。像其他许多开发人员一样,我尽可能地尝试各种维基,并探索他们在工作中的使用。
维基对我的吸引力,在于它最终会扰乱主流的印刷导向的文档和电子邮件模式。
在观察用户使用维基数年之后,我注意到高级用户广泛使用了在多个浏览器分页中,一次打开多个维基页面的功能,使他们能够更易于比较和查看页面,在它们之间拷贝文本,并当成尚未被阅读的页面队列。
我觉得,这种一次操作多页的能力是重构维基能力的内核,一个被普遍接受的维基,被精心进行重构往往更有用。然而,标准维基用户界面始终专为单页的演示和操作而设计。
当我在 2004 年 4 月看到 GMail 时,所有这些想法都汇集在一起,其巧妙地使用 Ajax 将各个电子邮件融入到线程对话中。
我开始尝试用 HTML 和 JavaScript 进一步探索这个想法。我几乎没有任何经验,只是曾经把一些以前的静态页面和简单的 ASP 网站放在一起。围绕这些用户端技术让我头痛;和其他人一样,我很惊讶地发现网页编程的不兼容和不一致是多么惊悚。
! TiddlyWiki 的发行
因此,于 2004 年 9 月我发布一个原始的[[ TiddlyWiki 的第一个版本|https://classic.tiddlywiki.com/firstversion.html]]。它是最小可能的证明这个想法的东西:它是一个简单的、自成一体的静态 48 KB HTML 文件。
以这种方式写成 TiddlyWiki 的第一个版本的缺点是,它用于编辑是完全不切实际的 - 如果 HTML 页有可能被写入到文件系统,当你点击 '保存变更',也只是弹出一个窗口显示可被保存的数据。
很多早期的回馈是, TiddlyWiki 很整洁,但它可妥善保存变更时,会更有用。我感到有点沮丧,就我所知要将一个运行于浏览器的 HTML 文件保存变更到本机的文件系统是不可能的。
几个月内我看到了实验性的 Firefox 附加组件,可使 TiddlyWiki 在浏览器中保存变更。检查代码,我意识到在一般的 HTML 文件写入到文件系统的 APIs 确实可行,只要他们是以 `file://` 加载。
我编改 Firefox 代码于 TiddlyWiki 的内核,并很快也为 Internet Explorer 添加一个类似的能力 (使用一个微软散布的与 Internet Explorer 一起的旧的 ActiveX 控制项)。
! TiddlyWiki 的成长
TiddlyWiki 成长的一个重要里程碑是 Nathan Bowers 创造了 "GTDTiddlyWiki"。他采取了纯净的 TiddlyWiki,并改写为特定的应用,使用流行的时间管理的方法跟踪任务。GTDTiddlyWiki 立即在像是 LifeHacker 的网站受到热烈欢迎。
在接下来的几年里,TiddlyWiki 继续在流行中成长,并获得了新的特点和功能。在一年内,我能够通过在 TiddlyWiki 上运行定制的开发工作来支持自己,特别是与维基先驱 SocialText 合作,能够将更改与在线服务器同步。
! BT 收购
于 2007 年 5 月,[[BT]] 收购 Osmosoft,我的顾问公司。收购一名员工的公司和极少收入-[[Osmosoft]],这是一个不寻常的决定,[[Osmosoft]]甚至没有 TiddlyWiki的 知识产权,因为我已经把它移交给 UnaMesa,为社群确保其未来。
[[BT]] 的动机是为了帮助他们了解社群为基础的生态系统。我加入了该组织,当了"开源创新部主管",负责开源的治理,以及提供如何参与开源社群的建议和专业知识。
! [[Osmosoft]] 与 TiddlySpace
我在 BT 创建了一个 [[Osmosoft]] 团队。我们的目的是传播开源的好处,并帮助其他团队在实践中实现这些好处。我们还发现,在一般情况下有必要宣导使用网络,特别是网络标准。
我们的方法是把重点放在展示,而不是用说的。我们用 TiddlyWiki 社群扩展生态系统,且为 BT 创建了许多内部系统(一些基于 TiddlyWiki 而一些不是)。
[[Osmosoft]] 对 TiddlyWiki 社群的主要贡献是创建 TiddlyWeb 和 TiddlySpace。TiddlyWeb 是健全的、条目的互联网层级的服务器,也可由那些条目组成 TiddlyWiki 查看。TiddlySpace 是尝试更加直接地将 TiddlyWeb 包装为一个可用的形式。
! 离开 BT
到了 2011 年底我越来越觉得于企业范围 BT 之外我能更好地实现的 TiddlyWiki 的潜力。因此,我离开 BT,并开始作为一个独立的开发者,主要工作是以 TiddlyWiki5 的形式重新开发全新的 TiddlyWiki。
! TiddlyWiki5 的发展
从 2011 年 11 月 我致力于 TiddlyWiki 新版的开发,作为一个程序师,致力于 "版本 2.0" 的东西,我就已经写了的一个非常有吸引力的提案。这意味着要求被完全理解,让我把重点放在不断变化的需要来支持所需的功能的体系结构。
! 未来
现在 TiddlyWiki5 终于离开了"测试版"状态,我的希望是,它会具有较长的使用寿命。因为它仅使用 HTML5 和 Node.js 的标准功能,没有理由不能全面运作于将来的很多年。我的目标是它至少 25 年。
//Jeremy Ruston, 2014 年 09 月 20 日//
系统条目 [[$:/HistoryList]] 追踪包含导航历史记录的条目清单。每次按一下指向条目的链接时,目标条目的标题都会添加到堆栈的顶端。
历史记录清单存放在 JSON,以允许有关初始导航的 DOM 节点座标的其他详细信息。
历史记录清单还维护包含堆栈顶部的条目名称的字段 ''current-tiddler'' 。此字段可以如此使用:
```
<$list filter="[list[$:/StoryList]]" history="$:/HistoryList" storyview="pop">
<$button message="tm-close-tiddler" class="tc-btn-invisible tc-btn-mini">×</$button> <$link><$view field="title"/> <$reveal type="match" state="$:/HistoryList!!current-tiddler" text=<<currentTiddler>>>✓</$reveal></$link>
</$list>
```
与"打开"边栏选项卡的渲染相同,同时对上次导航到的条目添加一个刻度。
<$list filter="[list[$:/StoryList]]" history="$:/HistoryList" storyview="pop">
<$button message="tm-close-tiddler" class="tc-btn-invisible tc-btn-mini">×</$button> <$link><$view field="title"/> <$reveal type="match" state="$:/HistoryList!!current-tiddler" text=<<currentTiddler>>>✓</$reveal></$link>
</$list>
!! 空的故事
若要在故事为空时显示内容,请创建 $:/config/EmptyStoryMessage,并输入所需内容。若其内容如下,当所有其他操作关闭时,将显示 GettingStarted 条目。
```
{{GettingStarted||$:/core/ui/ViewTemplate}}
```
您可以在单独一行使用三个或更多个 `-`,生成一个水平分隔线:
<<wikitext-example src:"---
">>
当您编辑在 https://tiddlywiki.com 上的条目时,将看到一个小的色带邀请您在 GitHub 上编辑源条目。
如果您使用 Node.js,可以按照以下方式,为您自己的基于 TiddlyWiki 的网站拷贝此功能:
# 确认您的[[维基文件夹|TiddlyWikiFolders]]中的 <$link to="tiddlywiki.info Files">`tiddlywiki.info`</$link> 文件,包含以下设置:
#> <pre><code> "config": {
"retain-original-tiddler-path": true
}</code></pre>
# 将条目 [[$:/ContributionBanner]] 拷贝到您的维基
# 进行以下更改:
## 调整 GitHub 链接网址,将 https://github.com/Jermolene/TiddlyWiki5/edit/master/editions/tw5.com/tiddlers/ 改为指向您自己的 GitHub 保存库
## 确认起始文本的措词 "您能帮我们改进这个文档吗?" 适用于您的访客
## 调整[[改进 TiddlyWiki 文档|Improving TiddlyWiki Documentation]]的链接,指向您自己的提供贡献进程说明的条目。
在侧边栏菜单中创建一个新的页签:
# 创建一个条目,并设其标签为[[系统标签|SystemTags]] [[$:/tags/SideBar]]
#* 若要创建目录,你可以可以使用[[目录宏|Table-of-Contents Macros]]填入新页签条目。请参阅 [[TableOfContents]]
# 缺省情况下,条目名称用作页签的标题,但您可以使用 `caption` 字段替换之
# 若要定义的页签顺序,请使用 `list-after` 或 `list-before` 字段,如同于 [[Tagging]] 所述的
#* 例如:设置 `list-after` 到 [[$:/core/ui/SideBar/Open]] 可紧接于"开启"页签之后放置一个侧栏页签
请注意,您可以通过使用标签 `$:/tags/MoreSideBar` 以同样的方式创建"更多"页签下的新页签。
<<.deprecated-since "5.1.16" "Custom styles by data-tags">>。另请参阅:[[How to apply custom styles]]
----
您可经由定义一个名为 `tc-tagged-<Tag Name>` 的 CSS 类别,自定义具有特定标签条目的样式。
例如,[[创建一个样式表|Using Stylesheets]]定义类别 `tc-tagged-NightReader`,使设有标签 "NightReader" 的条目呈现于一个适合夜间阅读的特殊配色方案,像这样:
```
.tc-tagged-NightReader {
background-color:black;
color:orange;
padding: 35px 35px;
}
.tc-tagged-NightReader .tc-tiddler-body {
font-size: 1.5em;
}
```
此 `tc-tagged-NightReader` 类别会被套用至整个条目,且不只各该条目的内文。若您想针对条目的一小部分,可以 CSS 选择器限定之,如同此处用的 `.tc-tagged-NightReader .tc-tiddler-body`。
请注意,标签内含空格或非字母数字的字符都将使用 URI 编码进行转换,使得生成的 CSS 类别名称难以预料。例如:
|!标签 |!生成的类别名称 |
|`$:/mytag` |`tc-tagged-%24%3A%2Fmytag` |
|`Doctor Who` |`tc-tagged-Doctor%20Who` |
|`£35.23` |`tc-tagged-%C2%A335.23` |
虽然 ~TiddlyWiki 会生成这些标签,但实际使用时,在样式表中必须转义百分号,例如:
```
.tc-tagged-Doctor\%20Who {
background-image: url(./tardis_back.svg);
background-repeat: no-repeat;
background-position: right;
color:#FBFBFB;
}
```
实用函数是可用在 JavaScript 中运行转换:
```
$tw.utils.tagToCssSelector("$:/tags/Stylesheet")
```
生成下列输出:
```
tc-tagged-\%24\%3A\%2Ftags\%2FStylesheet
```
有一些方法可以套用自定义样式。
<<list-links filter:"[tag[How to apply custom styles]]">>
首先安装 TiddlyWiki 如 [[Installing TiddlyWiki on Node.js]] 所描述。
# 创建一个空的 [[TiddlyWiki 文件夹|TiddlyWikiFolders]]
## 于合适的位置创建一个新的文件夹 (例如 `~/MyWiki`)
## 创建文件名为 `tiddlywiki.info` 的文件包含以下文本:
##* `{"themes": ["tiddlywiki/vanilla","tiddlywiki/snowwhite"]}`
## 创建一个子文件夹,名为 `tiddlers`
##* 或者,从 TiddlyWiki5 保存库复制 `editions/empty` 文件夹
# 于 `~/MyWiki/tiddlers` 创建个别的 TiddlerFiles
# Execute the following command from the TiddlyWiki5 root directory to build a TiddlyWiki5 file from the tiddlers:
# 从 TiddlyWiki5 根目录运行下列命令,由这些条目生成一个 TiddlyWiki5 文件:
## `tiddlywiki ~/MyWiki --rendertiddler $:/core/save/all index.html text/plain`
想像一下,您正在使用类似的[[目录|Table-of-Contents Macros]]宏︰
```
<<toc-selective-expandable "TableOfContents" "sort[title]">>
```
该排序适合大多数情况,但您想让所有标签为 `Journal` 的项目依 `created` 字段排序。您如何套用一个单独排序到只有那些标签为 `Journal`的子项目?
诀窍就是将字段增加至父标签条目(即 `Journal`)指向一个不同的排序条件。让我们称此字段为 `fuzzy`,并填入 `created` 的值 (`created` 是包含一个条目创建日期的一个字段名称)。
现在,改变您的[[目录|Table-of-Contents Macros]],看起来像这样︰
```
<<toc-selective-expandable "TableOfContents" "sort{!!fuzzy}">>
```
现在您的目录将依条目名称排序,除了 `Journal` 条目的子条目是依 `created` 日期排序。
这个技巧的缺点是,您不能套用基于只有一个特殊字段的反向排序。如果反转排序顺序,它将处处反向排序。
! 系统必备组件
* [[TiddlyWiki on Node.js]]
* 需要 GitHub 帐号,用以提交翻译至 tiddlywiki.com
! 设置步骤摘要
# 复制(clone)TiddlyWiki 位于 GitHub 的建构脚本保存库 https://github.com/Jermolene/build.jermolene.github.io.git
# Fork TiddlyWiki 位于 GitHub 的原代码保存库 (https://github.com/Jermolene/TiddlyWiki5)
#* 若您的 GitHub 帐号为 JoeBloggs,您的 fork 即为 https://github.com/JoeBloggs/TiddlyWiki5
# 创建一个您欲翻译的语言分支,并以此语言为分支名称 (例如:"cy-GB" for "Welsh (United Kingdom)")
#* IETF 语言代码: http://www.lingoes.net/en/translator/langcode.htm
# clone forked 的保存库至您的电脑 (例如:`/MyTranslation/TiddlyWiki5`)
# 创建一个平行文件夹 `/MyTranslation/jermolene.github.io`
# 于 `<repo>/languages` 为您的翻译创建一个新文件夹
# 复制 `<repo>/core/language/en-GB` 的内容至您的翻译文件夹
# 在您的翻译文件夹中,添加一个 `plugin.info` 文件 (见下方说明)
# 修改 `<repo>/editions/tw5.com/tiddlywiki.info`,加入您的语言至列表中
# 运行 `../build.jermolene.github.io/quick-bld.sh` 生成 TiddlyWiki
# 开启该 TiddlyWiki 文件: `/MyTranslation/jermolene.github.io/index.html`
# 可于控制台看到您的翻译出现在语言列表,但此时翻译内容仍为英式英文。
# 修改所有位于您的语言文件夹中的 `.tid` and `.multids` 文件,翻译其中的英文本串。
`plugin.info` 文件内容为 Joe Blogg 的英国威尔斯文翻译:
```
{
"title": "$:/languages/cy-GB",
"name": "cy-GB",
"plugin-type": "language",
"description": "Welsh (British)",
"author": "JoeBloggs",
"core-version": ">=5.0.0"
}
```
MultiTiddlerFiles 让多个 tiddlers 的内容能封装至单一个文本文件因而简化编修工作。
! 更新处理
有时候,主要的 en-GB 语言条目更新修订内容或添加项目。追踪与语言相关的提交到 ~TiddlyWiki5:master 最好的方法来是监视此 RSS/Atom 消息来源:
https://github.com/Jermolene/TiddlyWiki5/commits/master/core/language.atom
\define disabledFilterExample()`[[$(tempBoldDisabled)$]get[state-disabled]else[no]]`
\define remove-shortcuts()
<$action-deletetiddler $tiddler=<<shortcutInfo>>/>
<$action-deletetiddler $tiddler=<<shortcutConfigMac>>/>
<$action-deletetiddler $tiddler=<<shortcutConfigNotMac>>/>
<$action-deletetiddler $tiddler=<<tempBold>>/>
<$action-deletetiddler $tiddler=<<tempBoldDisabled>>/>
\end
\define create-shortcut-tiddlers()
<$action-createtiddler $basetitle=<<shortcutInfo>>
$template="$:/config/ShortcutInfo/bold"
$overwrite="yes"
/>
<$action-navigate $to=<<shortcutInfo>>/>
<$action-createtiddler $basetitle=<<shortcutConfigMac>>
$template="$:/config/shortcuts-mac/bold"
$overwrite="yes"
text="meta-shift-X"
/>
<$action-navigate $to=<<shortcutConfigMac>>/>
<$action-createtiddler $basetitle=<<shortcutConfigNotMac>>
$template="$:/config/shortcuts-not-mac/bold"
$overwrite="yes"
text="ctrl-shift-X"
/>
<$action-navigate $to=<<shortcutConfigNotMac>>/>
\end
\define clone-bold()
<$action-createtiddler $basetitle=<<tempBold>>
$template="$:/core/ui/EditorToolbar/bold"
$overwrite="yes"
icon="$:/core/images/spiral"
shortcuts="((temp-bold))"
condition-disabled="[[$(tempBoldDisabled)$]get[state-disabled]else[no]]"
/>
<$action-sendmessage $message="tm-edit-tiddler" $param=<<tempBold>>/>
\end
\define clone-button-bold()
<$button actions=<<clone-bold>> >创建临时的粗体按钮</$button>
\end
\define toggle-bold()
<$action-listops $tiddler=<<tempBoldDisabled>> $field="state-disabled" $subfilter="+[toggle[yes],[no]]" />
\end
<!-- $vars is needed don't remove it! -->
<$vars tempBold="$:/temp/bold" tempBoldDisabled="$:/temp/bold/disabled" shortcutInfo="$:/config/ShortcutInfo/temp-bold" shortcutConfigMac="$:/config/shortcuts-mac/temp-bold" shortcutConfigNotMac="$:/config/shortcuts-not-mac/temp-bold">
!! 创建一个新的工具栏按钮
创建新的编辑器工具栏按钮的最简单方法是克隆并打开一个。
><<clone-button-bold>>
此条目包含对工具栏按钮非常重要的所有必要元素。
<<<
; text
: 我们不讨论这个 howto 的文本字段的详细信息
; caption
: 标题字段用于显示在[[控制台|$:/ControlPanel]]的快捷键选项卡中的快捷键名称
; condition
: 定义按钮可见性状态的筛选器
; condition-disabled <<.from-version "5.1.23">>
: 一个''筛选器'',使我们能够定义按钮的 "disabled" 属性。例如:<<disabledFilterExample>>
: 如果不存在 "状态条目" 或 "状态字段",则此条件''必须''返回 "no"!因此,筛选器中必须有一个 `else[no]` 元素。
; description
: 用作按钮提示
; icon
: 分配按钮图标。这里我们使用 `$:/core/images/spiral` {{$:/core/images/spiral}} 。
; shortcuts
: 这是[[快捷键描述|Keyboard Shortcut Descriptor]],例如:`((temp-bold))`
<<<
!! 禁用状态
您可以使用任何 "状态条目" 来定义按钮禁用状态。重要的是, ''condition-disabled'' 字段是一个''筛选器''。例如,我们使用条目的`state-disabled` 字段:<<tempBoldDisabled>>
测试筛选器的最简单方法是使用[[高级搜索|$:/AdvancedSearch]]:筛选选项卡
>临时的 "粗体按钮" 已禁用:''"{{{ [<tempBoldDisabled>get[state-disabled]else[no]] }}}"'' ... 如果编辑任何条目,您可以在编辑器工具栏中看到按钮!
> <$button actions=<<toggle-bold>>>切换临时的粗体按钮可见性</$button>
!! 为新按钮创建快捷键
对于我们的 ~HowTo,我们使用 ''快捷键描述'': `((temp-bold))`
要创建有效的快捷键配置,我们需要 2 个条目:
>[[$:/config/ShortcutInfo/|$:/config/ShortcutInfo/temp-bold]]''temp-bold'' .. 和
>[[$:/config/shortcuts/|$:/config/shortcuts/temp-bold]]''temp-bold''
> <$button actions=<<create-shortcut-tiddlers>>>创建快捷键条目</$button>
!!
!! 清理配置条目
如果您不再需要配置条目,您可以
><$button actions=<<remove-shortcuts>>>删除快捷键配置</$button>
</$vars><!-- needed don't remove! -->
<<.tip """TiddlyWiki 区分快捷键的两种类型。那些被限制运作于 <$macrocall $name=".tag" _="input"/> 字段或 <$macrocall $name=".tag" _="textareas"/> 的快捷键,是由全域运作的 <$macrocall $name=".wlink" to="KeyboardWidget"/> 和快捷键处理 - 这意味着,页面需要有焦点,才能访问之。后者由加载维基时,开始工作的机制处理""">>
!! 两种快捷键的配置机制相同:
<$vars tv-show-missing-links="no">
一个<<.def 首码>>为 `$:/config/ShortcutInfo/` 和一个''唯一的尾码''的条目,像是 `my-shortcut`,使新的快捷键显示在[[控制台|$:/ControlPanel]]的[[快捷键页签|$:/core/ui/ControlPanel/KeyboardShortcuts]]中。可在其<<.field text>> 字段中添加可选说明。
在[[快捷键页签|$:/core/ui/ControlPanel/KeyboardShortcuts]]中,可以配置触发快捷键的''组合键''
> 找到新快捷键的''唯一尾码'',然后点击 <$button class="tc-btn-invisible"><<.icon $:/core/images/edit-button>><$action-sendmessage $message="tm-notify" $param="$:/core/images/edit-button"/></$button> 按钮,打开一个快显窗口可侦测''组合键'',并在其输入字段中显示侦测到的组合
> ''添加快捷键''将组合键指定给该快捷键
!!! 根据选定的平台,配置机制会创建一个具有特定术语的条目
> $:/config/shortcuts/ + 快捷键的''唯一的尾码'',可运作于所有平台 (操作系统)
> $:/config/shortcuts-(mac/not-mac/windows/not-windows/linux/not-linux)/ + 快捷键的''唯一尾码'',只运作于所选平台,或不能运作于排除的平台
!!! 示例
* $:/config/shortcuts/`my-shortcut`
* $:/config/shortcuts-mac/`my-shortcut`
* $:/config/shortcuts-windows/`my-shortcut`
* $:/config/shortcuts-linux/`my-shortcut`
* $:/config/shortcuts-not-mac/`my-shortcut`
* $:/config/shortcuts-not-windows/`my-shortcut`
* $:/config/shortcuts-not-linux/`my-shortcut`
<<.tip """请注意,如果先创建上述的 ''ShortcutInfo'' 条目,并在控制台中配置快捷键,则无须手动创建那些特定平台的条目""">>
<br>
!! 此时快捷键已定义,但不会触发任何操作
!! 使用[[Keyboard 小工具|KeyboardWidget]]
> 一个 <<.wlink "KeyboardWidget">> 小工具在其范围内,于一个 <<.tag input>> 或 <<.tag textarea>> 字段侦测到按下组合键,该 <<.wlink "KeyboardWidget">> 小工具需要''环绕''该 <<.tag input>> 或 <<.tag textarea>> 字段,且其 <<.attr key>> 属性指向配置条目使用[[按键描述|Key Descriptor]]语法或明确包含该按键
```
<$keyboard key="((my-shortcut))" actions='<$action-setfield $tiddler="my-tiddler" $field="my-field" $value="my-value"/>'>
<$edit-text tag="input" tiddler="my-tiddler"/>
</$keyboard>
```
```
<$keyboard key="alt-shift-M" actions='<$action-setfield $tiddler="my-tiddler" $field="my-field" $value="my-value"/>'>
<$edit-text tag="input" tiddler="my-tiddler"/>
</$keyboard>
```
> 如果定义了操作,<<.wlink KeyboardWidget>> 小工具,在其范围内的任何 <<.tag input>> 或 <<.tag textarea>> 字段,侦测到按下其 <<.attr key>> 属性中定义的组合键时,调用其 <<.attr actions>> 属性中定义的操作。
<br>
!! 使用全域快捷键
> ''全域''快捷键的操作是存放于标签为 <<tag $:/tags/KeyboardShortcut>> 的条目的 <<.field text>> 字段
> <<.field key>> 字段通过 `((my-shortcut))` 语法 (称为[[快捷键描述|Keyboard Shortcut Descriptor]]),连接一个操作条目与相应的快捷键
!!! 语法:`((` + ''一个选定的尾码'' + `))`
> 若条目具有 <<tag $:/tags/KeyboardShortcut>> 标签,<<.field key>> 字段以[[快捷键描述|Keyboard Shortcut Descriptor]]为其值,且 <<.field text>> 字段中的一些操作,当机制侦测到配置的组合键时,将触发该操作
<br>
<$macrocall $name=".tip" _="""当全域键盘快速键触发时,已于快捷键条目 (通过一个标签为 <<tag-pill $:/tags/Macro>> 的条目) 之外定义的''宏'',需要使用 [[import 编译指示|Pragma]]''导入''后才能访问。"""/>
```
\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]
```
如果已知包含宏定义的条目 - 例如 - 标题为 `my-macro-tiddler`
```
\import [[my-macro-tiddler]]
```
<br>
<$macrocall $name=".tip" _="""某些操作需要一个 <<.wlink NavigatorWidget>> 小工具于操作条目的顶部。这对于以下小工具和消息清单,为了''使用全域快捷键''是必要的。请参阅下列清单"""/>
!!! 小工具
<<.wlink ActionNavigateWidget>>
!!! 小工具消息
<<list-links "[tag[navigator-message]]">>
</$vars>
!! 前言/警示:
在尝试 TiddlyDesktop 内部之前,您应该找到 “用户配置文件夹” 的位置 - 点击 TiddlyDesktop 主窗口上的 “设置” 按钮, 然后点击按钮 “开启用户配置文件夹“。然后向上移动,找到父文件夹,该文件夹应为 “TiddlyDesktop”。如果出现问题,您可以通过删除整个文件夹将 TiddlyDesktop 重置为其出厂状态。
点击 TiddlyDesktop 主窗口上的 “后台” 按钮, 打开后台维基。这是一个类似 Node.js 的 TiddlyWiki 实例,其运行 TiddlyDesktop 的用户接口和逻辑。
!! 如何摆脱 “添加 ~ TiddlyWiki 文件夹” 按钮。
在后台维基中,找到条目 `WikiListToolbar` (HelloThere 中有一个链接)。点击它进入编辑模式,您将看到维基文本的所有工具栏按钮。如果您进行了修改并点击 “完成”,则更改将立即反映在主 TiddlyDesktop 窗口中。
!! 如何将 "高级" 按钮更改为 "显示备份" 按钮。
您可以从条目 `$:/TiddlyDesktop/Settings` 复制 “显示备份” 按钮的代码,并将其贴到 `WikiListToolbar` 中。
!! 如何更改颜色?
如同在 TiddlyWiki 中一样:您可以使用调色板,或定义自己的自定义 CSS。
!! 如何更改条目列表的顺序(看似按字母顺序排列)?
开启且编辑 `WikiList` 条目,然后滚动到结尾。然后更改 ''wikilist'' 宏里的 `<$list>` 小工具:
```
<$list filter="[tag[wikilist]sort[title]!has[draft.of]]" emptyMessage="Add a ~TiddlyWiki file or folder to get started. Click the buttons above to browse, or drag and drop from your file Explorer/Finder" storyview="pop">
```
!!! 有关嵌入与外部链接的注意事项
''注意:''在我们深入了解如何嵌入某种类型的文件之前,您可能需要考虑不嵌入,而只是链接到外部资源,如下所示:
```
[ext[title|path/to/that.file]]
```
然后让您的浏览器决定如何处理资源。这种方法的优点是简单快捷。缺点是该文件实际上不与 TW5 文件一起传输,并且您不能在 `node.js` 环境下用下列方法 #2 的 快速文件路径。
!! 两种方式将 PD F嵌入到您的 TW5 文件中。
!!! 1. 使用拖放嵌入
一个是将文件拖放到您的 TW5 文件。待顶部的绿色横条出现后放开,然后从导入条目导入。实际上这将导入的 PDF(或其他文件)的内容嵌入到您的 TW5 文件中。
只要您的 PDF 不太大,这个方法就可以了。如果您的 TW5 文件变成太大,可能会有问题。
!!! 2. 使用 '_canonical_uri' 嵌入
另一种方法是创建一个条目链接到外部文件。在此方法中,实际上,不将该文件纳入您的 TW5 文件,但可以用 `{{My Image File.jpg}}` 嵌入语法如同嵌入的文件访问之。在 [[node.js]] 环境下,也可以更改该文件的位置地址。在 node.js 环境下使用外部图像的细节,请参阅[[外部图像|ExternalImages]]。
创建一个具有 `_canonical_uri` 字段的条目,以存放外部文件的本地地址,并设置 `type` 字段值为 `application/pdf` 。
无论哪种方式,使用适当的已配置的浏览器,您应该可以看到嵌入的 PDF 档。
!!! 其他文件类型
TW5 可辨识的格式只有一些文件,在[[内容类型|ContentType]]有一个清单。如果您的浏览器或 TW5 不认得特定的文件格式,您就只能使用第二种方法来嵌入,然后下载一个档。当您编辑该条目时,将显示一个链接,您可以在该链接处点击右键下载该文件。
!!! 选择导出所有条目
导出''所有''条目,请点击侧边栏中的"工具"页签。找到并点击 {{$:/core/ui/Buttons/export-tiddler}} ''导出所有条目''按钮。一个弹出式功能表,将提供您导出多种格式的条目的机会。
!!! 导出一个条目
如果您想要导出一个特定条目,首先导航到该条目。然后点击该条目上的 {{$:/core/ui/Buttons/more-tiddler-actions}} ''更多''按钮。从显示的清单中选择 {{$:/core/ui/Buttons/export-tiddler}} ''导出条目''按钮。一个弹出式功能表,将提供您导出多种格式的条目的机会。
!!! 导出符合条件 (筛选) 的条目
要导出选定的条目,请点击侧边栏上的搜索区旁的小的放大镜 <<.icon $:/core/images/advanced-search-button>>。这将开启[[高级搜索|$:/AdvancedSearch]]条目,点击高级搜索条目的''筛选''页签。只有[[筛选|Filters]]页签允许您导出选定的条目。[[筛选器|Filters]]遵循特定的语法。要了解有关如何使用筛选器,请点击此[[筛选器|Filters]]链接。
在您输入一个筛选器之后,将出现符合筛选器的条目清单,现在您可以点击筛选器输入字段右侧的 {{$:/core/ui/Buttons/export-tiddler}} 导出图标。一个弹出式功能表,将提供您导出多种格式的条目的机会。
!!! 导出格式
目前可用的导出格式为:
* CSV 文件格式
* JSON 文件格式
* 静态 HTML 文件
* ".tid" 文件格式
``".tid"`` 有别于其他格式,只有一个条目会被导出,即使您正试图导出所有条目或选定的条目。
有时候,您可能希望通过在所有条目中隐藏作者姓名来节省一些屏幕空间。这是一个快速的方法来做到这一点:
* 用任何标题创建一个新的条目
* 设置条目标签 `$:/tags/Stylesheet`
* 在条目的内文中放入:
```
.tc-subtitle .tc-tiddlylink {display:none;}
```
* 保存该条目。作者的姓名字段应该不再显示。
同样,包括作者和日期在内的整个副标题字段,可以通过以下方式移除:
```
.tc-subtitle {display:none;}
```
不幸的是,您不能使用 CSS 只隐藏日期,而不隐藏作者。
最后,为了获得真正简约的外观,您可以移除标题:
```
h2.tc-title {display:none;)
```
此处是如何在窗口的角落横幅显示该维基的最近修改日期:
# [[安装插件|Installing a plugin from the plugin library]] <<.def "Corner ribbon">> 至您的 ~TiddlyWiki
# 保存 (<<.icon $:/core/images/save-button>>) 并重新加载 (<<.icon $:/core/images/refresh-button>>) 您的维基
# 创建一名称为 [[$:/_MyRibbon]] 的条目,设旗标签为 [[$:/tags/PageControls]],其内容包含:<div>
```
<div class="github-fork-ribbon-wrapper right">
<div class="github-fork-ribbon" style="background-color:#DF4848;">
<$list filter="[!is[system]!has[draft.of]!sort[modified]limit[1]]">
<$link>
<$view field="modified" format="date" template="YYYY年0MM月0DD日, 0hh:0mm"/>
</$link>
</$list>
</div>
</div>
```
</div>
# 如果需要,可更改为您喜好背景颜色
# 您也可以尝试改变其位置类别从 `right` 到 `right-bottom`
## 若要出现在左上角,您需要将该条目标签设为 [[$:/tags/PageTemplate]] 而不是 [[$:/tags/PageControls]] ,然后更改其位置类别为 `left`
\define book-list()
[[A Tale of Two Cities]]
[[The Dice Man]]
[[A New Kind of Science]]
[[The Recursive Universe]]
[[Great Expectations]]
[[Animal Farm]]
\end
\define compare-without-stopwords()
[<currentTiddler>search-replace:i:regexp[^The |A ],[]]
\end
您可以将 [[search-replace 操作符|search-replace Operator]] 与 [[sortsub 操作符|sortsub Operator]] 结合使用,在排序时忽略名称开头的 "A" 和 "The" 等停止词。 (例如注意 "A Tale of Two Cities" 排序于 "T" 之下而非 "A")
<<.operator-example 6 "[enlist<book-list>sortsub<compare-without-stopwords>]">>
您还可以自定义清单,以便 "A Tale of Two Cities" 被列为 "Tale of Two Cities, A",但仍链接到正确的条目。
<<wikitext-example-without-html """<ul>
<$list filter="[enlist<book-list>sortsub<compare-without-stopwords>]">
<li><$link><$text text={{{[<currentTiddler>search-replace:i:regexp[(^The |A )(.*)],[$2, $1]]}}}/></$link></li>
</$list>
</ul>""">>
CamelCase 在大多数维基中使用,但在某些情况下它可能会干扰文本显示。
!! 局部关闭驼峰式链接
要关闭一个驼峰式链接文本的特定实例,只需在该字词前放一个波浪号(~),如下所示:
```
~CamelCase
```
!! 全域关闭驼峰式链接
要关闭所有条目中的驼峰式链接,请开启[[控制台|$:/ControlPanel]]。点击 `设置` 页签,然后滚动或读取到 ``驼峰式维基链接`` 部分,并取消选择 ``启用自动驼峰式链接``。
您可以更改条目的主要栏宽(也称为故事河),通过︰
* 点击设置图标开启控制台
* 在控制台中选择"视觉外观",再选"主题调整"。
* 在主题调整下,向下卷动。
在那里您会看到`故事右侧位置`、`故事的宽度`和`条目宽度`的设置。通过设置更大的数字,您可以加宽条目。
一般而言,`故事右侧位置`和`故事的宽度`应该是相同大小,且`条目宽度`则稍微小些。
您甚至可以使用条目宽度的百分比。
您也可能要更改侧边栏中断点比故事河稍大,除非你不介意边栏浮动到页面的顶部。
HTML 标记与注释可于 WikiText 中直接使用,例如:
```
<article class="hello">
This is my nice and simple block of text. HelloThere
<!-- This comment will not appear in the wikified output -->
</article>
```
[[小工具与 HTML 标记具有相同的语法|Widgets in WikiText]],因此以下信息也适用于它们。
! 内容解析
要获取要在区块模式下解析的 HTML 元素的内容,起始标记必须后跟两个换行符号。
如果没有这两个换行符号,标记内容将以内联模式进行解析,这意味着无法识别区块模式格式,例如 wikitext 表格、清单和标题。
! 自关闭元素
以下标记被视为 'void'。这意味着 `<tag>` 被视为 `<tag/>`,不需要终止标记 `</tag>` (如果提供了,则忽略之,并视为纯文本)。
* `<area>`、`<base>`、`<br>`、`<col>`、`<command>`、`<embed>`、`<hr>`、`<img>`、`<input>`、`<keygen>`、`<link>`、`<meta>`、`<param>`、`<source>`、`<track>`、`<wbr>`
如果不关闭任何其他标记,则其行为就像在条目的末尾缺少的结束标记一样。
! 属性
在常规 HTML 语法的扩展中,元素/小工具的属性可以几种不同的方式来指定:
* a literal string
* a transclusion of a TextReference
* a transclusion of a [[macro/variable|Macros in WikiText]]
* as the result of a [[Filter Expression]]
!! 文本属性值
文本属性值可以使用几种不同引用的风格︰
* 单引号(例如 `attr='value'`)
* 双引号(例如 `attr="value"`)
* 三重双引号(例如 `attr="""value"""`)
* 不包含空格的值,不需要引号 `attr=value`)
文本属性的值可以包含换行符号。例如:
```
<div data-address="Mouse House,
Mouse Lane,
Rodentville,
Ratland."/>
```
借由使用连续三个双引号,您可以指定属性值包含单个双引号。例如:
```
<div data-address="""Mouse House,
"Mouse" Lane,
Rodentville,
Ratland."""/>
```
!! 嵌入的属性值
嵌入的属性值,在[[文本参考|TextReference]]前后以双大括号标明。例如:
```
attr={{tiddler}}
attr={{!!field}}
attr={{tiddler!!field}}
```
!! 可变的属性值
可变的属性值以双角括弧标明一个[[宏调用|Macro Calls in WikiText]]。例如︰
```
<div title=<<MyMacro "Brian">>>
...
</div>
```
!! 筛选的属性值
以三重大括弧包住的[[筛选器表达式|Filter Expression]]标明筛选的属性值。其值将为结果清单中的第一个项目,或如果该清单为空则为空字符串。
此示例演示如何将首码添加到一个值︰
```
<$text text={{{ [<currentTiddler>addprefix[$:/myprefix/]] }}} />
```
它经常是有用的,能创建 HTML 链接到外部资源。例如,这里的 `href` 属性的值将被设为 MyLinkDestination 条目的内容:
```
<a href={{MyLinkDestination}}>link</a>
```
然而,有一个意想不到的安全问题,亦即大多数时候链接应该将 `rel` 属性设置为 `noopener noreferrer`,以维护私人 TiddlyWiki 网址(例如,在 Dropbox 上)的隐私。有关详细信息,请参阅 https://mathiasbynens.github.io/rel-noopener/ 。
```
<a href={{MyLinkDestination}} rel="noopener noreferrer">link</a>
```
<<.dlink-ex HTML "https://en.wikipedia.org/wiki/HTML">> 是一个用于定义网页内容的标准纯文本格式。
它是由一个元素的树表示,使用括在角括弧中的特别<<.def 标记>>的系统。
几乎整个 HTML 可以不做改变地用于一个条目里的 WikiText。
<<.def image-picker>> [[宏|Macros]]显示一个交互式图像选取器,在核心文本编辑器中可以看到。
!! 参数
;actions
: 当用户选取一个图像时,应运行的动作小工具的 Wikitext。在本文中,变量 `imageTitle` 包含所选的图像的条目名称。
;subfilter
: 一个可选的额外的[[过滤步骤|Filter Step]],例如 `tag[MyTag]`
图像用[[筛选器表达式|Filter Expression]]被选取至 <<.param subfilter>> 参数拼接如下︰
> `[all[shadows+tiddlers]is[image]$subfilter$!has[draft.of]] -[type[application/pdf]] +[sort[title]]`
<<.macro-examples "image-picker">>
图像: <$edit-text tiddler='$:/_MyImage' tag='input' placeholder='(未设置)' default=''/>
<$transclude tiddler={{$:/_MyImage}}/>
---
<$macrocall $name='image-picker' actions="
<$action-setfield $tiddler='$:/_MyImage' $value=<<imageTitle>>/>
"/>
图像: <$edit-text tiddler='$:/_MyImage' tag='input' placeholder='(未设置)' default=''/>
<$transclude tiddler={{$:/_MyImage}}/>
---
<$macrocall $name='image-picker' actions="
<$action-setfield $tiddler='$:/_MyImage' $value=<<imageTitle>>/>
" subfilter="prefix[Language]"/>
<$macrocall $name=".example" n="1" eg={{image-picker Macro (Example 1)}}/>
下一个示例显示 <<.param subfilter>> 参数如何限制图像的清单(此例为那些以 "Language" 为首码者)︰
<$macrocall $name=".example" n="2" eg={{image-picker Macro (Example 2)}}/>
下面是一个示例,使用 ListWidget 和 TranscludeWidget 分格显示所有的系统图片 (即条目标签含 [[$:/tags/Image]])。
<style>
.my-gallery svg {
width: 6em;
height: 6em;
margin: 1em;
}
</style>
<div class="my-gallery">
<$list filter="[all[tiddlers+shadows]tag[$:/tags/Image]]">
<span title=<<currentTiddler>>>
<$transclude/>
</span>
</$list>
</div>
! 图片
显示保存于条目的图片,只需嵌入该条目:
```
{{Motovun Jack.jpg}}
[img[https://tiddlywiki.com/favicon.ico]]
```
您也可以从编辑器工具栏插入图片。点击''图片'' (<<.icon $:/core/images/picture>>) 且选择一个图片。
如果图片来源为图片条目名称,则直接显示条目。否则它被解译为一个 URL 和生成一个 HTML `<img>` 标记包含值为 URL 的 `src` 属性。
可以指定提示消息:
```
[img[An explanatory tooltip|Motovun Jack.jpg]]
```
可以提供属性以指定 CSS 类别的图片宽度和高度:
```
[img width=32 [Motovun Jack.jpg]]
[img width=32 class="tc-image" [Motovun Jack.jpg]]
```
请注意可以将属性指定为嵌入或为变量引用:
```
[img width={{!!mywidth}} class=<<image-classes>> [Motovun Jack.jpg]]
```
图片的语法是援引 ImageWidget 的简写形式。
! 嵌入显示图像
您还可以嵌入方式显示存储在条目的图片。这种方法的缺点是没有直接的方法来控制图片的大小。
```
{{Motovun Jack.jpg}}
```
显示结果:
{{Motovun Jack.jpg}}
! 图片作为链接
```
<$link to="HelloThere" tooltip="自定义工具提示">{{$:/core/icon}}</$link>
```
显示结果:
<$link to="HelloThere" tooltip="自定义工具提示">{{$:/core/icon}}</$link>
! 导入图像
使用 <<.button import>> 按钮 (在侧边栏的 <<.sidebar-tab Tools>> 选项卡中),或拖放。
详见 [[导入条目|Importing Tiddlers]]。
<<.from-version "5.1.24">> 您还可以通过拖放或粘贴图像到条目编辑器中,导入图像。
! 简介
此图片小工具显示图片,可指定为远程网址或包含图片的本地条目名称。
! 内容与属性
此 `<$image>` 小工具的任何内文将被忽略。
|!属性 |!说明 |
|source |图片的 URL,或图片条目名称 |
|width |图片的宽度 |
|height |图片的高度 |
|tooltip |在图片上要显示的提示 |
|alt |与图片关联的替代文本 |
|class |要指定到 `<img>` 元素的 CSS 类别 |
可以指定宽度和高度为像素值(例如 "23" 或 "23px")或百分比(例如 "23%")。他们都是可选的;如果未提供,浏览器将使用 CSS 规则来调整图像的大小。
! 外部图片与 ''_canonical_uri'' 字段
当用于显示基于条目的图片,图片小工具在两种不同模式中运行:
* 若有 ''_canonical_uri'' 字段, 则其值当作为生成的 `<img>` 元素的 ''src'' 属性,且忽略 ''text'' 字段。
* 若无 ''_canonical_uri'' 字段,则图片小工具生成一个 `<img>` 元素,直接使用 `data:` URI 嵌入图片数据。
更多详细信息,请参阅 ExternalImages。
{{$:/language/Help/import}}
您可以从外部文件或直接从另一个 ~TiddlyWiki 将条目导入 ~TiddlyWiki。
!! 从外部文件导入内容
有几种方法可以从外部文件 (包括文本、图像、pdf 文档等) 导入内容︰
* 使用<<.button import>>按钮(在侧边栏的<<.sidebar-tab Tools>>页签中)选择一个本机文件
* 从 Windows 文件总管或 Mac OS X 的 Finder 拖放文件到 ~TiddlyWiki 浏览器窗口中
* 使用菜单或键盘快捷键直接从剪贴板中粘贴内容(<kbd>Ctrl</kbd>+<kbd>V</kbd> 或 <kbd>cmd</kbd>+<kbd>V</kbd>)
** 目前支持 Chrome、Firefox 和 Edge(但不支持 Internet Explorer)
大多数文件是以个别条目导入。例外情况是:
* 被辨识为 ~TiddlyWiki 档的 ''.html'' 文件被解析以提取其中的条目
* ''.json'' 文件被解析以提取其中的条目。他们可以从另一个 ~TiddlyWiki [[导出|How to export tiddlers]]来创建。 ~TiddlyWiki 接受包含单个条目字段对象或一组条目字段对象的 JSON 文件
!! 从其他 ~TiddlyWiki 浏览器窗口导入内容
条目可以从其他 ~TiddlyWiki 浏览器窗口通过[[拖放|Drag and Drop]]被导入。将一个条目链接或标签从一个 ~TiddlyWiki 浏览器窗口拖动到另一个。拖动一个链接将导入单个条目,拖动标签丸将导入具该标签的所有条目。
! 简介
ImportVariablesWidget 从其他条目清单导入宏和变量定义,且使其可用于其子项。例如:
```
<$importvariables filter="[tag[mySpecialMacros]]">
All the macros defined in tiddlers with the tag "mySpecialMacros" are available here
</$importvariables>
```
! 内容与属性
Importvariables 小工具的内容是有效的导入的变量定义的范围内。
|!属性 |!说明 |
|filter |[[Tiddler filter|Filters]] defining the tiddlers from which macro definitions will be imported |
! 全域宏
经由下面的 importvariables 小工具包裹页面内容,在主页面模板 ([[$:/core/ui/PageTemplate]]) 内实现所谓的全域宏:
```
<$importvariables filter="[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]">
...
</$importvariables>
```
! `\import` 编译指示
<<.from-version "5.1.18">> `\import` [[编译指示|Pragma]] 是使用 ImportVariablesWidget 的一个替代语法。例如,前面的示例可以表示为:
```
\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]
```
任何人都可提交改进在 https://tiddlywiki.com 上的 TiddlyWiki 文档。(改进核心代码,必须使用一个更复杂的过程,因为在提交前,需要在浏览器和 Node.js 环境下测试更改)。
<<.warning """如果您已经了解 GitHub,请注意文档更新必须指向 `tiddlywiki-com` 分支""">>
# 若尚无 ~Github 帐号,请于 https://github.com 创建一个
# 若您尚未如此做的话,请签署[[贡献者授权协议|Contributor License Agreement]],如[[签署贡献者授权协议|Signing the Contributor License Agreement]]中所描述的
# 于 https://tiddlywiki.com, 在您要改善的条目上点击 "编辑"
# 您应该会看到一个粉红色的横幅与文本: //Can you help us improve this documentation? Find out how to edit this tiddler on ~GitHub//
# 点击该外部链结 ...''this tiddler on ~GitHub''
## 会提示您 "you need to fork this repository to propose changes"。"fork" 是你自己的存储库副本中包含了您建议的更改
# 应该会开启新的浏览器标签,准备编辑该在 github.com 的条目
# 在该条目文本的编辑框下面,你应该可以看到一个标示 ''Propose file change''
# 输入一个简短的标题来解释此更改(例如, "Clarify attribute syntax instability")
# 必要时,也可输入更详细的描述
# 点击标示 ''Propose file change'' 的绿色按钮
# 再接下来的画面,点击标示 ''Create pull request'' 的绿色的按钮
[[Jermolene|https://github.com/Jermolene]] 或其他核心开发者可能会合并你的请求,以便将其合并到 https://tiddlywiki.com 的下一个版本。
Mario Pietsch 已创建一些简短的教学视频:
<iframe width="560" height="315" src="https://www.youtube.com/embed/L4zTkMYcri8" frameborder="0" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/6ElUruH92tc" frameborder="0" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/axFCk9KsMFc" frameborder="0" allowfullscreen></iframe>
允许更改与内置于大多数浏览器的 IndexedDB 数据库同步的插件。
{{!!url}}
<<<
Being quite new to TW5 development I tried my best to draft a SyncAdaptor to store tiddlers in IndexedDb. This is quite useful if an application / plugin installation is not possible (we have quite some restrictions at work...).
<<<
依次处理每个输入名称,若非[[数据条目|DataTiddlers]]则忽略之。从数据条目检索属性名称的清单 (无特定顺序),然后[[主导追加|Dominant Append]]到运算符的输出。
当一条目的内容是以数组作为其根的 [[JSON|JSONTiddlers]],<<.op indexes>> 运算符会改为检索一待选的整数索引。
<<.operator-examples "indexes">>
<<.operator-example 1 "[{$:/palette}indexes[]sort[title]]" "定义于当前[[调色板|ColourPalettes]]的所有颜色">>
<<.operator-example 2 "[[$:/HistoryList]indexes[]]" "输出为一整数清单,因为[[历史记录|$:/HistoryList]]是一个数组">>
\define searchInField(field, for, ci)
<$list filter="[!is[shadow]!is[system]regexp:$field$[$for$$ci$]limit[1]]">
<dt>$field$</dt>
</$list>
<$list filter="[!is[shadow]!is[system]regexp:$field$[$for$$ci$]]">
<dd><$link><$view field="title"/></$link></dd>
</$list>
\end
<style>.tc-advanced-search-check imput {width:auto !important;}</style>
于字段中查找... <span class="tc-advanced-search-check"><$checkbox field="case-insensitive" tiddler="$:/temp/advancedsearch" checked="(?i)"> 忽略大小写</$checkbox></span>
<div class="tc-search">
<$edit-text tiddler="$:/temp/advancedsearch" type="search" tag="input"/> <$select field="field" tiddler="$:/temp/advancedsearch" default="">
<option value="">*any</option>
<$list filter="[!is[shadow]!is[system]fields[]sort[]]" variable="field">
<option value=<<field>>><<field>></option>
</$list>
</$select>
<$reveal state="$:/temp/advancedsearch" type="nomatch" text="">
<$button class="tc-btn-invisible">
<$action-setfield $tiddler="$:/temp/advancedsearch" $field="text" $value=""/>
{{$:/core/images/close-button}}
</$button>
</$reveal>
</div>
<$reveal state="$:/temp/advancedsearch" type="nomatch" text="">
<$reveal state="$:/temp/advancedsearch!!field" type="match" text="">
<dl>
<$list filter="[!is[shadow]!is[system]fields[]]" variable="field">
<$reveal type=nomatch text=text default=<<field>>>
<$macrocall $name="searchInField" field=<<field>> for={{$:/temp/advancedsearch}} ci={{$:/temp/advancedsearch!!case-insensitive}}/>
</$reveal>
</$list>
</dl>
</$reveal>
<$reveal state="$:/temp/advancedsearch!!field" type="nomatch" text="">
<dl>
<$macrocall $name="searchInField" field={{$:/temp/advancedsearch!!field}} for={{$:/temp/advancedsearch}} ci={{$:/temp/advancedsearch!!case-insensitive}}/>
</dl>
</$reveal>
</$reveal>
\define example(name)
<$transclude tiddler="""$:/info/url/$name$""" mode="inline"/>
\end
系统条目于 `$:/info/` 命名空间中,用于公开有关系统 (包括当前的浏览器) 的信息,以便 WikiText 应用程序可以适应可用的功能。
! 信息条目
|!名称 |!说明 |
|[[$:/info/startup-timestamp]] |<<.from-version "5.1.23">> TiddlyWiki 日期格式的启动时间戳 |
|[[$:/info/browser]] |运行于浏览器中吗?("yes" 或 "no") |
|[[$:/info/browser/language]] |<<.from-version "5.1.20">> 浏览器回报的语言(请注意,某些浏览器回报两个字符代码,例如 `en`,而其他浏览器回报完整代码,例如 `en-GB`)|
|[[$:/info/browser/screen/width]] |<<.from-version "5.1.16">> 屏幕宽度(像素) |
|[[$:/info/browser/screen/height]] |<<.from-version "5.1.16">> 屏幕高度(像素) |
|[[$:/info/node]] |运行于 [[Node.js]] 环境吗?("yes" 或 "no") |
|[[$:/info/url/full]] |<<.from-version "5.1.14">> 维基的完整 URL(例如,''<<example full>>'') |
|[[$:/info/url/host]] |<<.from-version "5.1.14">> 维基的 URL 的主机部分(例如,''<<example host>>'') |
|[[$:/info/url/hostname]] |<<.from-version "5.1.14">> 维基的 URL 的主机名称部分(例如,''<<example hostname>>'') |
|[[$:/info/url/origin]] |<<.from-version "5.1.14">> 维基的 URL 来源部分 (例如,''<<example origin>>'') |
|[[$:/info/url/pathname]] |<<.from-version "5.1.14">> 维基的 URL 的路径名部分(例如,''<<example pathname>>'') |
|[[$:/info/url/port]] |<<.from-version "5.1.14">> 维基的 URL 的端口部分(例如,''<<example port>>'') |
|[[$:/info/url/protocol]] |<<.from-version "5.1.14">> 维基的 URL 的协定部分(例如,''<<example protocol>>'') |
|[[$:/info/url/search]] |<<.from-version "5.1.14">> 维基的 URL 的搜索部分 of URL of wiki(例如,''<<example search>>'') |
|[[$:/info/darkmode]] |<<.from-version "5.1.23">> 是否激活深色模式? ("yes" 或 "no") |
每个条目有一个附加信息的皮肤。要显示它,请点击条目工具栏中的 <<.icon $:/core/images/down-arrow>> 按钮,然后从下拉清单中选择 <<.icon $:/core/images/info-button>> ''信息''。
信息面板包含以下页签:
* ''工具'' - 这提供条目可以运行的各种操作的按钮。每个按钮旁边的核取方块,可以将其显现到条目的工具栏上 - 这将会影响在您的维基的所有条目
* ''反向链接''、''子条目''、''列表''、''被列于'' - 这些表列各种相关的条目。请参阅[[使用链接导览条目|Using links to navigate between tiddlers]]
* ''字段'' - 这摘要了条目的所有[[字段|TiddlerFields]],除了 ''text'' 以外
* ''高级'' - 这表明条目是否为[[影子条目|ShadowTiddlers]]。如果是,这也揭示了其来自哪个插件以及是否已被一个普通条目覆写
若要关闭信息面板,点击其外的任意位置。
{{$:/language/Help/init}}
另请参阅:
* [[Environment Variables on Node.js]]
Innerwiki 插件使 TiddlyWiki 能够嵌入修改过的自身副本(一个 "innerwiki")。主要动机是能够制作屏幕画面截屏,随着时间的推移,TiddlyWiki 的外观会自动更新,或者以不同的语言生成相同的截屏。
在浏览器中,innerwikis 显示为嵌入式 iframe。在 Node.js 下 [[Google 的 Puppeteer|https://pptr.dev/]] 用于将 innerwikis 加载为画面以外的网页,然后将其快照为 PNG 图像。
观看[[演示|$:/plugins/tiddlywiki/innerwiki/examples]]于 [ext[https://tiddlywiki.com/plugins/tiddlywiki/innerwiki|https://tiddlywiki.com/plugins/tiddlywiki/innerwiki]]
提供您一个对话框,用于维基中搜索和选择现有的条目。当您选定条目时,它将当作[[维基文本|WikiText]]链接,插入于 <<.field text>> 字段中光标所在位置。
按下 <<.icon $:/core/images/link>> 会给您 `[[Some link]]`
它''不会''插入:外部网络链接或[[图片|Insert picture]]链接。
提供您一个对话框,用于维基中搜索和选择现有的图像条目。当您选定条目时,它将当作[[维基文本|WikiText]]图像链接,插入于 <<.field text>> 字段中光标所在位置。
按下 <<.icon $:/core/images/picture>> 会给你 `[img[$:/favicon.ico]]`
若项目 <<.place B>> 不存在于输入清单中,则新项目将被插入到清单的末尾。
! 单档式配置
使用 TiddlyWiki 为一个单一的 HTML 文件时,请遵循以下说明︰
# 创建当前 TiddlyWiki HTML 文件的备份 ([[只是以防万一|The First Rule of Using TiddlyWiki]])
# 在浏览器中开启您的 TiddlyWiki
# 开启 <<.icon $:/core/images/options-button>> [[控制台|$:/ControlPanel]],点击''插件''页签,然后点击 <<.icon $:/core/images/download-button>> ''获取更多插件''按钮
# 点击 <<.icon $:/core/images/chevron-right>> ''开启插件程序库''开启官方的插件程序库
# 当程序库清单加载后:
## 使用页签选择''插件''、''布景主题''或''语言''
## 使用''搜索''框,查找插件的详细信息
# 点击''安装''按钮,安装插件
# 保存您的 TiddlyWiki <<.icon $:/core/images/save-button>>
# 如果窗口顶部出现黄色警告条,刷新窗口,使 TiddlyWiki 完成该插件安装 <<.icon $:/core/images/refresh-button>>
#* <<.from-version "5.1.22">> 安装支持动态加载的插件时,不再需要刷新 TiddlyWiki。相关详细信息,请参阅[[插件机制|PluginMechanism]]
# 该插件现在应该可供使用
! 主从式组态
使用于 Node.js 的 TiddlyWiki 时,请遵循以下说明︰
# 使用[[控制台|$:/ControlPanel]]的''插件''页签,辨识所要安装的插件(但是''不要''从这里安装插件)。插件是由它们的类型(例如,语言、布景主题或插件)以及其发布者和标题来识别。例如, `$:/plugins/tiddlywiki/internals` 插件被称为 ''tiddlywiki/internals''
# 如果伺服程序在运行中,则退出
# 编辑 `tiddlywiki.info` 文件 (它是 JSON 格式) 并找到 `plugins`、`themes` 或 `languages` 段落 (见下文)
# 添加与您要添加的插件对应项目。小心保留逗号以分隔项目,但在列表终止的最后一个项目勿使用逗号
# 重启伺服程序
```
{
"plugins": [
"tiddlywiki/codemirror"
],
"themes": [
"tiddlywiki/vanilla",
"tiddlywiki/snowwhite"
],
"languages": [
"es-ES",
"fr-FR",
"en-US",
"zh-Hans",
"zh-Hant"
]
}
```
另请参阅 [[于 Node.js 安装自定义插件|Installing custom plugins on Node.js]]。
在 Node.js 下使用 TiddlyWiki 时,可以通过多种方式,安装不属于 TiddlyWiki 插件程序库的自定义插件。(有关从程序库中安装插件的说明,请参阅[[从插件程序库中安装插件|Installing a plugin from the plugin library]]。
* 在一个便于共用的位置,部署包含插件的插件文件夹,并使用[[环境变量|Environment Variables on Node.js]]告诉 TiddlyWiki 搜索这些文件夹。插件可以在 `tiddlywiki.info` 中,以其名称引用(例如 `tiddlytools/magic`)。
* 将包含插件的插件文件夹,放在[[维基文件夹|TiddlyWikiFolders]]中的 `plugins` 文件夹中。
* 依据 TiddlyWiki 本身的安装方式,插件也可以通过将插件文件夹复制到源码库的 `plugins` 文件夹中来安装。仅当使用源码库的分叉副本时,才建议这样做。如果 TiddlyWiki 已由 npm 安装,则不建议这样做,因为 npm 在运行更新时可能会覆盖安装。
请注意,将插件当作普通条目导入(例如,将插件拖放到浏览器中)将导致插件仅在浏览器中启用,在 Node.js 下则不可用。
\define example-file(title)
<$transclude tiddler="$title$" mode="block"/> <$macrocall $name="copy-to-clipboard" src={{$title$}}/>
\end
Microsoft 的 [[Internet Information Server|https://en.wikipedia.org/wiki/Internet_Information_Services]] (IIS) 是 Windows 的内置网页服务器。为了利用 IIS 功能 (如 URL 重写、静态档托管和崩溃后的自动重新开机),有助于在 IIS 中托管 TiddlyWiki。
! 1. 激活 IIS
# 在 Windows 中,请访问控制台,然后点击 ''添加或移除程序''
# 在 ''添加或移除程序'' 窗口中,点击 ''添加/移除 Windows 组件''.
# 勾选 ''Internet Information Services (IIS)'' 核取方块
# 点击 ''下一步'',然后点击 ''完成''
! 2. 安装所需的工具
# 从 https://www.iis.net/downloads/microsoft/httpplatformhandler 安装 IIS 模块 ~HttpPlatformHandler
# 从 https://nodejs.org/ 安装 [[Node.js]]
# 从 https://git-scm.com/ 安装 Git
#* //可选的;只有使用最新版的 TiddlyWiki 时,才需直接从 ~GitHub 拉取 - 见下文//
! 3. 安装 TiddlyWiki 并设置一个新维基
# 为维基创建一个合适的目录 (例如,`C:\MyStuff`)
# 在其中创建一个名为 `C:\MyStuff\package.json` 的文件,内容如下:
#> <<example-file "Example package.json for IIS">>
# 同时创建一个名为 `C:\MyStuff\web.config` 的文件,内容如下:
#> <<example-file "Example web.config for IIS">>
# 创建一个名为 "wiki" 的子目录 (即 `C:\MyStuff\wiki`)
# 创建一个名为 `C:\MyStuff\wiki\tiddlywiki.info` 的文件,内容如下:
#> <<example-file "Example tiddlywiki.info for IIS">>
# 创建一个,名为 "tiddlers" 的子目录 (即 `C:\MyStuff\wiki\tiddlers`)
# 在其中创建一个名为 `C:\MyStuff\wiki\tiddlers\config-tiddlyweb-host.tid` 的文件,内容如下:
#> <<example-file "Example config-tiddlyweb-host for IIS">>
#* (有关 ~HttpPlatformHandler 配置字段的详细信息,请参考[[微软的文档|https://docs.microsoft.com/en-us/iis/extensions/httpplatformhandler/httpplatformhandler-configuration-reference]]
# 在 `C:/MyStuff` 目录下运行 `npm install` 命令
! 4. 在 IIS 中设置应用程序
* 在 Windows 中,运行 IIS 管理程序 (使用 "开始" 功能表运行 `inetmgr.exe`)
* 在左侧的 ''连接'' 栏中找到该服务器,然后按一下 "显示三角形" 显示其内容 *
* 打开 "网站" 文件夹
* 在''默认网站''项目点击右键,然后从功能表中选择''添加应用程序''。
* 在对话框中输入以下信息:
*# ''Alias'': `MyApp`
*# ''Physical path'': `C:\MyStuff`
* 点击 ''确定''
! 5. 测试应用程序
在浏览器中访问 http://localhost/MyApp/ 来测试应用程序。
! 注意事项
* 如果需要身份验证,请在 `web.config` 中的 `--listen` 命令中指定用户名和密码。例如:
** <<example-file "Example web.config - arguments for IIS">>
** 注意在非字母、数字的密码前后,需使用双引号, 并将其 HTML 编码为 `"`
* 如果更改了 `web.config` 档中的设置,或者修改了应用程序代码,则需要使用 IIS 管理程序,重新启动服务器
# 安装 [[Node.js]]
#* 无论是从您喜好的管理器︰通常在 Debian/Ubuntu Linux 或 [[Termux for Android|Serving TW5 from Android]] 使用 `apt-get install nodejs`、或在 Mac 上使用 `brew install node`
#* 或直接从 http://nodejs.org
# 打开一个命令行终端并输入:
#> `npm install -g tiddlywiki`
#> 若运行失败出现错误,您可能需要以管理员身份重新运行命令:
#> `sudo npm install -g tiddlywiki` (Mac/Linux)
# 检查 TiddlyWiki 已安装,请输入:
#> `tiddlywiki --version`
# 您应该会看到 TiddlyWiki 回应其当前版本 (例如:"<<version>>";您还可能看到回应其他调试信息)
# 试试看:
## `tiddlywiki mynewwiki --init server` 创建一个新的 wiki 所需的文件夹,其中包含与服务器相关的组件
## `tiddlywiki mynewwiki --listen` 启动 TiddlyWiki 服务器
## 在您的浏览器造访 http://127.0.0.1:8080/
## 尝试编辑和添加条目
# (可选)制作脱机副本 ︰
#* 点击侧边栏的 <<.icon $:/core/images/save-button>> ''保存变更''按钮,''或''
#* `tiddlywiki mynewwiki --build index`
其中 `-g` 参数令 TiddlyWiki 安装于全域。若未指定该参数,TiddlyWiki 只会可用在你安装它的目录中。
如果您使用 Debian 或基于 Debian 的 Linux,并且通过 node.js 套件包安装时,遇到 `node: command not found` 错误,则可能需要在 `nodejs` 和 `node` 之间创建一个符号链接。请参考您的发行手册和 `whereis` 来正确创建一个链接。详见 github [[issue 1434|http://github.com/Jermolene/TiddlyWiki5/issues/1434]]
Debian v8.0 的示例:`sudo ln -s /usr/bin/nodejs /usr/bin/node`
您也可以安装以前的版本:
> npm install -g tiddlywiki@5.1.13
# 从 https://github.com/Jermolene/TiddlyWiki5 复制(clone)一份 TiddlyWiki5 的 GitHub 存储库的本机复本
# 开启命令提示字符,且更改当前的工作目录至 TiddlyWiki5 存储库的根目录
# 输入 `npm link` (Windows) 或 `sudo npm link` (Mac/Linux) 告诉 [[npm]] 使用此副本的存储库为全域安装者
# 在其根目录,您可以启动 ~TiddlyWiki,像这样: <br/>``tiddlywiki editions/tw5.com-server --listen``
此后您可以通过 [[npm]] 使用 TiddlyWiki5,如同它是以一般方式 `npm install -g tiddlywiki` 安装。
时常更新复本(clone),以确保您拥有最新的代码。
<<.def "简介条目">>直接告诉读者,并引导他们通过一个过程。读者可能是一个初学者或中级用户。
这些条目可再细分为:
;欢迎
* ~TiddlyWiki 是什么,我为什么要在乎?
* 主要功能和优点的示范
* 常问的问题
* ~TiddlyWiki 在该领域的例子
* 项目本身的相关信息
;教学
* 对于初学者有序的题材介绍
* 每个条目介绍一个新的观点或概念
* 其主要内容包括极少数链接
* 于结尾处的"延伸阅读"段落,可以提供相关的链接
;练习
* 伴随的教学条目
* 揭示对需求的解决方案
;操作方法
* 一个带编号步骤的清单来运行一项小的特定任务
* 简洁,链接到适当的参考条目
* 通常有一个序言,阐明此项任务的性质
;实例
* 伴随一个[[参考条目|Reference Tiddlers]]
* 可包含解释和类似的评论
* 保持独立,以保持纯参考条目
简介条目直接称读者为 <<.word you>>。
但避免过度口语化的语言、文化或局部引用且企图耍幽默,因为这些可能阻碍甚至得罪了国际读者。同时也避免了为<<.word 便利>> 或 <<.word 简化>>功能的描述而令读者沮丧。
一个 git 的由您自己掌控结局!ⓡ 用于修复一个//毁损的// Git 存储库。
{{!!url}}
<<<
This document is an attempt to be a fairly comprehensive guide to recovering from what you did not mean to do when using git. It isn't that git is so complicated that you need a large document to take care or your particular problem, it is more that the set of things that you might have done is so large that different techniques are needed depending on exactly what you have done and what you want to have happen.
<<<
这篇简短介绍演示如何安装和使用 TiddlyDesktop:
<iframe width="560" height="315" src="https://www.youtube.com/embed/i3Bggkm7paA" frameborder="0" allowfullscreen></iframe>
<<.preamble """此条目说明撰写基本的[[筛选器|Filters]]选择一组条目。更多的技术摘要,请参阅[[筛选器语法|Filter Syntax]]。""">>
<$macrocall $name=".tip" _="""如果您只是将筛选器输入于条目,筛选器什么也不做,他们需要一个上下文。一个实验筛选器的简单方法,是将其输入于[[高级搜索|$:/AdvancedSearch]]的<<.advancedsearch-tab Filter>>页签。"""/>
最简单的情况是在你已经确切知道你想要的条目,在双重方括弧内输入条目名称,每个名称之间以空格或分行符号区隔:
> `[[Recipe book]] [[ScrambledEggs]] [[Mom's apple pie]]`
当名称中并不包含任何空格时,您可以省略中括号:
> `[[Recipe book]] ScrambledEggs [[Mom's apple pie]]`
双中括号实际上是这个的简写形式:
> `[title[ScrambledEggs]]`
... 这给了我们任何筛选器的<<.def "通用形式">>:
> `[operator[parameter]]`
例如,以下是如何选择具有标签 <<.tag Recipe>> 的所有条目:
> `[tag[Recipe]]`
我们可以经由在操作符之前添加一个惊叹号 `!` 来反转意义。例如,我们可以选择任何<<.em 不>>具有 <<.tag Recipe>> 标签的条目:
> `[!tag[Recipe]]`
条目可依其他非名称和标签的字段进行筛选:
> `[field:serving[4]]`
该示例将选择 <<.field serving>> 字段值为 <<.value 4>> 的任何条目。
当一个单字 "serving" 不是一种标准的筛选器操作符(且不太可能是),您可以安全地省略掉前置的 `field:`:
> `[serving[4]]`
! 组合
到目前为止,我们已经看的每个筛选器都只涉及单一 step。但你可以一起<<.def 运行>>数个 steps,像这样:
> `[tag[Vegetarian]!tag[soup]serving[4]]`
请注意整个 run 如何包含于一对中括号内。
一个条目必须符合一个 run 中的<<.em 所有>> steps,因此上述的例子中取回四人份的素食(不含汤)。
一串行的 runs 将选择符合 <<.em 任何>> runs 的条目。我们可以使用这个找出 3、4 或 5 人份的食谱:
> `[serving[3]] [serving[4]] [serving[5]]`
如果想要忽略 4 人份的素食食谱,可以这样:
> `[serving[3]] [serving[4]!tag[Vegetarian]] [serving[5]]`
默认情况下,每个 run 考虑维基中的每个条目。但我们可以使用 `+` 符号强制一个 run 只考虑选择由其前的 runs 所选定的条目:
> `[serving[3]] [serving[4]] [serving[5]] +[tag[Vegetarian]] +[sort[title]]`
这选择 3、4 或 5 人份的食谱,然后筛选<<.em 那些>>只保留素食食谱,且最后对剩下的名称依字母顺序进行排序。
同样的方式,我们可以使用一个 `-` 符号,从到目前为止的结果<<.em 删除>>筛选的条目。在这里,我们选择所有的素食食谱除了其中两样:
> `[tag[Vegetarian]] -[title[ScrambledEggs]] -BeansOnToast`
! 特殊参数
到目前为止,我们看到每个 step 的参数已经在中括号内,这表示 ~TiddlyWiki 将筛选括弧之间的确切字符串。但另外两种括号是可能的:
<<.def "大括号">> `{}` 表示该参数是一个[[文本参考|TextReference]],且其将被另一个条目的内容所取代。例如,如果有一个名为 <<.tid Preference>> 的条目其内容是单字 <<.value Vegetarian>>,我们可以说:
> `[tag{Preference}]`
是 `[tag[Vegetarian]]` 的替代方法,这将允许偏好可随着时间改变。
以这种最简单的形式,[[文本参考|TextReference]]将采用条目的全部内容(在技术术语中,是条目的 <<.field text>> 字段),并以其替换[[文本参考|TextReference]]。这样,条目的内容将成为筛选器参数,就像您写成 `[tag[Vegetarian]]` 一样。但通过更改偏好的条目的内容来更改参数,为您提供了更大的灵活性。
<<.def "角括弧">> `<>` 表示该参数是一个[[变量|Variables]]名称,其值是用来替代。在这里我们使用内置的筛选器的 <<.vlink currentTiddler>> 变量选择其内文包含当前条目名称的所有条目:
> `[search<currentTiddler>]`
请注意,这些特殊括号不能嵌套。例如,不可能写成 `[search{<currentTiddler>}]`。
! 多个参数
<<.from-version "5.1.23">> 某些步骤接受多个参数,这些参数由一个 ` , ` 字符分隔。
> 示例:`[param1],[param2]` 或 `<param1>,{param2}`
制作项目清单在使用 TiddlyWiki 起着核心作用。以下是一些较为常用的技巧的简要介绍。
~TiddlyWiki [[内部|ListField]][[使用|The Extended Listops Filters]]列表有很多用途,所以这个词可以有多个含义。这里我们关心的是显示项目序列,但不一定是作为一个传统的项目符号列表。
! 手动输入列表
!! ~WikiText
WikiText 列表是手动输入的列表,它们使用特殊字符来指定它是什么类型的列表,以及它应该如何显示。
示例包括用星号(*)和编号列表(#)创建的项目符号列表。在幕后, ~WikiText 列表是基于标准的 `<ul>` 和 `<li>` HTML 元素。更多相关信息,请参阅 [[Lists in WikiText]]。
WikiText 的输入列表的一个例子:
<<wikitext-example-without-html """* Greatest Movies of All Time
** Casa Blanca
** Pride and Prejudice and Zombies""">>
! 生成列表
可以使用[[筛选器运算子|Filter Operators]]中的[[筛选器|Filters]],以 ListWidget 自动生成列表
指定选择哪些条目作为输出的标准。为一些常见类型的列表提供了快捷宏。
!! ~ListWidget
ListWidget 是创建列表最强大的工具。它允许操作筛选的输出,并将其样式化为看起来完全不像列表的表单,例如表格或复杂文本。更多相关详细信息,请参阅 [[ListWidget]]。
一个显示具有 "HelloThere" 标签的所有条目的示例,可能如下所示:
<<wikitext-example-without-html """<$list filter="[tag[HelloThere]]"><$view field="title"/><br/></$list>""">>
<<.tip """即使条目本身是由 ~ListWidget 生成,[[ViewTemplate|$:/core/ui/ViewTemplate]] 使用 ListWidget 来取得用于显示条目名称、标签、内容等的所有指定范本。""">>
!! 筛选器的转换
筛选器的转换 `{{{...}}}` 的语法,将一个筛选器作为输入,并输出匹配标题的连结清单。您还可以应用[[范本|Transclusion with Templates]], 例如:
<<wikitext-example-without-html """{{{ [tag[HelloThere]] || $:/core/ui/TagTemplate }}}""">>
!! list-links 宏
[[list-links|list-links Macro]] 宏以比使用 ListWidget 更简单的方式,提供预先格式化的列表 (通常是符号列表)。幕后, 它真的是 ListWidget 应用默认范本至每个列表项目。
<$macrocall $name="wikitext-example-without-html" src="""<<list-links "[tag[HelloThere]]">>"""/>
! 其他 “清单相关” 功能
[[list|ListField]]、[[list-before|Order of Tagged Tiddlers]] 和 [[list-after|Order of Tagged Tiddlers]] 是所有控制条目在清单中的位置的字段名称。[[字段|TiddlerFields]]是一种将结构化资讯 (如日期、数量、类别等) 的附加位添加到条目的方法。
[[list|list Operator]] 和 [[listed|listed Operator]] 分别为选择和查找清单中的标题的//筛选器运算子//。
此简短演示说明 TiddlyWiki 的基本原则。
<iframe width="560" height="315" src="https://www.youtube.com/embed/KtCUr83XgyE" frameborder="0" allowfullscreen></iframe>
该用于生成影片的 TiddlyWiki 可以在这里找到:
https://tiddlywiki.com/editions/introduction/
参数 <<.place C>> 为下列基本类别其中之一:
|!类别 |!匹配任何条目名称... |
|^`current` |为[[当前条目|Current Tiddler]] |
|^`image` |有一个图像[[内容类型|ContentType]] |
|^`binary` |有一个二进位[[内容类型|ContentType]] |
|^`missing` |不存在 (不同于可能为一影子条目),不论是否有任何链接连到 |
|^`orphan` |无[[硬式链接|Hard and Soft Links]]连到 |
|^`shadow` |为一[[影子条目|ShadowTiddlers]],无论其是否已被一非影子条目覆写 |
|^`system` |为一[[系统条目|SystemTiddlers]],亦即其名称开头为 `$:/` |
|^`tag` |为一使用中的标签 |
|^`tiddler` |存在为非影子条目 |
|^`variable` |<<.from-version "5.1.20">> 作为变量存在 (无论该变量是否具有非空值) |
|^`blank` |<<.from-version "5.1.20">> 为空值 (即是一个零长度的字符串) |
|^`draft` |<<.from-version "5.1.23">> 是另一个条目的草稿。与 `[has[draft.of]]` 同义 |
如果 <<.place C>> 为其他,则返回一条错误消息。<<.from-version "5.1.14">> 如果 <<.place C>> 是空白的,则输出将会通过不变 (在早期版本中返回错误消息)。
`!is[tiddler]` 与 `is[missing]` 同义。
当 <<.op is[missing]>> 是一 [[run|Filter Run]] 的首个操作符,其输出始终是空的。当 <<.op is[shadow]>> 是第一个时,其输出只有那些被覆写的影子条目。这是因为[[一个 run 的初始输入|Filter Expression]]只包含 <<.em 非>>-影子条目。
<<.olink all>> 操作符是相似的,但其范围为整个维基。
<<.operator-examples "is">>
<<.operator-example 1 "[is[tag]]">>
<<.operator-example 2 "[!is[tag]]">>
<<.operator-example 3 "[all[shadows]!is[system]]" "名称不是以 `$:/` 开头的影子条目">>
<<.operator-example 4 "[is[system]tag[$:/tags/Stylesheet]]" "系统样式表">>
<<.operator-example 5 "[all[shadows]is[system]tag[$:/tags/Stylesheet]]" "影子系统样式表">>
<<.operator-example 6 "[is[shadow]]" "已被覆写的影子条目">>
<<.operator-example 7 "[is[missing]]" "空的,因为它的输入只包含存在的条目">>
TiddlyWiki の日本语バージョンはこちら:
<!--* ''ドキュメント'' : https://tiddlywiki.com/languages/ja-JP/index.html-->
* ''空白のコピー'' : https://tiddlywiki.com/languages/ja-JP/empty.html
Jeremy Ruston 是 TiddlyWiki 的发明者。您可以经由 [[Federatial]] 雇用 Jeremy Ruston、并在这些服务找到他:
* jeremy (at) jermolene (dot) com
* [[Jermolene on GitHub|https://github.com/Jermolene]]
* [[Jermolene on GitTip|https://www.gittip.com/Jermolene/]],小额支付服务
* [[@Jermolene on Twitter|http://twitter.com/#!/jermolene]]
* [[Jermy on LinkedIn|http://www.linkedin.com/in/jermy]]
* [[Jermy on Flickr|http://www.flickr.com/photos/jermy/]]
更多信息:
* 一个由 Wendy Grossman [[采访 JeremyRuston|http://www.theinquirer.net/inquirer/feature/2105529/bt-software-engineer-tells-telco-source]]
* 一个 1983 年的英国电视[[有趣的采访 JeremyRuston|https://www.youtube.com/watch?v=auyIhw8MTmQ]]
* 这里有一个 JeremyRuston 在 2007 年做的展示影片叫[[“如何启动一个开源项目”|http://vimeo.com/856110]]。
<<.from-version "5.1.20">>
<<.operator-examples "join">>
<<.operator-example 1 "a b c d e +[join[,]]">>
扩充 tiddlywiki 以解析复杂的 ("嵌套式") json 数据条目。
Json Mangler 为 json 数据条目的索引导入一种新的路径语法,包括许多支持工具、筛选器、小工具等。
示例维基: https://joshuafontany.github.io/TW5-JsonMangler/
源码:https://github.com/joshuafontany/TW5-JsonMangler
进行以下替换:
|!字符 |!替代字符 |!条件 |
|`\` |`\\` |总是 |
|`"` |`\"` |总是 |
|`\r` (归位) |`\\r` |总是 |
|`\n` (换行) |`\\n` |总是 |
|`\x08` (退格) |`\\b` |总是 |
|`\x0c` (换页) |`\\f` |总是 |
|`\t` (定位) |`\\t` |总是 |
|从 0x00 到 0x1f 的字符|`\\x##` 其中 ## 是两个十六进制数字 |总是 |
|从 0x80 到 0xffff 的字符|`\\u####` 其中 #### 是四个十六进制数字 |若 `rawunicode` 尾码不存在 (默认) |
|从 0x80 到 0xffff 的字符|<<.from-version "5.1.23">> 不变的 |若 `rawunicode` 尾码存在 |
<<.from-version "5.1.23">> 如果存在尾码 `rawunicode`,则 0x80 以上的 Unicode 字符(如 ß, ä, ñ or 🎄)将不加改变地传递。如果没有尾码,它们将被替换为 `\\u` 代码,这是 5.1.23 之前默认的行为。
<<.note """技术说明:基本多语种平面之外的字符,如🎄 和其他表情符号,将被编码为 UTF-16 代理对,即使用两个 `\u` 串行。""">>
另请参阅 [[stringify Operator]]。
<<.operator-examples "jsonstringify">>
<<.operator-example 1 """[[标题带有 "双引号" 和引号 ' 和 \反斜线]] +[jsonstringify[]]""">>
<<.operator-example 2 """[[重音字符和表情符号 -> äñøßπ ⌛🎄🍪🍓 without suffix]] +[jsonstringify[]]""">>
<<.operator-example 3 """[[重音字符和表情符号 -> äñøßπ ⌛🎄🍪🍓 with rawunicode suffix]] +[jsonstringify:rawunicode[]]""">>
<<.def jsontiddler>> [[宏|Macros]] 以 [[JSON|JavaScript Object Notation]] 形式传回单一条目的字段。
!! 参数
;title
: 一个条目的名称
JSON 条目为一其 `text` 字段包含 [[JSON|JavaScript Object Notation]] 结构的[[数据条目|DataTiddlers]]。
其[[内容类型|ContentType]]为 `application/json`.
[[历史列表|$:/HistoryList]]是 JSON 条目一个很好的例子。
<<.def jsontiddlers>> [[宏|Macros]]返回一些 [[JSON|JavaScript Object Notation]] 格式的[[甄选条目|Title Selection]]的字段
于[[导出 JSON 的模板条目|$:/core/templates/exporters/JsonFile]]可以看到一个示例。
!! 参数
;filter
: 一个选择要包括哪些条目的[[筛选器|Filters]]
;spaces
: 用于格式化 JSON 的可选空格数。默认值为 4,为空或零,导致以没有格式空格打包 JSON
此插件提供用于浏览器中创建 Zip 文件的原函数,并使 [[JSZip|https://stuk.github.io/jszip/]] 程序库可供其他插件使用。
这个插件增加了显示以 ~LaTeX 语法写的数学符号的功能。
请参阅演示于 https://tiddlywiki.com/plugins/tiddlywiki/katex
\define key-test() $:/key-test
\import [[Keyboard Codes (Macros)]]
\define keys()
backspace tab clear return enter pause escape space
page_up page_down end home printscreen insert delete
left up right down results in: ArrowLeft ArrowUp ArrowRight ArrowDown
0 1 2 3
shift+0 shift+1 shift+2 shift+3 results in: = ! " with modifierKey: shift
ctrl+0 ctrl+1 ctrl+2 ctrl+3
alt+0 alt+1 alt+2 alt+3
ctrl+alt+0 ctrl+alt+1 ctrl+alt+2 ctrl+alt+3
alt+shift+0 alt+shift+1 alt+shift+2 alt+shift+3
ctrl+shift+0 ctrl+shift+1 ctrl+shift+2 ctrl+shift+3 INFO: ctrl-shift-0 is eaten by windows!!
ctrl+alt+shift+0 ctrl+alt+shift+1 ctrl+alt+shift+2 ctrl+alt+shift+3
a s d
shift+a shift+s shift+d
ctrl+a ctrl+s ctrl+d
alt+a alt+s alt+d
ctrl+shift+a ctrl+shift+s ctrl+shift+d
alt+shift+a alt+shift+s alt+shift+d
ctrl+alt+a ctrl+alt+s ctrl+alt+d
ctrl+alt+shift+a ctrl+alt+shift+s ctrl+alt+shift+d
numpad0 numpad1 numpad2 numpad3
multiply add separator subtract decimal divide
f1 f2 f3
semicolon equals comma dash period slash backquote openbracket backslash closebracket quote
\end
! 按键代码
{{$:/key-test/action}}
! 输入区域
根据您的操作系统和浏览器键盘设置,某些组合可能被操作系统或浏览器 "吃掉" !
--> <$keyboard key={{{ [enlist<keys>join[ ]] }}} actions=<<actionKey>> >
<$edit-text tiddler=<<key-test>> placeholder="- 点击这里。从下面的列表中尝试按键 -" tag=input focus />
</$keyboard> <--
!! 使用的按键
<pre><code><$vars tv-wikilinks="no"><<keys>></$vars></code></pre>
所有可能的按键都可在[[键盘代码|Keyboard Codes]]找到
! 示例代码
<<showCode>>
\define key-test() $:/key-test
\import [[Keyboard Codes (Macros)]]
\define keys()
1 2 3
shift+1 shift+2 shift+3
a s d
f1 f2 f3
\end
! 按键代码
{{$:/key-test/action}}
! 输入区域
根据您的操作系统和浏览器键盘设置,某些组合可能被操作系统或浏览器 "吃掉" !
--> <$keyboard key={{{ [enlist<keys>join[ ]] }}} actions=<<actionKey>> >
<$edit-text tiddler=<<key-test>> placeholder="- 点击这里尝试按键 -" tag=input />
</$keyboard> <--
!! 测试的按键
<$list filter="[enlist<keys>]"><kbd><<currentTiddler>></kbd>, </$list>
-----
所有可能的按键都可在[[键盘代码|Keyboard Codes]]找到
可于[[按键代码 (示例 1)|Key Codes (Example 1)]]找到更高级的示例
! 代码
<<showCode>>
! KeyboardWidget 已知的所有按键代码
<kbd>cancel</kbd>, <kbd>help</kbd>, <kbd>backspace</kbd>, <kbd>tab</kbd>, <kbd>clear</kbd>, <kbd>return</kbd>, <kbd>enter</kbd>, <kbd>pause</kbd>, <kbd>escape</kbd>, <kbd>space</kbd>,
<kbd>page_up</kbd>, <kbd>page_down</kbd>, <kbd>end</kbd>, <kbd>home</kbd>, <kbd>left</kbd>, <kbd>up</kbd>, <kbd>right</kbd>, <kbd>down</kbd>, <kbd>printscreen</kbd>, <kbd>insert</kbd>, <kbd>delete</kbd>
<kbd>0</kbd>, <kbd>1</kbd>, <kbd>2</kbd>, <kbd>3</kbd>, <kbd>4</kbd>, <kbd>5</kbd>, <kbd>6</kbd>, <kbd>7</kbd>, <kbd>8</kbd>, <kbd>9</kbd>
<kbd>a</kbd>, <kbd>b</kbd>, <kbd>c</kbd>, <kbd>d</kbd>, <kbd>e</kbd>, <kbd>f</kbd>, <kbd>g</kbd>, <kbd>h</kbd>, <kbd>i</kbd>, <kbd>j</kbd>, <kbd>k</kbd>, <kbd>l</kbd>, <kbd>m</kbd>, <kbd>n</kbd>, <kbd>o</kbd>, <kbd>p</kbd>, <kbd>q</kbd>, <kbd>r</kbd>, <kbd>s</kbd>, <kbd>t</kbd>, <kbd>u</kbd>, <kbd>v</kbd>, <kbd>w</kbd>, <kbd>x</kbd>, <kbd>y</kbd>, <kbd>z</kbd>
<kbd>numpad0</kbd>, <kbd>numpad1</kbd>, <kbd>numpad2</kbd>, <kbd>numpad3</kbd>, <kbd>numpad4</kbd>, <kbd>numpad5</kbd>, <kbd>numpad6</kbd>, <kbd>numpad7</kbd>, <kbd>numpad8</kbd>, <kbd>numpad9</kbd>
<kbd>multiply</kbd>, <kbd>add</kbd>, <kbd>separator</kbd>, <kbd>subtract</kbd>, <kbd>decimal</kbd>, <kbd>divide</kbd>
<kbd>f1</kbd>, <kbd>f2</kbd>, <kbd>f3</kbd>, <kbd>f4</kbd>, <kbd>f5</kbd>, <kbd>f6</kbd>, <kbd>f7</kbd>, <kbd>f8</kbd>, <kbd>f9</kbd>, <kbd>f10</kbd>, <kbd>f11</kbd>, <kbd>f12</kbd><br/>
<kbd>f13</kbd>, <kbd>f14</kbd>, <kbd>f15</kbd>, <kbd>f16</kbd>, <kbd>f17</kbd>, <kbd>f18</kbd>, <kbd>f19</kbd>, <kbd>f20</kbd>, <kbd>f21</kbd>, <kbd>f22</kbd>, <kbd>f23</kbd>, <kbd>f24</kbd>
<kbd>firefoxsemicolon</kbd>, <kbd>firefoxequals</kbd>, <kbd>firefoxminus</kbd>
<kbd>semicolon</kbd>, <kbd>equals</kbd>, <kbd>comma</kbd>, <kbd>dash</kbd>, <kbd>period</kbd>, <kbd>slash</kbd>, <kbd>backquote</kbd>, <kbd>openbracket</kbd>, <kbd>backslash</kbd>, <kbd>closebracket</kbd>, <kbd>quote</kbd>
<kbd>shift</kbd>, <kbd>ctrl</kbd>, <kbd>alt</kbd>, <kbd>meta</kbd>
! 示例
<<list-links "[tag[KeyboardWidget]prefix[Key Codes (Example]]">>
\define key-test-prefix() $:/key-test
\define codeState() $:/state/code/$(currentTiddler)$
\define getText()
<$vars tv-wikilinks="no">
* event-key: ''$(event-key)$''
* event-code: ''$(event-code)$''
* modifier: ''$(modifier)$''
</$vars>
\end
\define pinDetails()
<$action-setfield $tiddler=<<codeState>> text="open"/>
\end
\define unpinDetails()
<$action-deletetiddler $tiddler=<<codeState>> />
\end
\define toggleDetails(text)
<$list filter="[<codeState>!has[title]]" variable="ignore">
<$button class="tc-btn-invisible" actions=<<pinDetails>> >$text$ {{$:/core/images/unfold-button}}</$button>
</$list>
<$list filter="[<codeState>has[title]]" variable="ignore">
<$button class="tc-btn-invisible" actions=<<unpinDetails>> >$text$ {{$:/core/images/fold-button}}</$button>
</$list>
\end
\define actionKey()
<$action-setfield $tiddler="$:/key-test/action" text=<<getText>> />
\end
\define showCode()
''<<toggleDetails """显示/ 隐藏此条原代码""">>''
<$list filter="[<codeState>has[title]]" variable=ignore>
<pre><code><$view /></code></pre>
</$list>
\end
<pre><code><$view /></code></pre>
''快捷键描述''由[[KeyboardWidget]]和具有标签 <<tag-pill $:/tags/KeyboardShortcut>>的条目内,用于链接动作与键盘组合
一个''快捷键描述''具有以下格式:
```
ctrl+enter
ctrl+shift+alt+A
alt-shift-T
alt-Space
```
可以有多个组合键:
```
ctrl+enter alt+shift+A ctrl+alt+9 alt-Space ctrl-Backspace
```
快捷键描述有''两种方式''可用:
* 直接
** 传递属性 `key="ctrl-enter"` 到 KeyboardWidget
** 设置 `ctrl-enter` 为具有标签 <<tag-pill $:/tags/KeyboardShortcut>> 的条目的 `key` ''字段''''值''
* 一个''参考''至配置条目
** 一个快捷键''配置条目'',遵循一些命名规则:
*** 条目名称以 `$:/config/`开头
*** 然后是字符串''''或''平台描述''之一:
**** <<.tid shortcuts-linux>>
**** <<.tid shortcuts-not-linux>>
**** <<.tid shortcuts-mac>>
**** <<.tid shortcuts-not-mac>>
**** <<.tid shortcuts-windows>>
**** <<.tid shortcuts-not-windows>>
*** 条目名称以 `/` 结尾,其后为一个尾码,可以自由选择
**** 此尾码是''快捷键描述'' (A) 的''识别码''
** 该''参考''至配置条目,是由 `((` + ''识别码'' (A) + `))` 组成
*** 示例:`((my-shortcut))` 为该''参考''至配置条目
**** <<.tid $:/config/shortcuts/my-shortcut>>
**** <<.tid $:/config/shortcuts-linux/my-shortcut>>
**** <<.tid $:/config/shortcuts-not-linux/my-shortcut>>
**** <<.tid $:/config/shortcuts-mac/my-shortcut>>
**** <<.tid $:/config/shortcuts-not-mac/my-shortcut>>
**** <<.tid $:/config/shortcuts-windows/my-shortcut>>
**** <<.tid $:/config/shortcuts-not-windows/my-shortcut>>
** 最后,参考的配置条目将快捷键描述存放在其 ''text'' 字段中
一个''快捷键条目''是由三个部分组成:
* ''标签'' <<tag-pill $:/tags/KeyboardShortcut>>
* ''字段'' `key` 以一个[[快捷键描述|Keyboard Shortcut Descriptor]]为其''值''
* ''text'' 字段中的动作
若该[[快捷键描述|Keyboard Shortcut Descriptor]] 格式为 `((my-shortcut))`, 则是''参考''到存放相应的[[快捷键|KeyboardShortcuts]]的''配置条目''
为了使''快捷键''可编辑,通过在[[控制台|$:/ControlPanel]]中的 <<.controlpanel-tab KeyboardShortcuts>> 页签,只需创建一个 `$:/config/ShortcutInfo/my-shortcut`, 其中''尾码''为用于[[快捷键|KeyboardShortcuts]]的''参考''
<<.def keyboard-driven-input>> [[宏|Macros]] 生成一个输入字段或文本区域,让您使用 <kbd><<displayshortcuts ((input-up))>></kbd> 和 <kbd><<displayshortcuts ((input-down))>></kbd> 键,在给定的项目列表中循环选择。这样做,将选定一个项目,并可以使用进一步操作进行处理
!! 参数
要创建输入字段或文本区域, <<.def keyboard-driven-input>> [[宏|Macros]] 接受 EditTextWidget 的所有参数
其他参数包括:
|参数 |目的 |h
|storeTitle |存放用户输入的条目名称 |
|selectionStateTitle |使用 -primaryList 或 -secondaryList 后置字符串,存放所选项目的条目名称,使其唯一 |
|inputAcceptActions |用户点击 <kbd><<displayshortcuts ((input-accept))>></kbd> 时,处理的操作 |
|inputAcceptVariantActions |用户点击 <kbd><<displayshortcuts ((input-accept-variant))>></kbd> 时,处理的操作 |
|inputCancelActions |用户点击 <kbd><<displayshortcuts ((input-cancel))>></kbd> 时,处理的操作 |
|configTiddlerFilter |一个 ''筛选器'' 指定条目将第一个项目存放在其 <<.field first-search-filter>> 字段,并将第二个项目筛选器存放在其 <<.field second-search-filter>> 字段 |
|firstSearchFilterField |存放第一个搜索筛选器的配置条目的字段。默认值为 <<.field first-search-filter>> |
|secondSearchFilterField |存放第二个搜索筛选器的配置条目的字段。默认值为 <<.field second-search-filter>> |
|filterMinLength |筛选项目之后,用户输入的最小长度 |
有关使用此宏的进一步指导,请参阅[[演示:keyboard-driven-input 宏|Demonstration: keyboard-driven-input Macro]]。
快捷键可与 <<.wlink KeyboardWidget>> 小工具一起使用,也可以与[[快捷键条目|Keyboard Shortcut Tiddler]]一起使用
<<.tip """<$macrocall $name=".wlink" to="KeyboardWidget"/> 小工具使快捷键可用于 `input` 或 `textarea` 字段内。
<br />
通过[[快捷键条目|Keyboard Shortcut Tiddler]]定义的快捷键,可以用于全域。""">>
快捷键可用于一般编辑操作︰
* 确认正在编辑中的草稿条目的变更 (默认为 <kbd>Ctrl</kbd>+<kbd>Enter</kbd> )
* 放弃正在编辑中的草稿条目的变更 (默认为 <kbd>Esc</kbd> )
* 自条目编辑工具栏的格式化操作 (见提示)
<<.from-version 5.1.18>>:新的''全局''键盘快捷键:
|!动作 |!默认快捷键 |
|创建一个新条目 |<kbd>Alt</kbd>+<kbd>N</kbd> |
|创建一个新日志 |<kbd>Alt</kbd>+<kbd>J</kbd> |
|创建一个新图像 |<kbd>Alt</kbd>+<kbd>I</kbd> |
|定位到侧边栏搜索 |<<.from-version 5.1.20>><kbd>ctrl-shift-F</kbd> |
|切换侧边栏 |<<.from-version 5.1.20>><kbd>shift-alt-S</kbd> |
|高级搜索 |<<.from-version 5.1.20>><kbd>ctrl-shift-A</kbd> |
当前的快捷键可于 <<.icon $:/core/images/options-button>> [[控制台|$:/ControlPanel]]的''快捷键''页签中进行检查和自定义。
!! 特殊键
; 在编辑器中添加标签
: <<.from-version 5.1.14>>:如果您在新标签输入中按下 <kbd>Enter</kbd>,该标签将被添加
! 简介
键盘小工具允许 ActionWidgets 由特定的复合键来触发。也是由 `message` 和 `param` 属性生成[[小工具消息|Messages]]的速记形式。
! 内容与属性
`<$keyboard>` 小工具的内容正常呈现。键盘快捷键只当聚焦于内容时生效。
|!属性 |!说明 |
|actions |一个包含 ActionWidgets 的字符串,其 ActionWidgets 于侦测到按键组合时被触发<br><<.from-version "5.2.0">> 变量:''event-key''、''event-code'' 和 ''modifier'' 可用于操作 |
|message |欲生成的[[小工具消息|Messages]]的名称 |
|param |与[[小工具消息|Messages]]传递的参数 |
|key |识别按键的按键字符串 (见下文) |
|class |被指定到生成的 HTML DIV 元素的 CSS 类别 |
|tag|<<.from-version "5.1.14">> 小工具创建捕获键盘事件的 html 元素,默认为︰<br>» `span` 解析于内联模式时<br>» `div` 解析于区块模式时|
! 变量
<<.from-version "5.2.0">> 以下变量可供操作:
|column-1-20 |k
|!变量 |!描述 |
|`event-key` |<<.var event-key>> 变量包含该字符,如果可能的话。例如:`1`。您可以尝试某些设置于:[[按键代码 (示例)|Key Codes (Example)]] |
|`event-code` |<<.var event-code>> 变量包含一个字符,例如:`Digit1` 代替 `1`。或 `Space` 代替一个空字符串 ` `,这很难理解 |
|`modifier` |[[组合变量|modifier Variable]]包含在事件期间按住的组合键 (可以是 <kbd>normal</kbd>、<kbd>Ctrl</kbd>、<kbd>Shift</kbd>、<kbd>Alt</kbd> 或其组合) |
! 按键字符串
组成按键字符串的一个或多个以空格隔开的按键符。每个按键符是零个或多个组合键 <kbd>Alt</kbd>、<kbd>Shift</kbd>、<kbd>Ctrl</kbd> 或 <kbd>meta</kbd> 接着按键名称,都以 "+" 加号或 "-" 减号连接。按键名称是如打印于按键上的字母或数字(如 "a" 或 "1"),或一个特殊键 <kbd>←</kbd>、<kbd>Tab</kbd>、<kbd>Enter</kbd> 或 <kbd>Esc</kbd>。
<$railroad text="""
[: {
("alt" | "shift" | "ctrl" |: "meta" ) +("+" | "-")
}
"+"
]
( "<a-z,0-9>" | "backspace" |: "tab" | "enter" | "escape" )
"""/>
例如:
<kbd>A</kbd><br />
<kbd>Shift</kbd>+<kbd>A</kbd><br />
<kbd>Shift</kbd>+<kbd>Esc</kbd><br />
<kbd>Ctrl</kbd>+<kbd>Enter</kbd><br />
<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Alt</kbd>+<kbd>A</kbd><br />
! 更多信息
<<list-links "[tag[KeyboardWidget]]">>
//[[工作管理示例|TaskManagementExample]]的样品任务//
亲属操作符的目的,并举例如下:
* 查找相关标签,任何深度的相关条目
* 找出基础条目来源,以及源自于此的其他元素
* 寻找家庭成员的祖先和继承者
* 在树状结构中找到基础条目分支的 "叶子"(其中基础条目是叶子)
* 查找数学集合的超级和子集/群 (其中基础条目是一集合)
{{!!url}}
此程序库包含非常有用的插件,在名称 [[Kookma|https://github.com/kookma]] 之下开发的 Tiddlywiki 5 插件。
{{!!url}}
它分为两个部分
插件库引入了一个非常简单的机制,类似 ~Tiddlywiki 官方插件库,可以在已发布的插件中进行选择,并安装任意数量的所需插件。
티들리위키 한국어 번역은 다음에서 사용할 수 있습니다:
<!--* ''설명문서'' : https://tiddlywiki.com/languages/ko-KR/index.html-->
* ''빈 위키'' : https://tiddlywiki.com/languages/ko-KR/empty.html
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="810" height="540">
<rect width="810" height="540" fill="#FCDD09"/>
<path stroke="#DA121A" stroke-width="60" d="M0,90H810m0,120H0m0,120H810m0,120H0"/>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="900" height="600">
<rect width="900" height="600" fill="#d7141a"/>
<rect width="900" height="300" fill="#fff"/>
<path d="M 450,300 0,0 V 600 z" fill="#11457e"/>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="370" height="280">
<rect width="370" height="280" fill="#c60c30"/>
<rect width="40" height="280" x="120" fill="#fff"/>
<rect width="370" height="40" y="120" fill="#fff"/>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="600" viewBox="0 0 9 6">
<rect fill="#ef3340" width="9" height="6"/>
<rect fill="#fff" y="2" width="9" height="2"/>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="600" viewBox="0 0 5 3">
<desc>Flag of Germany</desc>
<rect id="black_stripe" width="5" height="3" y="0" x="0" fill="#000"/>
<rect id="red_stripe" width="5" height="2" y="1" x="0" fill="#D00"/>
<rect id="gold_stripe" width="5" height="1" y="2" x="0" fill="#FFCE00"/>
</svg>
<svg width="600" height="400" viewBox="0 0 27 18" xmlns="http://www.w3.org/2000/svg">
<desc>Flag of Greece</desc>
<rect width="27" height="18" fill="#0d5eaf"/>
<path fill="none" stroke-width="2" stroke="white" d="M5,0V11 M0,5H10 M10,3H27 M10,7H27 M0,11H27 M0,15H27"/>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="500" width="750">
<rect width="750" height="500" fill="#c60b1e"/>
<rect width="750" height="250" y="125" fill="#ffc400"/>
<g id="coa" stroke="#000" stroke-width="0.39">
<g id="supporters">
<g id="crown_left" stroke-width="0.26">
<path fill="#ad1519" stroke-linejoin="round" d="m167.99 222.24s-0.51 0-0.79-0.16-1.13-0.96-1.13-0.96l-0.68-0.49-0.62-0.85s-0.73-1.18-0.4-2.09c0.34-0.91 0.91-1.23 1.42-1.5 0.51-0.26 1.58-0.59 1.58-0.59s0.85-0.37 1.13-0.42c0.28-0.06 1.3-0.32 1.3-0.32s0.28-0.16 0.56-0.27c0.29-0.11 0.68-0.11 0.91-0.16 0.22-0.06 0.79-0.24 1.13-0.26 0.52-0.02 1.36 0.1 1.64 0.1s1.24 0.05 1.64 0.05c0.39 0 1.8-0.11 2.2-0.11 0.39 0 0.68-0.05 1.13 0 0.45 0.06 1.24 0.32 1.47 0.43s1.58 0.59 2.09 0.75 1.75 0.37 2.32 0.64c0.56 0.27 0.91 0.72 1.19 1.1 0.28 0.37 0.34 0.78 0.45 1.05 0.11 0.26 0.11 0.84 0 1.11-0.11 0.26-0.51 0.81-0.51 0.81l-0.62 1.02-0.79 0.64s-0.57 0.54-1.02 0.48c-0.45-0.04-5.03-0.86-7.97-0.86s-7.64 0.86-7.64 0.86h0.01z"/>
<g fill="#c8b100">
<ellipse cx="175.66" cy="215.68" rx="1.38" ry="2.5"/>
<ellipse cx="175.68" cy="215.68" rx="0.64" ry="2.3"/>
<ellipse stroke="none" cx="175.68" cy="213.04" rx="0.93" ry="0.87"/>
<path stroke-width="0.3" d="m176.96 212.74v0.58h-2.53v-0.58h0.94v-1.32h-0.62v-0.57h0.62v-0.57h0.6v0.57h0.62v0.57h-0.62v1.32h0.99"/>
<path fill="none" d="m175.94,212.2a0.93,0.87 0 1,1 -0.5,0"/>
<path d="m175.68 222.08h-4.81l-0.11-1.18-0.23-1.23-0.23-1.53c-1.33-1.75-2.55-2.9-2.96-2.65 0.1-0.32 0.22-0.56 0.47-0.71 1.18-0.7 3.61 0.98 5.44 3.74 0.16 0.25 0.32 0.5 0.46 0.75h3.97c0.14-0.25 0.3-0.5 0.46-0.75 1.82-2.76 4.26-4.44 5.43-3.74 0.26 0.15 0.37 0.39 0.47 0.71-0.41-0.24-1.62 0.9-2.96 2.65l-0.23 1.53-0.23 1.23-0.1 1.18h-4.84z"/>
<path fill="none" d="m167.55 215.44c0.91-0.53 3.02 1.14 4.73 3.74m11.55-3.74c-0.91-0.53-3.01 1.14-4.73 3.74"/>
</g>
<g id="crown_pt1" fill="#c8b100">
<path d="m168.58 224.25c-0.2-0.57-0.58-1.08-0.58-1.08 1.95-0.57 4.66-0.93 7.67-0.94 3.01 0.01 5.75 0.37 7.69 0.94 0 0-0.22 0.38-0.52 0.91-0.17 0.3-0.39 0.81-0.38 0.81-1.75-0.54-4.02-0.81-6.8-0.82-2.79 0.01-5.46 0.35-6.86 0.86 0.02 0-0.1-0.32-0.23-0.68h0.01"/>
<path d="m175.67 226.73c2.43-0.01 5.11-0.38 6.1-0.63 0.66-0.2 1.05-0.49 0.98-0.84-0.04-0.16-0.18-0.3-0.37-0.38-1.46-0.47-4.07-0.8-6.71-0.8-2.63 0-5.27 0.33-6.72 0.8-0.19 0.08-0.33 0.22-0.37 0.38-0.07 0.35 0.32 0.64 0.98 0.84 0.99 0.25 3.68 0.62 6.11 0.63z"/>
<path d="m183.48 222.08l-0.59-0.53s-0.57 0.34-1.28 0.24c-0.7-0.11-0.93-0.97-0.93-0.97s-0.79 0.67-1.44 0.62c-0.65-0.06-1.07-0.62-1.07-0.62s-0.71 0.51-1.33 0.46c-0.62-0.06-1.21-0.83-1.21-0.83s-0.63 0.8-1.25 0.86c-0.62 0.05-1.13-0.54-1.13-0.54s-0.28 0.59-1.07 0.72-1.47-0.62-1.47-0.62-0.45 0.73-0.99 0.92c-0.54 0.18-1.24-0.27-1.24-0.27s-0.12 0.27-0.2 0.43-0.31 0.19-0.31 0.19l0.18 0.47c1.93-0.56 4.56-0.91 7.53-0.91s5.67 0.35 7.61 0.92l0.2-0.54h-0.01z"/>
<path d="m175.69 219.49l0.28 0.05c-0.05 0.12-0.06 0.24-0.06 0.38 0 0.58 0.5 1.05 1.12 1.05 0.49 0 0.91-0.31 1.06-0.73 0.01 0.01 0.11-0.38 0.15-0.38 0.03 0 0.03 0.41 0.05 0.41 0.07 0.53 0.55 0.89 1.1 0.89 0.62 0 1.11-0.47 1.11-1.06 0-0.04 0-0.08-0.01-0.12l0.35-0.35 0.19 0.44c-0.07 0.14-0.1 0.29-0.1 0.46 0 0.56 0.47 1.01 1.06 1.01 0.37 0 0.69-0.18 0.88-0.45l0.23-0.29v0.36c0 0.34 0.14 0.66 0.49 0.71 0 0 0.38 0.03 0.91-0.38 0.52-0.41 0.8-0.75 0.8-0.75l0.03 0.42s-0.51 0.84-0.97 1.1c-0.25 0.15-0.64 0.31-0.95 0.25-0.32-0.05-0.55-0.31-0.67-0.61-0.23 0.14-0.51 0.22-0.8 0.22-0.63 0-1.2-0.35-1.42-0.86-0.29 0.31-0.69 0.5-1.16 0.5-0.51 0-0.97-0.23-1.26-0.58-0.28 0.27-0.67 0.43-1.09 0.43-0.55 0-1.05-0.28-1.33-0.69-0.29 0.41-0.78 0.69-1.34 0.69-0.42 0-0.81-0.16-1.09-0.43-0.29 0.35-0.75 0.58-1.25 0.58-0.48 0-0.88-0.19-1.17-0.5-0.22 0.51-0.79 0.86-1.42 0.86-0.29 0-0.56-0.08-0.79-0.22-0.12 0.3-0.35 0.56-0.68 0.61-0.3 0.06-0.69-0.1-0.94-0.25-0.47-0.26-1.02-1.1-1.02-1.1l0.07-0.42s0.29 0.34 0.81 0.75 0.91 0.38 0.91 0.38c0.34-0.05 0.49-0.37 0.49-0.71v-0.36l0.22 0.29c0.19 0.27 0.51 0.45 0.88 0.45 0.59 0 1.06-0.45 1.06-1.01 0-0.17-0.02-0.32-0.1-0.46l0.19-0.44 0.35 0.35c-0.01 0.04-0.01 0.08-0.01 0.12 0 0.59 0.49 1.06 1.11 1.06 0.55 0 1.03-0.36 1.11-0.89 0.01 0 0.01-0.41 0.04-0.41 0.05 0 0.14 0.39 0.16 0.38 0.14 0.42 0.56 0.73 1.06 0.73 0.61 0 1.11-0.47 1.11-1.05 0-0.14 0-0.26-0.05-0.38l0.29-0.05h0.01z"/>
<path stroke-linejoin="round" d="m175.67 222.23c-3.01 0.01-5.72 0.37-7.67 0.94-0.13 0.04-0.29-0.06-0.33-0.17-0.04-0.13 0.05-0.28 0.18-0.32 1.95-0.6 4.73-0.98 7.82-0.98s5.88 0.38 7.83 0.98c0.13 0.04 0.22 0.19 0.18 0.32-0.04 0.11-0.2 0.21-0.33 0.17-1.95-0.57-4.67-0.93-7.68-0.94z"/>
<path d="m165.43 221c-0.01 0.01-0.38-0.48-0.65-0.73-0.2-0.18-0.68-0.33-0.68-0.33 0-0.08 0.28-0.28 0.58-0.28 0.18 0 0.35 0.07 0.45 0.2l0.04-0.2s0.24 0.05 0.35 0.32c0.12 0.29 0.05 0.72 0.05 0.72s-0.05 0.2-0.14 0.3z"/>
<path d="m167.32 220.22l-0.11 0.66-1.4 0.15-0.21-0.12 0.04-0.23 1.06-0.87 0.62 0.41"/>
<path d="m165.45 220.75c0.12-0.12 0.36-0.09 0.53 0.06 0.18 0.15 0.24 0.38 0.12 0.5-0.12 0.13-0.36 0.1-0.53-0.06-0.18-0.15-0.24-0.38-0.12-0.5z"/>
<path d="m168.02 220.88c-0.06-0.18 0-0.37 0.13-0.42 0.14-0.03 0.3 0.09 0.37 0.27 0.06 0.19 0 0.38-0.14 0.42-0.13 0.04-0.29-0.08-0.36-0.27z"/>
<path d="m168.67 220.04l0.51 0.48 1.22-0.66 0.09-0.21-0.17-0.17-1.4-0.12-0.25 0.68"/>
<path d="m170.08 217.76l-0.67 0.64 0.86 1.14 0.23 0.09 0.17-0.18 0.3-1.37-0.89-0.32"/>
<path d="m172.36 219.3l-0.26 0.63-1.4-0.13-0.18-0.16 0.1-0.22 1.22-0.64 0.52 0.52"/>
<ellipse cx="170.51" cy="219.65" rx="0.49" ry="0.47"/>
<path d="m172.87 219.95c-0.03-0.2 0.07-0.37 0.21-0.39s0.28 0.13 0.3 0.33c0.03 0.19-0.07 0.37-0.21 0.38-0.14 0.02-0.28-0.13-0.3-0.32z"/>
<path d="m173.78 219.24l0.4 0.57 1.34-0.42 0.14-0.18-0.15-0.2-1.33-0.39-0.4 0.62"/>
<path d="m175.66 217.15l-0.86 0.52 0.64 1.38 0.22 0.14 0.22-0.14 0.64-1.38-0.86-0.52"/>
<path d="m177.55 219.24l-0.39 0.57-1.34-0.42-0.14-0.18 0.14-0.2 1.34-0.39 0.39 0.62"/>
<ellipse cx="175.67" cy="219.21" rx="0.49" ry="0.47"/>
<path d="m178.5 219.95c0.02-0.2-0.08-0.37-0.22-0.39s-0.28 0.13-0.3 0.33c-0.02 0.19 0.07 0.37 0.21 0.38 0.14 0.02 0.28-0.13 0.31-0.32z"/>
<path d="m178.99 219.3l0.26 0.63 1.4-0.13 0.18-0.16-0.1-0.22-1.22-0.64-0.52 0.52"/>
<path d="m181.27 217.76l0.67 0.64-0.86 1.14-0.23 0.09-0.17-0.18-0.3-1.37 0.89-0.32"/>
<path d="m182.68 220.04l-0.51 0.48-1.22-0.66-0.1-0.21 0.19-0.17 1.4-0.12 0.24 0.68"/>
<ellipse cx="180.85" cy="219.65" rx="0.49" ry="0.47"/>
<path d="m183.34 220.88c0.06-0.18 0-0.37-0.13-0.42-0.14-0.03-0.3 0.09-0.37 0.27-0.06 0.19 0 0.38 0.14 0.42 0.13 0.04 0.29-0.08 0.36-0.27z"/>
<path d="m185.73 221c0.01 0.01 0.38-0.48 0.66-0.73 0.19-0.18 0.67-0.33 0.67-0.33 0-0.08-0.28-0.28-0.58-0.28-0.18 0-0.35 0.07-0.45 0.2l-0.04-0.2s-0.24 0.05-0.36 0.32c-0.11 0.29-0.03 0.72-0.03 0.72s0.04 0.2 0.13 0.3z"/>
<path d="m183.84 220.22l0.11 0.66 1.4 0.15 0.21-0.12-0.05-0.23-1.05-0.87-0.62 0.41"/>
<path d="m185.74 220.75c-0.11-0.12-0.35-0.09-0.53 0.06s-0.24 0.38-0.12 0.5c0.12 0.13 0.36 0.1 0.54-0.06 0.18-0.15 0.23-0.38 0.11-0.5z"/>
</g>
<g id="crown_pt2" fill="none">
<path fill="#ad1519" d="m168.05 224.3l0.31-0.5 0.65 0.13-0.38 0.56-0.58-0.19"/>
<path fill="#058e6e" d="m170.85 223.81l-0.69 0.11c-0.18 0.02-0.35-0.09-0.38-0.26-0.02-0.17 0.1-0.32 0.27-0.35l0.7-0.1 0.71-0.11c0.18-0.02 0.34 0.09 0.37 0.25 0.02 0.17-0.1 0.33-0.27 0.35l-0.71 0.11"/>
<ellipse fill="#fff" cx="173.19" cy="223.3" rx="0.44" ry="0.41"/>
<path fill="#ad1519" d="m175.7 223.48h-0.96c-0.18 0-0.33-0.14-0.33-0.31s0.14-0.31 0.32-0.31h1.96c0.19 0 0.33 0.14 0.33 0.31s-0.15 0.31-0.33 0.31h-0.99"/>
<ellipse fill="#fff" cx="178.16" cy="223.3" rx="0.44" ry="0.41"/>
<path fill="#058e6e" d="m180.5 223.81l0.69 0.11c0.18 0.02 0.35-0.09 0.38-0.26 0.02-0.17-0.09-0.32-0.27-0.35l-0.7-0.1-0.71-0.11c-0.18-0.02-0.35 0.09-0.37 0.25-0.03 0.17 0.09 0.33 0.27 0.35l0.71 0.11"/>
<path fill="#ad1519" d="m183.24 224.33l-0.25-0.53-0.67 0.06 0.32 0.59 0.6-0.12"/>
<path fill="#ad1519" stroke-linejoin="round" d="m175.66 226.16c-2.43 0-4.63-0.22-6.3-0.65 1.67-0.43 3.87-0.69 6.3-0.7 2.44 0 4.65 0.27 6.33 0.7-1.68 0.43-3.89 0.65-6.33 0.65z"/>
<path stroke-width="0.01" d="m176.8 226.08v-1.16m-0.58 1.2l0.01-1.23m-0.43 1.25v-1.26"/>
<path stroke-width="0.02" d="m175.44 226.15v-1.27"/>
<path stroke-width="0.03" d="m175.09 226.15v-1.27"/>
<path stroke-width="0.04" d="m174.77 226.15v-1.27"/>
<path stroke-width="0.04" d="m174.44 226.15v-1.27"/>
<path stroke-width="0.05" d="m174.16 226.15v-1.27"/>
<path stroke-width="0.06" d="m173.61 226.08l-0.01-1.15m0.27 1.17v-1.21"/>
<path stroke-width="0.07" d="m173.1 226.03v-1.06m0.26 1.09l-0.01-1.13"/>
<path stroke-width="0.08" d="m172.42 225.97v-0.93m0.23 0.94v-0.98m0.23 1.02v-1.02"/>
<path stroke-width="0.09" d="m172.19 225.96v-0.9"/>
<path stroke-width="0.1" d="m171.97 225.92v-0.85"/>
<path stroke-width="0.11" d="m171.73 225.89v-0.78"/>
<path stroke-width="0.12" d="m171.24 225.82l-0.01-0.62m0.26 0.66v-0.7"/>
<path stroke-width="0.12" d="m170.99 225.77v-0.55"/>
<path stroke-width="0.13" d="m170.76 225.73v-0.46"/>
<path stroke-width="0.14" d="m170.51 225.67v-0.36"/>
<path stroke-width="0.15" d="m170.26 225.64v-0.27"/>
<path stroke-width="0.18" d="m169.99 225.58v-0.13"/>
</g>
</g>
<g id="pillar_left">
<g fill="#005bbf">
<path d="m191.28 330.68c-1.54 0-2.91-0.33-3.93-0.87-1-0.51-2.36-0.82-3.86-0.82-1.51 0-2.9 0.32-3.91 0.83-1.01 0.53-2.4 0.86-3.92 0.86-1.54 0-2.92-0.36-3.93-0.9-1-0.49-2.33-0.79-3.79-0.79-1.52 0-2.86 0.29-3.86 0.81-1.02 0.54-2.42 0.88-3.95 0.88v2.41c1.53 0 2.93-0.35 3.95-0.88 1-0.52 2.34-0.82 3.86-0.82 1.45 0 2.79 0.31 3.79 0.8 1.01 0.53 2.39 0.9 3.93 0.9 1.52 0 2.91-0.33 3.92-0.86 1.01-0.52 2.4-0.84 3.91-0.84 1.5 0 2.86 0.32 3.86 0.83 1.02 0.54 2.37 0.87 3.91 0.87l0.02-2.41z"/>
<path fill="#ccc" d="m191.28 333.09c-1.54 0-2.91-0.33-3.93-0.87-1-0.51-2.36-0.83-3.86-0.83-1.51 0-2.9 0.32-3.91 0.84-1.01 0.53-2.4 0.86-3.92 0.86-1.54 0-2.92-0.37-3.93-0.9-1-0.49-2.33-0.8-3.79-0.8-1.52 0-2.86 0.3-3.86 0.82-1.02 0.53-2.42 0.88-3.95 0.88v2.41c1.53 0 2.93-0.35 3.95-0.88 1-0.52 2.34-0.82 3.86-0.82 1.45 0 2.79 0.31 3.79 0.8 1.01 0.54 2.39 0.9 3.93 0.9 1.52 0 2.91-0.34 3.92-0.86s2.4-0.84 3.91-0.84c1.5 0 2.86 0.32 3.86 0.84 1.02 0.53 2.37 0.86 3.91 0.86l0.02-2.41"/>
<path d="m191.28 335.5c-1.54 0-2.91-0.33-3.93-0.86-1-0.52-2.36-0.84-3.86-0.84-1.51 0-2.9 0.32-3.91 0.84s-2.4 0.86-3.92 0.86c-1.54 0-2.92-0.36-3.93-0.9-1-0.49-2.33-0.8-3.79-0.8-1.52 0-2.86 0.3-3.86 0.82-1.02 0.53-2.42 0.88-3.95 0.88v2.4c1.53 0 2.93-0.34 3.95-0.88 1-0.51 2.34-0.8 3.86-0.8 1.45 0 2.79 0.3 3.79 0.79 1.01 0.54 2.39 0.89 3.93 0.89 1.52 0 2.91-0.32 3.92-0.85 1.01-0.52 2.4-0.83 3.91-0.83 1.5 0 2.86 0.31 3.86 0.82 1.02 0.55 2.37 0.86 3.91 0.86l0.02-2.4"/>
<path fill="#ccc" d="m191.26 340.32c-1.54 0-2.89-0.33-3.91-0.87-1-0.51-2.36-0.82-3.86-0.82-1.51 0-2.9 0.31-3.91 0.83s-2.4 0.86-3.92 0.86c-1.54 0-2.92-0.37-3.93-0.9-1-0.5-2.33-0.79-3.79-0.79-1.52 0-2.86 0.29-3.86 0.81-1.02 0.53-2.42 0.88-3.95 0.88v-2.4c1.53 0 2.93-0.36 3.95-0.9 1-0.51 2.34-0.8 3.86-0.8 1.45 0 2.79 0.3 3.79 0.79 1.01 0.54 2.39 0.89 3.93 0.89 1.52 0 2.91-0.32 3.92-0.85 1.01-0.52 2.4-0.83 3.91-0.83 1.5 0 2.86 0.31 3.86 0.82 1.02 0.55 2.39 0.86 3.93 0.86l-0.02 2.42"/>
<path d="m191.26 342.73c-1.54 0-2.89-0.33-3.91-0.86-1-0.52-2.36-0.84-3.86-0.84-1.51 0-2.9 0.32-3.91 0.84s-2.4 0.86-3.92 0.86c-1.54 0-2.92-0.37-3.93-0.9-1-0.5-2.33-0.8-3.79-0.8-1.52 0-2.86 0.3-3.86 0.82-1.02 0.53-2.42 0.88-3.95 0.88v-2.39c1.53 0 2.93-0.37 3.95-0.9 1-0.52 2.34-0.81 3.86-0.81 1.45 0 2.79 0.3 3.79 0.79 1.01 0.53 2.39 0.9 3.93 0.9 1.52 0 2.91-0.34 3.92-0.86s2.4-0.83 3.91-0.83c1.5 0 2.86 0.31 3.86 0.82 1.02 0.54 2.38 0.87 3.93 0.87l-0.02 2.41z"/>
</g>
<g fill="#c8b100">
<path stroke-linejoin="round" d="m166.92 320.78c0.05 0.21 0.13 0.4 0.13 0.62 0 1.46-1.27 2.63-2.81 2.63h22.94c-1.55 0-2.81-1.17-2.81-2.63 0-0.21 0.04-0.41 0.09-0.62-0.13 0.05-0.29 0.06-0.44 0.06h-16.69c-0.13 0-0.29-0.02-0.41-0.06z"/>
<path d="m167.33 319.27h16.69c0.57 0 1.02 0.35 1.02 0.78s-0.45 0.79-1.02 0.79h-16.69c-0.56 0-1.02-0.36-1.02-0.79s0.46-0.78 1.02-0.78z"/>
<path d="m164.27 329.86h22.87v-5.83h-22.87v5.83z"/>
</g>
<path fill="#ccc" d="m167.55 318.32h16.25v-79.63h-16.25v79.63z"/>
<path fill="none" d="m179.13 238.8v79.46m1.83-79.46v79.46"/>
<g fill="#c8b100">
<path d="m164.58 232.37h22.29v-5.84h-22.29v5.84z"/>
<path stroke-linejoin="round" d="m166.92 236.26c0.14-0.06 0.24-0.07 0.41-0.07h16.69c0.17 0 0.32 0.03 0.46 0.08-0.58-0.19-0.99-0.71-0.99-1.32s0.45-1.14 1.03-1.33c-0.14 0.04-0.33 0.08-0.49 0.08h-16.7c-0.17 0-0.33-0.01-0.47-0.06l0.09 0.02c0.6 0.18 0.94 0.71 0.94 1.29 0 0.56-0.38 1.13-0.97 1.31z"/>
<path d="m167.33 236.19h16.69c0.57 0 1.02 0.35 1.02 0.78 0 0.44-0.45 0.79-1.02 0.79h-16.69c-0.56 0-1.02-0.35-1.02-0.79 0-0.43 0.46-0.78 1.02-0.78z"/>
<path d="m167.33 232.37h16.7c0.57 0 1.03 0.3 1.03 0.66 0 0.37-0.46 0.67-1.03 0.67h-16.7c-0.56 0-1.02-0.3-1.02-0.67 0-0.36 0.46-0.66 1.02-0.66z"/>
</g>
</g>
<g id="ribbon_left" fill="#ad1519">
<path d="m162.48 298.62c-2.26 1.3-3.8 2.64-3.55 3.31 0.12 0.61 0.84 1.07 1.87 1.75 1.62 1.13 2.6 3.14 1.83 4.07 1.34-1.08 2.19-2.69 2.19-4.49 0-1.87-0.9-3.56-2.34-4.64z"/>
<path stroke-linejoin="round" d="m200.4 268.47c-3.54-1.46-9.57-2.55-16.49-2.78-2.39 0.02-5.04 0.25-7.79 0.7-9.72 1.63-17.13 5.51-16.54 8.67 0.01 0.06 0.04 0.2 0.05 0.26 0 0-3.64-8.21-3.7-8.52-0.65-3.51 7.56-7.82 18.35-9.62 3.39-0.57 6.69-0.79 9.56-0.76 6.9 0 12.9 0.89 16.52 2.23l0.04 9.82"/>
<path d="m167.52 278.47c-4.51-0.32-7.58-1.53-7.94-3.41-0.28-1.5 1.25-3.17 3.97-4.68 1.21 0.14 2.58 0.3 4 0.3l-0.03 7.79"/>
<path d="m183.83 272.38c2.82 0.43 4.93 1.13 5.98 1.99l0.1 0.17c0.5 1.03-1.97 3.22-6.11 5.67l0.03-7.83"/>
<path stroke-linejoin="round" d="m157.42 293.83c-0.43-1.28 3.97-3.86 10.18-6.14 2.84-1.01 5.18-2.07 8.09-3.35 8.63-3.82 15-8.2 14.22-9.79l-0.09-0.17c0.46 0.38 1.18 8.24 1.18 8.24 0.78 1.46-5.05 5.78-13 9.58-2.54 1.22-7.91 3.2-10.44 4.09-4.54 1.57-9.04 4.54-8.63 5.64l-1.51-8.09v-0.01z"/>
</g>
<g id="crown_right" stroke-width="0.26">
<path fill="#ad1519" stroke-width="0.27" d="m324.85 220.42s-0.74 0.78-1.28 0.89c-0.53 0.1-1.21-0.49-1.21-0.49s-0.48 0.51-1.08 0.64c-0.59 0.14-1.41-0.66-1.41-0.66s-0.57 0.8-1.07 0.99c-0.51 0.18-1.13-0.24-1.13-0.24s-0.23 0.39-0.65 0.61c-0.18 0.09-0.48-0.05-0.48-0.05l-0.6-0.38-0.68-0.72-0.62-0.24s-0.28-0.91-0.31-1.07c-0.02-0.16-0.08-0.57-0.08-0.57-0.13-0.65 0.87-1.4 2.3-1.72 0.82-0.19 1.54-0.18 2.06-0.02 0.57-0.48 1.78-0.82 3.2-0.82 1.29 0 2.42 0.27 3.04 0.7 0.61-0.43 1.74-0.7 3.03-0.7 1.42 0 2.62 0.34 3.19 0.82 0.53-0.16 1.24-0.17 2.07 0.02 1.42 0.32 2.43 1.07 2.3 1.72 0 0-0.06 0.41-0.08 0.57-0.03 0.16-0.32 1.07-0.32 1.07l-0.62 0.24-0.68 0.72-0.58 0.38s-0.3 0.14-0.48 0.05c-0.43-0.21-0.66-0.61-0.66-0.61s-0.62 0.42-1.13 0.24c-0.51-0.19-1.07-0.99-1.07-0.99s-0.82 0.8-1.42 0.66c-0.59-0.13-1.07-0.64-1.07-0.64s-0.68 0.59-1.21 0.49c-0.54-0.11-1.27-0.89-1.27-0.89z"/>
<g fill="#c8b100">
<ellipse cx="324.82" cy="216.2" rx="1.38" ry="1.96"/>
<ellipse cx="324.85" cy="216.2" rx="0.63" ry="1.81"/>
<ellipse stroke="none" cx="324.84" cy="213.95" rx="0.93" ry="0.88"/>
<path stroke-width="0.3" d="m326.13 213.64v0.58h-2.53v-0.58h0.94v-1.3h-0.62v-0.58h0.62v-0.58h0.61v0.58h0.61v0.58h-0.61v1.3h0.98"/>
<path fill="none" d="m325.11,213.12a0.93,0.88 0 1,1 -0.51,-0.01"/>
</g>
<g fill="none" stroke-width="0.21">
<path stroke-width="0.26" stroke-linecap="round" d="m314.41 219.99c-0.13-0.33-0.22-0.7-0.22-1.08 0-1.59 1.26-2.88 2.83-2.88 0.5 0 0.96 0.13 1.37 0.37"/>
<path stroke-width="0.26" d="m319.48 217.93c-0.15-0.26-0.29-0.54-0.29-0.84 0-1.15 1.19-2.08 2.64-2.08 0.62 0 1.2 0.17 1.65 0.45"/>
<path stroke-width="0.26" d="m330.17 217.96c0.15-0.26 0.25-0.57 0.25-0.87 0-1.15-1.18-2.08-2.64-2.08-0.62 0-1.19 0.17-1.64 0.45"/>
<path stroke-width="0.26" stroke-linecap="round" d="m335.21 219.99c0.13-0.33 0.21-0.7 0.21-1.08 0-1.59-1.26-2.88-2.82-2.88-0.5 0-0.97 0.13-1.38 0.37"/>
<ellipse cx="313.57" cy="218.68" rx="0.45" ry="0.43"/>
<ellipse cx="313.74" cy="217.1" rx="0.45" ry="0.43"/>
<ellipse cx="314.76" cy="215.9" rx="0.45" ry="0.43"/>
<ellipse cx="316.11" cy="215.25" rx="0.45" ry="0.43"/>
<ellipse cx="317.55" cy="215.31" rx="0.45" ry="0.43"/>
<ellipse fill="#fff" cx="318.43" cy="217.08" rx="0.45" ry="0.43"/>
<ellipse cx="318.68" cy="215.58" rx="0.45" ry="0.43"/>
<ellipse cx="319.81" cy="214.64" rx="0.45" ry="0.43"/>
<ellipse cx="321.23" cy="214.19" rx="0.45" ry="0.43"/>
<ellipse cx="322.67" cy="214.24" rx="0.45" ry="0.43"/>
<ellipse cx="326.94" cy="214.24" rx="0.45" ry="0.43"/>
<ellipse cx="328.39" cy="214.19" rx="0.45" ry="0.43"/>
<ellipse cx="329.8" cy="214.64" rx="0.45" ry="0.43"/>
<ellipse cx="330.93" cy="215.58" rx="0.45" ry="0.43"/>
<ellipse fill="#fff" cx="331.18" cy="217.08" rx="0.45" ry="0.43"/>
<ellipse cx="332.06" cy="215.31" rx="0.45" ry="0.43"/>
<ellipse cx="333.51" cy="215.25" rx="0.45" ry="0.43"/>
<ellipse cx="334.86" cy="215.9" rx="0.45" ry="0.43"/>
<ellipse cx="335.88" cy="217.1" rx="0.45" ry="0.43"/>
<ellipse cx="336.05" cy="218.68" rx="0.45" ry="0.43"/>
</g>
<use xlink:href="#crown_pt1" x="149.17"/>
<use xlink:href="#crown_pt2" x="149.17"/>
</g>
<use id="pillar_right" xlink:href="#pillar_left" x="149.17"/>
<use id="ribbon_right" xlink:href="#ribbon_left" transform="matrix(-1,0,0,1,500.57,0)"/>
<g id="plus_ultra" fill="#c8b100" stroke="none">
<path d="m166.42 264.65c1.99-0.72 3.29-1.58 2.66-3.14-0.41-1-1.43-1.19-2.97-0.63l-2.71 0.99 2.44 6.03c0.27-0.12 0.54-0.24 0.81-0.34 0.28-0.1 0.57-0.18 0.85-0.26l-1.08-2.64v-0.01zm-1.18-2.91l0.69-0.25c0.57-0.21 1.21 0.1 1.5 0.8 0.21 0.53 0.16 1.13-0.5 1.55-0.21 0.13-0.46 0.23-0.7 0.33l-0.99-2.43"/>
<path d="m172.78 259.22c-0.29 0.08-0.57 0.16-0.86 0.22-0.29 0.05-0.59 0.09-0.88 0.12l1.41 6.28 4.38-0.88c-0.05-0.12-0.12-0.26-0.14-0.38-0.03-0.14-0.03-0.28-0.04-0.41-0.77 0.22-1.61 0.46-2.61 0.66l-1.26-5.61"/>
<path d="m181.56 264.63c0.82-2.28 1.82-4.46 2.81-6.67-0.18 0.03-0.36 0.06-0.54 0.07s-0.37 0.01-0.54 0c-0.53 1.61-1.18 3.21-1.87 4.8-0.82-1.51-1.73-2.99-2.43-4.51-0.34 0.04-0.69 0.09-1.03 0.12-0.34 0.02-0.7 0.01-1.04 0.02 1.26 2.06 2.48 4.11 3.64 6.23 0.16-0.03 0.32-0.06 0.5-0.08 0.16-0.01 0.33 0.01 0.5 0.02"/>
<path d="m190.72 259.8c0.15-0.31 0.31-0.6 0.48-0.89-0.24-0.22-0.96-0.55-1.81-0.63-1.79-0.18-2.81 0.61-2.93 1.69-0.26 2.26 3.31 2.07 3.14 3.57-0.07 0.64-0.75 0.9-1.48 0.83-0.81-0.08-1.41-0.53-1.51-1.19l-0.22-0.02c-0.12 0.39-0.29 0.77-0.48 1.15 0.53 0.34 1.21 0.53 1.85 0.59 1.83 0.19 3.22-0.54 3.35-1.74 0.23-2.15-3.37-2.27-3.23-3.54 0.06-0.53 0.47-0.88 1.4-0.79 0.67 0.07 1.08 0.43 1.26 0.95l0.18 0.02"/>
<path d="m310.3 264.98c0.62-2.33 1.41-4.58 2.19-6.87-0.17 0.05-0.35 0.09-0.53 0.11-0.17 0.03-0.36 0.04-0.54 0.05-0.37 1.64-0.88 3.29-1.42 4.94-0.96-1.44-2-2.84-2.83-4.3-0.34 0.07-0.68 0.15-1.02 0.2s-0.69 0.07-1.04 0.11c1.45 1.94 2.85 3.89 4.2 5.91 0.16-0.04 0.32-0.1 0.5-0.12 0.16-0.02 0.33-0.02 0.49-0.03"/>
<path d="m316.48 258.16c-0.29 0.01-0.59 0.04-0.88 0.03-0.3 0-0.6-0.04-0.89-0.06l-0.12 6.41 4.49 0.08c-0.03-0.13-0.06-0.28-0.06-0.41s0.04-0.27 0.07-0.4c-0.81 0.05-1.68 0.1-2.71 0.08l0.1-5.73"/>
<path d="m323.52 259.21c0.72 0.06 1.41 0.19 2.1 0.31-0.01-0.13-0.03-0.27-0.02-0.41 0.01-0.13 0.06-0.26 0.1-0.39l-6.07-0.5c0.01 0.14 0.03 0.27 0.02 0.4-0.01 0.14-0.06 0.27-0.1 0.4 0.62-0.02 1.37-0.02 2.21 0.05l-0.53 5.77c0.29 0 0.59 0 0.88 0.03 0.3 0.02 0.59 0.07 0.88 0.11l0.53-5.77"/>
<path d="m326.01 265.53c0.29 0.05 0.59 0.09 0.88 0.15 0.28 0.06 0.57 0.15 0.85 0.23l0.72-2.94 0.08 0.01c0.16 0.41 0.38 0.9 0.49 1.19l0.9 2.22c0.36 0.06 0.71 0.11 1.05 0.18 0.36 0.08 0.7 0.18 1.04 0.28l-0.31-0.67c-0.48-1-0.99-2.01-1.41-3.02 1.12 0.04 1.98-0.36 2.2-1.26 0.15-0.62-0.1-1.11-0.68-1.53-0.44-0.31-1.28-0.47-1.83-0.6l-2.44-0.53-1.54 6.29m3.14-5.42c0.71 0.16 1.59 0.27 1.59 1.07-0.01 0.21-0.03 0.35-0.06 0.48-0.23 0.94-0.94 1.26-2.13 0.91l0.6-2.46"/>
<path d="m337.57 267.46c-0.05 0.69-0.18 1.37-0.31 2.1 0.3 0.14 0.61 0.27 0.9 0.44 0.3 0.16 0.57 0.34 0.86 0.52l0.6-7.23c-0.14-0.06-0.27-0.12-0.41-0.19-0.13-0.07-0.25-0.15-0.37-0.24l-6.38 4.05c0.17 0.08 0.35 0.16 0.51 0.25 0.17 0.09 0.31 0.19 0.47 0.28 0.54-0.45 1.1-0.82 1.74-1.3l2.39 1.31v0.01zm-1.81-1.66l2.13-1.37-0.25 2.4-1.88-1.03"/>
</g>
</g>
<g id="crown_crest">
<path fill="#ad1519" stroke-width="0.26" d="m249.65 182.72c6.64 0 12.56 0.99 16.41 2.51 2.2 1 5.16 1.73 8.4 2.17 2.47 0.33 4.81 0.39 6.85 0.24 2.73-0.06 6.67 0.74 10.62 2.48 3.26 1.45 5.99 3.21 7.8 4.91l-1.57 1.4-0.45 3.96-4.3 4.92-2.15 1.83-5.09 4.07-2.6 0.21-0.79 2.25-32.91-3.86-33.02 3.86-0.79-2.25-2.61-0.21-5.08-4.07-2.15-1.83-4.3-4.92-0.44-3.96-1.58-1.4c1.82-1.7 4.54-3.46 7.8-4.91 3.95-1.74 7.89-2.54 10.62-2.48 2.04 0.15 4.38 0.09 6.85-0.24 3.24-0.44 6.2-1.17 8.4-2.17 3.86-1.52 9.44-2.51 16.08-2.51z"/>
<g fill="#c8b100">
<path d="m225.34 191.42l1.38 1.11 2.08-3.4c-2.25-1.38-3.8-3.78-3.8-6.51 0-0.31 0.02-0.61 0.06-0.91 0.21-4.34 5.5-7.92 12.2-7.92 3.48 0 6.63 0.95 8.84 2.48 0.06-0.67 0.12-1.25 0.21-1.86-2.43-1.42-5.6-2.28-9.05-2.28-7.71 0-13.74 4.39-14.03 9.57-0.03 0.31-0.05 0.61-0.05 0.92 0 2.76 1.26 5.26 3.26 6.99l-1.1 1.81"/>
<path d="m225.43 191.46c-2.63-1.97-4.27-4.64-4.27-7.58 0-3.38 2.22-6.4 5.58-8.41-2.07 1.67-3.33 3.83-3.51 6.23-0.03 0.31-0.05 0.61-0.05 0.92 0 2.76 1.26 5.26 3.26 6.99l-1.01 1.85"/>
<path d="m202.21 194.89c-1.48-1.65-2.38-3.79-2.38-6.12 0-1.41 0.33-2.75 0.91-3.95 2.13-4.38 8.82-7.57 16.76-7.57 2.16 0 4.23 0.23 6.14 0.67-0.42 0.46-0.75 0.97-1.08 1.48-1.59-0.31-3.29-0.48-5.06-0.48-7.27 0-13.36 2.83-15.12 6.65-0.47 0.97-0.73 2.06-0.73 3.2 0 2.32 1.09 4.4 2.79 5.82l-2.63 4.3-1.41-1.12 1.81-2.88z"/>
<path d="m204.9 180.48c-1.91 1.21-3.36 2.69-4.16 4.34-0.58 1.2-0.91 2.54-0.91 3.95 0 2.33 0.9 4.47 2.38 6.12l-1.6 2.59c-1.53-1.96-2.42-4.26-2.42-6.7 0-4.2 2.67-7.87 6.71-10.3z"/>
<path d="m250.04 171.27c1.76 0 3.28 1.16 3.64 2.73 0.23 1.38 0.38 2.95 0.41 4.62 0.01 0.18-0.01 0.35-0.01 0.52 0 0.2 0.04 0.41 0.05 0.61 0.06 3.52 0.56 6.62 1.27 8.52l-5.36 5.14-5.43-5.14c0.72-1.9 1.22-5 1.29-8.52 0-0.2 0.04-0.41 0.04-0.61 0-0.17-0.01-0.34-0.01-0.52 0.03-1.67 0.18-3.24 0.41-4.62 0.36-1.57 1.94-2.73 3.7-2.73z"/>
<path d="m250.04 172.94c0.91 0 1.68 0.58 1.87 1.39 0.23 1.31 0.37 2.8 0.4 4.38 0 0.16-0.01 0.32-0.01 0.48 0 0.2 0.03 0.39 0.04 0.59 0.05 3.32 0.53 6.25 1.21 8.05l-3.54 3.35-3.54-3.35c0.67-1.8 1.15-4.73 1.21-8.05 0-0.2 0.04-0.39 0.04-0.59 0-0.16-0.01-0.32-0.01-0.48 0.03-1.58 0.17-3.07 0.4-4.38 0.18-0.81 1.02-1.39 1.93-1.39z"/>
<path d="m274.7 191.42l-1.39 1.11-2.08-3.4c2.26-1.38 3.81-3.78 3.81-6.51 0-0.31-0.02-0.61-0.06-0.91-0.21-4.34-5.5-7.92-12.2-7.92-3.49 0-6.63 0.95-8.84 2.48-0.06-0.67-0.12-1.25-0.22-1.86 2.44-1.42 5.6-2.28 9.06-2.28 7.71 0 13.74 4.39 14.03 9.57 0.03 0.31 0.05 0.61 0.05 0.92 0 2.76-1.27 5.26-3.27 6.99l1.11 1.81"/>
<path d="m274.61 191.46c2.63-1.97 4.27-4.64 4.27-7.58 0-3.38-2.22-6.4-5.58-8.41 2.07 1.67 3.33 3.83 3.51 6.23 0.03 0.31 0.05 0.61 0.05 0.92 0 2.76-1.27 5.26-3.27 6.99l1.02 1.85"/>
<path d="m297.83 194.89c1.47-1.65 2.38-3.79 2.38-6.12 0-1.41-0.33-2.75-0.91-3.95-2.14-4.38-8.82-7.57-16.76-7.57-2.16 0-4.23 0.23-6.15 0.67 0.43 0.46 0.76 0.97 1.09 1.48 1.58-0.31 3.29-0.48 5.06-0.48 7.27 0 13.35 2.83 15.11 6.65 0.47 0.97 0.73 2.06 0.73 3.2 0 2.32-1.09 4.4-2.79 5.82l2.63 4.3 1.42-1.12-1.81-2.88z"/>
<path d="m295.14 180.48c1.91 1.21 3.36 2.69 4.16 4.34 0.58 1.2 0.91 2.54 0.91 3.95 0 2.33-0.91 4.47-2.38 6.12l1.6 2.59c1.53-1.96 2.41-4.26 2.41-6.7 0-4.2-2.67-7.87-6.7-10.3z"/>
<ellipse fill="#005bbf" stroke-width="0.26" cx="250.05" cy="167.3" rx="4.43" ry="4.2"/>
<path stroke-width="0.26" d="m248.89 155.54v2.26h-2.42v2.3h2.42v3.15 3.46h-3.05c-0.03 0.21-0.22 0.37-0.22 0.59 0 0.58 0.12 1.14 0.35 1.64 0 0.02 0.02 0.02 0.03 0.03h8.12c0-0.01 0.02-0.01 0.03-0.03 0.22-0.5 0.35-1.06 0.35-1.64 0-0.22-0.19-0.38-0.22-0.59h-2.96v-3.43-3.18h2.42v-2.3h-2.42v-2.26h-2.43z"/>
</g>
<g fill="#fff">
<ellipse cx="250.04" cy="188.94" rx="1.91" ry="1.8"/>
<ellipse cx="250.04" cy="185.4" rx="1.91" ry="1.8"/>
<ellipse cx="250.04" cy="181.6" rx="1.52" ry="1.44"/>
<ellipse cx="250.04" cy="178.18" rx="1.1" ry="1.04"/>
<ellipse cx="250.04" cy="175.18" rx="0.88" ry="0.83"/>
<ellipse cx="198.94" cy="198.67" rx="1.1" ry="1.04"/>
<ellipse cx="197.44" cy="196.02" rx="1.1" ry="1.04"/>
<ellipse cx="196.44" cy="192.94" rx="1.1" ry="1.04"/>
<ellipse cx="196.31" cy="189.64" rx="1.1" ry="1.04"/>
<ellipse cx="197.12" cy="186.4" rx="1.1" ry="1.04"/>
<ellipse cx="198.81" cy="183.45" rx="1.1" ry="1.04"/>
<ellipse cx="201.06" cy="181.02" rx="1.1" ry="1.04"/>
<ellipse cx="203.68" cy="179.01" rx="1.1" ry="1.04"/>
<ellipse cx="206.8" cy="177.36" rx="1.1" ry="1.04"/>
<ellipse cx="210.04" cy="176.19" rx="1.1" ry="1.04"/>
<ellipse cx="213.66" cy="175.54" rx="1.1" ry="1.04"/>
<ellipse cx="217.1" cy="175.36" rx="1.1" ry="1.04"/>
<ellipse cx="220.47" cy="175.48" rx="1.1" ry="1.04"/>
<ellipse cx="224.21" cy="190.32" rx="1.1" ry="1.04"/>
<ellipse cx="222.34" cy="187.65" rx="1.1" ry="1.04"/>
<ellipse cx="221.35" cy="184.75" rx="1.1" ry="1.04"/>
<ellipse cx="221.47" cy="181.57" rx="1.1" ry="1.04"/>
<ellipse cx="222.16" cy="178.37" rx="1.1" ry="1.04"/>
<ellipse cx="223.84" cy="175.48" rx="1.1" ry="1.04"/>
<ellipse cx="226.4" cy="173.47" rx="1.1" ry="1.04"/>
<ellipse cx="229.39" cy="171.81" rx="1.1" ry="1.04"/>
<ellipse cx="232.7" cy="170.82" rx="1.1" ry="1.04"/>
<ellipse cx="236.13" cy="170.23" rx="1.1" ry="1.04"/>
<ellipse cx="239.5" cy="170.28" rx="1.1" ry="1.04"/>
<ellipse cx="242.99" cy="170.87" rx="1.1" ry="1.04"/>
<ellipse cx="246.23" cy="171.99" rx="1.1" ry="1.04"/>
<ellipse cx="253.8" cy="171.99" rx="1.1" ry="1.04"/>
<ellipse cx="257.04" cy="170.87" rx="1.1" ry="1.04"/>
<ellipse cx="260.54" cy="170.28" rx="1.1" ry="1.04"/>
<ellipse cx="263.9" cy="170.23" rx="1.1" ry="1.04"/>
<ellipse cx="267.34" cy="170.82" rx="1.1" ry="1.04"/>
<ellipse cx="270.64" cy="171.81" rx="1.1" ry="1.04"/>
<ellipse cx="273.64" cy="173.47" rx="1.1" ry="1.04"/>
<ellipse cx="276.19" cy="175.48" rx="1.1" ry="1.04"/>
<ellipse cx="277.88" cy="178.37" rx="1.1" ry="1.04"/>
<ellipse cx="278.57" cy="181.57" rx="1.1" ry="1.04"/>
<ellipse cx="278.69" cy="184.75" rx="1.1" ry="1.04"/>
<ellipse cx="277.69" cy="187.65" rx="1.1" ry="1.04"/>
<ellipse cx="275.83" cy="190.32" rx="1.1" ry="1.04"/>
<ellipse cx="279.57" cy="175.48" rx="1.1" ry="1.04"/>
<ellipse cx="282.94" cy="175.36" rx="1.1" ry="1.04"/>
<ellipse cx="286.38" cy="175.54" rx="1.1" ry="1.04"/>
<ellipse cx="290" cy="176.19" rx="1.1" ry="1.04"/>
<ellipse cx="293.24" cy="177.36" rx="1.1" ry="1.04"/>
<ellipse cx="296.36" cy="179.01" rx="1.1" ry="1.04"/>
<ellipse cx="298.97" cy="181.02" rx="1.1" ry="1.04"/>
<ellipse cx="301.22" cy="183.45" rx="1.1" ry="1.04"/>
<ellipse cx="302.91" cy="186.4" rx="1.1" ry="1.04"/>
<ellipse cx="303.72" cy="189.64" rx="1.1" ry="1.04"/>
<ellipse cx="303.6" cy="192.94" rx="1.1" ry="1.04"/>
<ellipse cx="302.6" cy="196.02" rx="1.1" ry="1.04"/>
<ellipse cx="301.1" cy="198.67" rx="1.1" ry="1.04"/>
</g>
<g fill="#c8b100">
<path d="m250.15 226.18c-12.26-0.02-23.25-1.47-31.09-3.83-0.57-0.18-0.87-0.7-0.84-1.25-0.01-0.52 0.29-1 0.84-1.17 7.84-2.36 18.83-3.81 31.09-3.83 12.27 0.02 23.25 1.47 31.09 3.83 0.55 0.17 0.84 0.65 0.83 1.17 0.03 0.55-0.27 1.07-0.83 1.25-7.84 2.36-18.82 3.81-31.09 3.83"/>
<path d="m250.07 216.09c-12.41 0.03-23.55 1.58-31.39 4 0.65-0.31 0.59-1.12-0.22-3.2-0.98-2.53-2.5-2.42-2.5-2.42 8.66-2.56 20.73-4.16 34.16-4.18 13.44 0.02 25.6 1.62 34.27 4.18 0 0-1.53-0.11-2.51 2.42-0.81 2.08-0.87 2.89-0.21 3.2-7.84-2.42-19.19-3.97-31.6-4"/>
<path d="m250.12 210.3c-13.43 0.02-25.5 1.62-34.16 4.18-0.58 0.17-1.19-0.05-1.38-0.6s0.12-1.18 0.7-1.35c8.71-2.67 21.08-4.35 34.84-4.38 13.77 0.03 26.19 1.71 34.9 4.38 0.58 0.17 0.89 0.8 0.7 1.35s-0.8 0.77-1.38 0.6c-8.67-2.56-20.78-4.16-34.22-4.18"/>
<path d="m250.2 199.78l1.23 0.22c-0.19 0.5-0.24 1.05-0.24 1.63 0 2.57 2.21 4.65 4.92 4.65 2.18 0 4.04-1.35 4.67-3.21 0.08 0.05 0.47-1.68 0.68-1.66 0.17 0.02 0.15 1.8 0.22 1.77 0.31 2.34 2.46 3.93 4.87 3.93 2.71 0 4.91-2.08 4.91-4.65 0-0.19-0.01-0.38-0.04-0.57l1.54-1.52 0.83 1.94c-0.33 0.61-0.46 1.3-0.46 2.03 0 2.46 2.1 4.44 4.69 4.44 1.63 0 3.06-0.78 3.9-1.97l0.99-1.25-0.01 1.53c0 1.55 0.66 2.93 2.16 3.18 0 0 1.73 0.1 4.03-1.7 2.29-1.8 3.55-3.29 3.55-3.29l0.2 1.8s-1.9 2.95-3.97 4.15c-1.14 0.66-2.86 1.35-4.23 1.13-1.44-0.24-2.48-1.4-3.01-2.74-1.03 0.61-2.25 0.97-3.55 0.97-2.81 0-5.33-1.54-6.32-3.86-1.29 1.4-3.09 2.25-5.2 2.25-2.24 0-4.29-1.01-5.57-2.56-1.27 1.16-2.98 1.87-4.88 1.87-2.48 0-4.69-1.22-5.94-3.05-1.25 1.83-3.46 3.05-5.94 3.05-1.89 0-3.61-0.71-4.87-1.87-1.28 1.55-3.34 2.56-5.58 2.56-2.11 0-3.9-0.85-5.19-2.25-1 2.32-3.52 3.86-6.32 3.86-1.31 0-2.52-0.36-3.55-0.97-0.54 1.34-1.57 2.5-3.02 2.74-1.36 0.22-3.08-0.47-4.22-1.13-2.08-1.2-3.98-4.15-3.98-4.15l0.2-1.8s1.27 1.49 3.56 3.29c2.29 1.81 4.02 1.7 4.02 1.7 1.51-0.25 2.16-1.63 2.16-3.18l-0.01-1.53 0.99 1.25c0.84 1.19 2.28 1.97 3.9 1.97 2.59 0 4.69-1.98 4.69-4.44 0-0.73-0.13-1.42-0.46-2.03l0.83-1.94 1.54 1.52c-0.02 0.19-0.04 0.38-0.04 0.57 0 2.57 2.2 4.65 4.91 4.65 2.42 0 4.56-1.59 4.88-3.93 0.06 0.03 0.05-1.75 0.22-1.77 0.2-0.02 0.6 1.71 0.67 1.66 0.64 1.86 2.49 3.21 4.68 3.21 2.71 0 4.91-2.08 4.91-4.65 0-0.58-0.03-1.13-0.24-1.63l1.29-0.22"/>
<path d="m208.37 206.32c-0.11-0.37-0.35-0.75-0.72-1.06-0.79-0.68-1.84-0.79-2.36-0.25-0.07 0.07-0.13 0.17-0.17 0.25 0 0-1.11-2.08-2.41-2.78-1.29-0.7-3.49-0.52-3.49-0.52 0-1.6 1.3-2.89 2.99-2.89 0.99 0 1.92 0.41 2.48 1.11l0.23-1.07s1.36 0.27 1.98 1.82-0.06 3.8-0.06 3.8 0.34-0.96 0.85-1.61c0.51-0.64 1.81-1.34 2.49-1.66 0.67-0.31 1.37-0.79 1.37-0.79s0.03 0.18 0.05 0.61c0.03 0.51-0.01 0.83-0.01 0.83 1.24-0.17 2.69 0.04 3.83 0.48-0.49 0.95-1.41 1.84-2.62 2.3 0 0 0.44 0.36 0.83 0.75 0.34 0.34 0.44 0.49 0.44 0.49s-0.85 0.13-1.27 0.19c-0.43 0.05-1.84 0.28-2.69 0.22-0.62-0.04-1.32-0.14-1.74-0.22"/>
<path fill="#ad1519" d="m205.29 205.01c0.52-0.54 1.57-0.43 2.36 0.25 0.8 0.67 1.02 1.66 0.51 2.19-0.51 0.54-1.57 0.42-2.36-0.25-0.79-0.68-1.02-1.66-0.51-2.19"/>
<path fill="#fff" d="m216.39 205.91c-0.28-0.83-0.03-1.65 0.57-1.83 0.6-0.19 1.32 0.33 1.6 1.16s0.03 1.65-0.57 1.84c-0.6 0.18-1.31-0.34-1.6-1.17"/>
<path d="m226.12 201.86c-0.33-0.27-0.59-0.64-0.67-1.08s0.01-0.87 0.23-1.23c0 0-0.88-0.44-1.83-0.69-0.72-0.19-1.99-0.2-2.37-0.2-0.38-0.02-1.15-0.03-1.15-0.03s0.07 0.17 0.28 0.55c0.27 0.46 0.5 0.75 0.5 0.75-1.27 0.29-2.35 1.12-3.03 2.09 0.99 0.68 2.3 1.1 3.6 0.97 0 0-0.12 0.34-0.2 0.86-0.06 0.43-0.06 0.61-0.06 0.61s0.71-0.26 1.07-0.39c0.35-0.13 1.54-0.55 2.15-0.96 0.8-0.54 1.48-1.25 1.48-1.25"/>
<path d="m225.68 191.65c1.06 0.67 1.98 1.79 2.3 3.03 0 0 0.13-0.25 0.71-0.59 0.59-0.33 1.09-0.32 1.09-0.32s-0.17 0.97-0.25 1.32c-0.09 0.34-0.09 1.38-0.32 2.32-0.23 0.93-0.63 1.68-0.63 1.68-0.42-0.34-0.99-0.51-1.58-0.41-0.58 0.1-1.06 0.44-1.32 0.9 0 0-0.66-0.58-1.21-1.38-0.55-0.81-0.93-1.78-1.13-2.08-0.21-0.3-0.72-1.15-0.72-1.15s0.47-0.18 1.14-0.05c0.67 0.12 0.88 0.32 0.88 0.32-0.14-1.28 0.28-2.62 1.04-3.59"/>
<path d="m228.97 201.38c0.22-0.35 0.32-0.79 0.24-1.23s-0.32-0.81-0.66-1.07c0 0 0.67-0.71 1.47-1.26 0.6-0.41 1.8-0.82 2.15-0.95 0.36-0.13 1.07-0.4 1.07-0.4s0 0.18-0.06 0.61c-0.08 0.52-0.2 0.87-0.2 0.87 1.3-0.14 2.62 0.29 3.61 0.98-0.69 0.97-1.77 1.79-3.04 2.08 0 0 0.23 0.28 0.5 0.74 0.21 0.39 0.28 0.56 0.28 0.56s-0.77-0.02-1.15-0.03c-0.38 0-1.65-0.01-2.37-0.2-0.95-0.25-1.84-0.69-1.84-0.69"/>
<ellipse fill="#ad1519" cx="227.37" cy="200.45" rx="2.17" ry="2.06"/>
<path fill="#fff" d="m237.76 201.77c-0.11-0.87 0.31-1.63 0.93-1.7 0.63-0.07 1.23 0.57 1.34 1.44 0.11 0.86-0.3 1.63-0.93 1.7-0.62 0.07-1.22-0.57-1.34-1.44"/>
<path d="m248.5 199.83c-0.32-0.36-0.53-0.82-0.53-1.33 0-0.5 0.19-0.97 0.51-1.32 0 0-0.89-0.67-1.89-1.12-0.77-0.35-2.18-0.59-2.6-0.67-0.43-0.08-1.28-0.24-1.28-0.24s0.04 0.2 0.2 0.67c0.2 0.56 0.4 0.93 0.4 0.93-1.47 0.08-2.85 0.81-3.81 1.76 0.96 0.94 2.34 1.66 3.81 1.75 0 0-0.2 0.36-0.4 0.93-0.16 0.46-0.2 0.67-0.2 0.67s0.85-0.16 1.28-0.24c0.42-0.08 1.83-0.32 2.6-0.67 1-0.46 1.91-1.11 1.91-1.11"/>
<path d="m250.11 188.36c1.05 0.95 1.85 2.36 1.95 3.82 0 0 0.19-0.27 0.91-0.53 0.73-0.26 1.28-0.16 1.28-0.16s-0.39 1.05-0.55 1.42c-0.17 0.37-0.39 1.53-0.84 2.53-0.44 1-1.05 1.76-1.05 1.76-0.4-0.45-1-0.75-1.67-0.75-0.68 0-1.27 0.3-1.67 0.75 0 0-0.61-0.76-1.05-1.76-0.45-1-0.67-2.16-0.84-2.53s-0.56-1.42-0.56-1.42 0.56-0.1 1.28 0.16 0.92 0.53 0.92 0.53c0.1-1.46 0.86-2.87 1.89-3.82"/>
<path d="m251.76 199.83c0.33-0.36 0.53-0.82 0.53-1.33 0-0.5-0.19-0.97-0.51-1.32 0 0 0.89-0.67 1.9-1.12 0.76-0.35 2.17-0.59 2.6-0.67 0.42-0.08 1.26-0.24 1.26-0.24s-0.02 0.2-0.19 0.67c-0.2 0.56-0.4 0.93-0.4 0.93 1.47 0.08 2.86 0.81 3.81 1.76-0.95 0.94-2.33 1.66-3.81 1.75 0 0 0.2 0.36 0.4 0.93 0.16 0.46 0.19 0.67 0.19 0.67l-1.26-0.24c-0.43-0.08-1.84-0.32-2.6-0.67-1.01-0.46-1.92-1.11-1.92-1.11"/>
<ellipse fill="#ad1519" cx="250.14" cy="198.5" rx="2.17" ry="2.06"/>
<path fill="#fff" d="m262.58 201.77c0.11-0.87-0.3-1.63-0.93-1.7s-1.23 0.57-1.34 1.44c-0.11 0.86 0.31 1.63 0.93 1.7 0.63 0.07 1.23-0.57 1.34-1.44"/>
<path d="m271.38 201.38c-0.22-0.35-0.32-0.79-0.25-1.23 0.09-0.44 0.33-0.81 0.67-1.07 0 0-0.67-0.71-1.47-1.26-0.61-0.41-1.8-0.82-2.16-0.95-0.35-0.13-1.06-0.4-1.06-0.4s-0.01 0.18 0.06 0.61c0.08 0.52 0.19 0.87 0.19 0.87-1.29-0.14-2.61 0.29-3.6 0.98 0.68 0.97 1.77 1.79 3.03 2.08 0 0-0.23 0.28-0.49 0.74-0.22 0.39-0.28 0.56-0.28 0.56l1.14-0.03c0.38 0 1.66-0.01 2.37-0.2 0.95-0.25 1.84-0.69 1.84-0.69"/>
<path d="m274.67 191.65c-1.06 0.67-1.98 1.79-2.31 3.03 0 0-0.12-0.25-0.71-0.59-0.58-0.33-1.09-0.32-1.09-0.32s0.17 0.97 0.26 1.32c0.09 0.34 0.09 1.38 0.31 2.32 0.23 0.93 0.64 1.68 0.64 1.68 0.42-0.34 0.99-0.51 1.57-0.41 0.59 0.1 1.06 0.44 1.33 0.9 0 0 0.66-0.58 1.21-1.38 0.54-0.81 0.92-1.78 1.12-2.08 0.21-0.3 0.72-1.15 0.72-1.15s-0.47-0.18-1.14-0.05c-0.67 0.12-0.88 0.32-0.88 0.32 0.15-1.28-0.28-2.62-1.03-3.59"/>
<path d="m274.22 201.86c0.34-0.27 0.6-0.64 0.67-1.08 0.09-0.44 0-0.87-0.22-1.23 0 0 0.88-0.44 1.83-0.69 0.72-0.19 1.99-0.2 2.36-0.2 0.39-0.02 1.15-0.03 1.15-0.03s-0.06 0.17-0.28 0.55c-0.26 0.46-0.49 0.75-0.49 0.75 1.26 0.29 2.34 1.12 3.03 2.09-0.99 0.68-2.31 1.1-3.6 0.97 0 0 0.11 0.34 0.19 0.86 0.06 0.43 0.06 0.61 0.06 0.61s-0.71-0.26-1.06-0.39c-0.36-0.13-1.55-0.55-2.16-0.96-0.79-0.54-1.48-1.25-1.48-1.25"/>
<ellipse fill="#ad1519" cx="272.98" cy="200.45" rx="2.17" ry="2.06"/>
<path fill="#fff" d="m283.96 205.91c0.28-0.83 0.03-1.65-0.57-1.83-0.6-0.19-1.32 0.33-1.61 1.16-0.28 0.83-0.03 1.65 0.57 1.84 0.6 0.18 1.32-0.34 1.61-1.17"/>
<path d="m291.97 206.32c0.11-0.37 0.36-0.75 0.72-1.06 0.79-0.68 1.85-0.79 2.36-0.25 0.07 0.07 0.14 0.17 0.18 0.25 0 0 1.1-2.08 2.4-2.78s3.5-0.52 3.5-0.52c0-1.6-1.31-2.89-3-2.89-0.99 0-1.92 0.41-2.47 1.11l-0.23-1.07s-1.36 0.27-1.98 1.82 0.05 3.8 0.05 3.8-0.33-0.96-0.84-1.61c-0.51-0.64-1.81-1.34-2.49-1.66-0.68-0.31-1.37-0.79-1.37-0.79s-0.03 0.18-0.06 0.61c-0.02 0.51 0.02 0.83 0.02 0.83-1.25-0.17-2.7 0.04-3.83 0.48 0.48 0.95 1.4 1.84 2.61 2.3 0 0-0.43 0.36-0.83 0.75-0.33 0.34-0.43 0.49-0.43 0.49s0.85 0.13 1.27 0.19c0.43 0.05 1.84 0.28 2.68 0.22 0.63-0.04 1.32-0.14 1.74-0.22"/>
<path fill="#ad1519" d="m295.05 205.01c-0.51-0.54-1.57-0.43-2.36 0.25-0.79 0.67-1.02 1.66-0.51 2.19 0.51 0.54 1.57 0.42 2.36-0.25 0.79-0.68 1.02-1.66 0.51-2.19"/>
</g>
<g fill="none">
<path fill="#ad1519" stroke-linejoin="round" d="m250.12 224.57c-11.06-0.01-21.07-1.29-28.68-3.26 7.61-1.97 17.62-3.17 28.68-3.19 11.07 0.02 21.13 1.22 28.74 3.19-7.61 1.97-17.67 3.25-28.74 3.26z"/>
<path stroke-width="0.05" d="m258.04 224.28v-6.01m-3.02 6.21l0.04-6.37m-2.24 6.45v-6.49"/>
<path stroke-width="0.09" d="m250.95 224.64v-6.57"/>
<path stroke-width="0.14" d="m249.16 224.64v-6.57"/>
<path stroke-width="0.18" d="m247.48 224.64v-6.57"/>
<path stroke-width="0.23" d="m245.81 224.64v-6.57"/>
<path stroke-width="0.28" d="m244.32 224.64v-6.57"/>
<path stroke-width="0.33" d="m241.48 224.28l-0.04-5.97m1.39 6.05v-6.25"/>
<path stroke-width="0.37" d="m238.86 224.01v-5.5m1.33 5.66l-0.04-5.86"/>
<path stroke-width="0.42" d="m235.35 223.7v-4.84m1.15 4.92v-5.08m1.19 5.24v-5.28"/>
<path stroke-width="0.46" d="m234.12 223.66v-4.68"/>
<path stroke-width="0.51" d="m232.97 223.42v-4.36"/>
<path stroke-width="0.56" d="m231.74 223.31v-4.06"/>
<path stroke-width="0.6" d="m229.22 222.95l-0.04-3.22m1.33 3.38v-3.62"/>
<path stroke-width="0.63" d="m227.93 222.68v-2.84"/>
<path stroke-width="0.68" d="m226.74 222.45v-2.36"/>
<path stroke-width="0.73" d="m225.45 222.13v-1.85"/>
<path stroke-width="0.77" d="m224.12 221.98v-1.38"/>
<path stroke-width="0.91" d="m222.72 221.66v-0.67"/>
<path d="m220.12 221.66c7.75-2.18 18.29-3.52 30-3.54 11.72 0.02 22.31 1.36 30.06 3.54"/>
<path fill="#ad1519" d="m216.72 217.16l1.22-1.59 3.37 0.43-2.69 1.96-1.9-0.8"/>
<path fill="#fff" d="m224.03 215.28c0-0.58 0.49-1.04 1.1-1.04s1.1 0.46 1.1 1.04c0 0.57-0.49 1.04-1.1 1.04s-1.1-0.47-1.1-1.04"/>
<path fill="#058e6e" d="m233.64 215.07l-2.36 0.27c-0.61 0.07-1.17-0.33-1.24-0.9-0.08-0.57 0.35-1.09 0.96-1.15l2.37-0.28 2.42-0.28c0.6-0.07 1.15 0.33 1.22 0.9s-0.36 1.09-0.96 1.16l-2.41 0.28"/>
<path fill="#fff" d="m240.54 213.35c0-0.58 0.49-1.04 1.1-1.04 0.6 0 1.1 0.46 1.1 1.04 0 0.57-0.5 1.04-1.1 1.04-0.61 0-1.1-0.47-1.1-1.04"/>
<path fill="#ad1519" d="m250.15 214.16h-3.29c-0.6 0-1.11-0.46-1.11-1.03 0-0.58 0.49-1.04 1.1-1.04h6.64c0.61 0 1.1 0.46 1.1 1.04 0 0.57-0.51 1.03-1.11 1.03h-3.33"/>
<path fill="#fff" d="m257.56 213.35c0-0.58 0.5-1.04 1.1-1.04 0.61 0 1.1 0.46 1.1 1.04 0 0.57-0.49 1.04-1.1 1.04-0.6 0-1.1-0.47-1.1-1.04"/>
<path fill="#058e6e" d="m266.66 215.07l2.36 0.27c0.6 0.07 1.17-0.33 1.24-0.9s-0.36-1.09-0.96-1.15l-2.37-0.28-2.42-0.28c-0.61-0.07-1.15 0.33-1.22 0.9-0.08 0.57 0.36 1.09 0.96 1.16l2.41 0.28"/>
<path fill="#fff" d="m274.07 215.28c0-0.58 0.49-1.04 1.1-1.04s1.1 0.46 1.1 1.04c0 0.57-0.49 1.04-1.1 1.04s-1.1-0.47-1.1-1.04"/>
<path fill="#ad1519" d="m283.57 217.16l-1.21-1.59-3.37 0.43 2.69 1.96 1.89-0.8"/>
</g>
</g>
<g id="shield" stroke-width="0.52">
<g id="Granada">
<path fill="#ccc" d="m250.49 344.33c-13.08 0-26.05-3.2-36.95-8.54-8.03-3.98-13.36-12-13.36-21.19v-33.3h100.42v33.3c0 9.19-5.32 17.21-13.36 21.19-10.9 5.34-23.66 8.54-36.75 8.54z"/>
<path fill="#ffd691" d="m252.91 329.55c2.09 0.63 3.15 2.19 3.15 4.01 0 2.38-2.3 4.18-5.3 4.18-2.99 0-5.42-1.8-5.42-4.18 0-1.79 1-3.8 3.08-3.94 0 0-0.06-0.19-0.24-0.5-0.22-0.23-0.64-0.66-0.64-0.66s0.79-0.15 1.25 0.02c0.46 0.18 0.77 0.47 0.77 0.47s0.21-0.43 0.52-0.76c0.3-0.33 0.7-0.53 0.7-0.53s0.46 0.38 0.61 0.64c0.15 0.27 0.25 0.59 0.25 0.59s0.42-0.35 0.79-0.49c0.37-0.15 0.84-0.26 0.84-0.26s-0.13 0.46-0.22 0.69-0.14 0.72-0.14 0.72"/>
<path fill="#058e6e" d="m250.32 340.32s-3.98-2.68-5.7-3.04c-2.21-0.47-4.69-0.09-5.76-0.15 0.03 0.03 1.29 0.93 1.84 1.48s2.39 1.65 3.43 1.91c3.22 0.81 6.19-0.2 6.19-0.2"/>
<path fill="#058e6e" d="m251.46 340.56s2.54-2.66 5.21-3.02c3.15-0.44 5.22 0.26 6.44 0.58 0.03 0-1.01 0.49-1.56 0.87-0.55 0.37-1.97 1.57-4.14 1.59-2.18 0.03-4.58-0.23-4.97-0.17-0.4 0.06-0.98 0.15-0.98 0.15"/>
<path fill="#ad1519" d="m250.69 337.28c-1-0.93-1.62-2.25-1.62-3.72 0-1.46 0.62-2.78 1.63-3.71 0.99 0.93 1.61 2.25 1.61 3.71 0 1.47-0.62 2.79-1.62 3.72"/>
<path fill="#058e6e" d="m249.68 342.71s0.61-1.52 0.67-2.83c0.06-1.09-0.15-2.17-0.15-2.17h0.52 0.28s0.39 1.16 0.39 2.17c0 1.02-0.18 2.37-0.18 2.37s-0.55 0.08-0.73 0.17c-0.19 0.09-0.8 0.29-0.8 0.29"/>
</g>
<g id="Aragon" fill="#c8b100">
<path fill="#ad1519" d="m250.32 314.57c0 13.16-11.16 23.82-25.05 23.82s-25.15-10.66-25.15-23.82v-33.35h50.2v33.35"/>
<path d="m200.03 314.12c0.15 7.02 2.95 12.25 5.73 15.67v-49.47h-5.66l-0.07 33.8z"/>
<path d="m211.08 334.23c1.57 0.83 3.72 2.22 6.03 2.77l-0.15-56.96h-5.88v54.19z"/>
<path d="m222.28 338.25c2.3 0.23 4.01 0.19 5.87 0v-58.21h-5.87v58.21z"/>
<path d="m233.32 337c2.3-0.46 4.9-1.89 6.03-2.63v-54.33h-5.88l-0.15 56.96z"/>
<path d="m244.81 329.24c2.45-2.18 4.75-7.12 5.59-12.76l0.14-36.44h-5.87l0.14 49.2z"/>
</g>
<g id="Navarre">
<path fill="#ad1519" d="m300.65 281.22v33.35c0 13.16-11.28 23.82-25.17 23.82-13.9 0-25.16-10.66-25.16-23.82v-33.35h50.33"/>
<path id="chains_half" fill="#c8b100" stroke="#c8b100" stroke-width="0.26" d="m272.71,306.14c0.05-0.14,0.12-0.27,0.19-0.4l-4.26-4.74-1.67,0.72-3.06-3.39,1-1.46-5.34-5.99c-0.07,0.02-0.2,0.02-0.27,0.04l0.03,4.02,1.75,0.5v4.46l-1.75,0.48-0.03,4.08c0.84,0.26,1.48,0.88,1.74,1.67l3.21,0.01,0.51-1.67h4.72l0.5,1.67zm-6.98-18.5,0,1.61,2.76,0,0-1.61zm-7.3,20.37c0.64,0,1.16-0.49,1.16-1.1s-0.52-1.11-1.16-1.11c-0.65,0-1.17,0.5-1.17,1.11s0.52,1.1,1.17,1.1zm15.99-9.73-1.76-0.48,0-4.46,1.76-0.5-0.01-1.92c-0.85-0.25-1.51-0.87-1.79-1.67h-2.68l-0.51,1.67h-4.71l-0.51-1.67h-3.09c-0.08,0.22-0.17,0.42-0.29,0.61l5.38,5.96,1.67-0.71,3.06,3.4-1,1.45,4.18,4.64c0.09-0.04,0.18-0.08,0.28-0.12zm-7.25-1.39-1.29,1.04,1.77,1.98,1.29-1.05zm8.00432,36.1859c-1.23998-0.065-2.25509-0.9022-2.51432-2.01593-1.67-0.23-3.25-0.66-4.73-1.3l0.84-1.43c1.29,0.55,2.66,0.91,4.08,1.11,0.31-0.66,0.86-1.16,1.58-1.4l0.01-5.62-1.76-0.49v-4.46l1.76-0.48v-7.64c-0.07-0.02-0.13-0.05-0.2-0.09l-3.98,4.42,1,1.44-3.06,3.4-1.67-0.71-3.3,3.67c0.57,0.87,0.55,2-0.11,2.85,0.94,1.05,2.03,1.98,3.24,2.75l-0.84,1.44c-1.42-0.89-2.7-1.99-3.79-3.22-0.87,0.26-1.86,0.11-2.6-0.5-1.15-0.93-1.29-2.56-0.3-3.64l0.14-0.16c-0.69-1.56-1.16-3.24-1.32-5l1.71,0.01c0.14,1.5,0.51,2.93,1.09,4.27,0.49-0.06,1-0.01,1.46,0.16l3.32-3.68-1-1.45,3.06-3.4,1.67,0.72,3.99-4.43c-0.09-0.14-0.15-0.29-0.21-0.46l-2.76,0.01-0.5,1.67h-4.72l-0.51-1.67-3.24-0.01c-0.27,0.76-0.9,1.36-1.69,1.62l-0.01,4.04-1.71-0.01v-4.01c-1.1-0.33-1.91-1.31-1.91-2.47,0-1.15,0.82-2.15,1.92-2.48l0.01-4.05-1.76-0.48v-4.46l1.76-0.5v-4.05c-1.08-0.35-1.84-1.32-1.84-2.45,0-1.43,1.22-2.58,2.73-2.58,1.22,0,2.25,0.74,2.61,1.78h3.09l0.51-1.67h4.71l0.51,1.67h2.68c0.35692-1.0311,1.36258-1.76731,2.55896-1.77984l0.0711,8.36984h-0.85v2.61h0.845l-0.0214,21.59h-0.7836v2.61h0.77946zm-5.914-18.306l-1.29-1.04-1.78,1.98,1.29,1.04zm-9.96-18.44-1.69,0-0.01,2.61,1.7,0zm9.16,11.41,0-1.6-2.85,0,0,1.6zm-10.6,9.69-1.76-0.39-0.25-4.45,1.75-0.58,0,2.56c0,0.99,0.09,1.92,0.26,2.86zm1.46-5.52,1.75,0.41s0.09,2.87,0.05,2.22c-0.04-0.74,0.19,2.24,0.19,2.24l-1.76,0.58c-0.18-0.9-0.24-1.84-0.24-2.79zm10.81,16.93,0.39-1.7c-1.52-0.48-2.93-1.18-4.17-2.09l-1.26,1.11c1.48,1.15,3.19,2.08,5.04,2.68zm-0.85,1.44-1.3,1.22c-1.47-0.54-2.86-1.26-4.12-2.11l0.38-1.77c1.5,1.13,3.21,2.03,5.04,2.66z"/>
<use xlink:href="#chains_half" transform="matrix(-1,0,0,1,550.43,0)"/>
<path fill="#058e6e" stroke="none" d="m272.59 306.94c0-1.44 1.23-2.6 2.74-2.6s2.73 1.16 2.73 2.6c0 1.43-1.22 2.58-2.73 2.58s-2.74-1.15-2.74-2.58"/>
</g>
<g id="Castile" fill="#c8b100" stroke-width="0.46">
<path fill="#ad1519" stroke-width="0.52" d="m200.12 281.25h50.18v-55.72h-50.18v55.72z"/>
<path d="m217.34 238.41h-0.92v-0.92h-1.62v3.69h1.62v2.55h-3.47v7.39h1.85v14.79h-3.7v7.63h28.42v-7.63h-3.69v-14.79h1.85v-7.39h-3.47v-2.55h1.62v-3.69h-1.62v0.92h-0.93v-0.92h-1.61v0.92h-1.16v-0.92h-1.62v3.69h1.62v2.55h-3.46v-8.09h1.84v-3.7h-1.84v0.93h-0.93v-0.93h-1.62v0.93h-0.92v-0.93h-1.85v3.7h1.85v8.09h-3.47v-2.55h1.62v-3.69h-1.62v0.92h-0.92v-0.92h-1.85v0.92zm-6.24 35.13h28.42m-28.42-1.85h28.42m-28.42-1.85h28.42m-28.42-1.85h28.42m-28.42-2.08h28.42m-24.72-1.62h21.03m-21.03-1.85h21.03m-21.03-2.08h21.03m-21.03-1.84h21.03m-21.03-1.85h21.03m-21.03-1.85h21.03m-21.03-1.85h21.03m-22.88-1.85h24.73m-24.73-1.85h24.73m-24.73-1.85h24.73m-24.73-1.84h24.73m-21.26-1.85h17.79m-10.63-1.85h3.47m-3.47-1.85h3.47m-3.47-1.85h3.47m-3.47-1.85h3.47m-5.32-2.31h7.16m-12.47 7.86h3.69m-5.31-2.31h6.93m-6.93 33.97v-1.85m0-1.85v-1.85m-1.85 1.85v1.85m3.47 0v-1.85m1.84 3.7v-1.85m0-1.85v-1.85m0-2.08v-1.62m0-1.85v-2.08m-1.84 7.63v-2.08m-3.47 2.08v-2.08m7.16 0v2.08m1.62-2.08v-1.62m-5.31-1.85v1.85m3.69-1.85v1.85m3.47-1.85v1.85m-1.85-1.85v-2.08m1.85-1.84v1.84m0-5.54v1.85m-1.85-3.7v1.85m1.85-3.7v1.85m-3.47-1.85v1.85m-3.69-1.85v1.85m-1.62-3.7v1.85m3.46-1.85v1.85m3.47-1.85v1.85m1.85-3.7v1.85m-3.47-1.85v1.85m-3.69-1.85v1.85m-1.62-3.69v1.84m6.93-1.84v1.84m-3.47-5.54v1.85m15.95-1.85h-3.7m5.32-2.31h-6.94m6.94 33.97v-1.85m0-1.85v-1.85m1.85 1.85v1.85m-3.47 0v-1.85m-1.85 3.7v-1.85m0-1.85v-1.85m0-2.08v-1.62m0-1.85v-2.08m1.85 7.63v-2.08m3.47 2.08v-2.08m-7.17 0v2.08m-1.62-2.08v-1.62m5.32-1.85v1.85m-3.7-1.85v1.85m-3.46-1.85v1.85m1.84-1.85v-2.08m-1.84-1.84v1.84m0-5.54v1.85m1.84-3.7v1.85m-1.84-3.7v1.85m3.46-1.85v1.85m3.7-1.85v1.85m1.62-3.7v1.85m-3.47-1.85v1.85m-3.47-1.85v1.85m-1.84-3.7v1.85m3.46-1.85v1.85m3.7-1.85v1.85m1.62-3.69v1.84m-6.94-1.84v1.84m3.47-5.54v1.85m-7.16 18.71v-2.08m0-5.54v-1.85m0 5.55v-1.85m0-5.55v-1.85m0-1.85v-1.84m0-3.7v-1.85m0-1.85v-1.85m-8.78 4.85h3.69m3.47-5.54h3.47m3.46 5.54h3.7"/>
<path d="m230.05 273.54v-4.86c0-0.92-0.46-3.7-4.85-3.7-4.16 0-4.62 2.78-4.62 3.7v4.86h9.47z"/>
<path d="m222.19 268.91l-2.31-0.23c0-0.92 0.23-2.31 0.93-2.77l2.08 1.62c-0.23 0.23-0.7 0.92-0.7 1.38z"/>
<path d="m226.12 266.6l1.16-2.08c-0.46-0.23-1.39-0.46-2.08-0.46-0.46 0-1.39 0.23-1.85 0.46l1.15 2.08h1.62z"/>
<path d="m228.43 268.91l2.31-0.23c0-0.92-0.23-2.31-0.92-2.77l-2.08 1.62c0.23 0.23 0.69 0.92 0.69 1.38z"/>
<path d="m221.73 260.83v-5.09c0-1.38-0.92-2.54-2.54-2.54s-2.54 1.16-2.54 2.54v5.09h5.08z"/>
<path d="m228.89 260.83v-5.09c0-1.38 0.93-2.54 2.55-2.54 1.61 0 2.54 1.16 2.54 2.54v5.09h-5.09z"/>
<path d="m220.11 248.35l0.23-4.62h-4.39l0.47 4.62h3.69z"/>
<path d="m227.05 248.35l0.46-4.62h-4.39l0.23 4.62h3.7z"/>
<path d="m230.51 248.35l-0.46-4.62h4.62l-0.46 4.62h-3.7z"/>
<g fill="#0039f0" stroke="none">
<path d="m228.43 273.54v-4.16c0-0.7-0.46-2.78-3.23-2.78-2.54 0-3.01 2.08-3.01 2.78v4.16h6.24z"/>
<path d="m221.27 260.36v-4.39c0-1.15-0.69-2.31-2.08-2.31s-2.08 1.16-2.08 2.31v4.39h4.16z"/>
<path d="m229.36 260.36v-4.39c0-1.15 0.69-2.31 2.08-2.31 1.38 0 2.08 1.16 2.08 2.31v4.39h-4.16z"/>
</g>
</g>
<g id="Leon">
<path fill="#ccc" d="m250.28 281.25h50.32v-55.72h-50.32v55.72z"/>
<path fill="#db4446" stroke-width="0.39" d="m275.93 239.26l0.05-0.62 0.09-0.34s-1.61 0.13-2.46-0.11-1.61-0.59-2.4-1.25c-0.79-0.68-1.1-1.1-1.67-1.18-1.36-0.22-2.4 0.4-2.4 0.4s1.02 0.37 1.78 1.31 1.59 1.41 1.95 1.53c0.59 0.18 2.66 0.05 3.22 0.07 0.57 0.03 1.84 0.19 1.84 0.19z"/>
<g fill="none" stroke-width="0.39">
<path fill="#ed72aa" d="m283.46 237s0.01 0.72 0.08 1.4c0.06 0.67-0.22 1.24-0.11 1.61s0.16 0.66 0.3 0.93c0.14 0.26 0.21 0.94 0.21 0.94s-0.38-0.28-0.74-0.54c-0.35-0.27-0.6-0.44-0.6-0.44s0.07 0.72 0.1 1.03c0.04 0.31 0.22 0.89 0.51 1.24 0.29 0.33 0.87 0.89 1.05 1.33 0.18 0.45 0.14 1.44 0.14 1.44s-0.46-0.75-0.87-0.89c-0.39-0.14-1.26-0.62-1.26-0.62s0.79 0.79 0.79 1.55c0 0.75-0.32 1.6-0.32 1.6s-0.36-0.68-0.83-1.12c-0.47-0.45-1.13-0.9-1.13-0.9s0.52 1.17 0.52 1.95c0 0.79-0.15 2.47-0.15 2.47s-0.39-0.64-0.79-0.96c-0.4-0.31-0.87-0.58-1.02-0.78-0.14-0.21 0.48 0.64 0.54 1.16 0.07 0.51 0.32 2.35 1.92 4.69 0.94 1.37 2.39 3.77 5.5 2.98 3.11-0.78 1.96-4.97 1.3-6.92-0.65-1.95-0.98-4.11-0.94-4.87 0.04-0.75 0.58-2.97 0.51-3.39-0.07-0.41-0.24-2 0.14-3.28 0.4-1.33 0.73-1.85 0.95-2.4 0.21-0.55 0.39-0.86 0.46-1.34s0.07-1.37 0.07-1.37 0.58 1.06 0.73 1.44c0.14 0.38 0.14 1.5 0.14 1.5s0.11-1.12 0.98-1.67 1.88-1.13 2.13-1.44 0.33-0.51 0.33-0.51-0.08 1.92-0.62 2.67c-0.36 0.49-1.77 2.09-1.77 2.09s0.73-0.28 1.23-0.3c0.51-0.04 0.87 0 0.87 0s-0.62 0.48-1.41 1.64c-0.8 1.16-0.47 1.26-1.05 2.22s-1.05 1-1.78 1.58c-1.08 0.87-0.5 4.34-0.36 4.86 0.15 0.51 2.03 4.76 2.07 5.79 0.03 1.03 0.21 3.33-1.6 4.8-1.16 0.95-3.07 0.96-3.51 1.23-0.43 0.28-1.29 1.13-1.29 2.91 0 1.79 0.64 2.06 1.15 2.51 0.51 0.44 1.16 0.2 1.3 0.55 0.15 0.34 0.22 0.54 0.44 0.75 0.21 0.2 0.36 0.44 0.29 0.82-0.08 0.38-0.91 1.23-1.2 1.85-0.29 0.61-0.87 2.23-0.87 2.47s-0.07 0.99 0.18 1.37c0 0 0.91 1.06 0.29 1.26-0.4 0.14-0.78-0.25-0.97-0.2-0.54 0.14-0.83 0.47-0.98 0.45-0.36-0.07-0.36-0.25-0.4-0.76-0.03-0.51-0.01-0.72-0.17-0.72-0.22 0-0.33 0.18-0.37 0.45s-0.04 0.89-0.29 0.89-0.61-0.45-0.83-0.55-0.83-0.2-0.87-0.48c-0.03-0.27 0.36-0.85 0.76-0.96 0.4-0.1 0.76-0.3 0.51-0.51-0.26-0.2-0.51-0.2-0.76 0-0.25 0.21-0.79 0.04-0.76-0.27 0.04-0.31 0.11-0.69 0.07-0.86-0.03-0.17-0.47-0.51 0.1-0.82 0.59-0.31 0.84 0.27 1.42 0.17s0.86-0.31 1.08-0.65 0.18-1.06-0.22-1.5c-0.39-0.45-0.79-0.52-0.94-0.8-0.14-0.27-0.36-0.92-0.36-0.92s0.11 1.2 0.04 1.37-0.04 0.89-0.04 0.89-0.39-0.45-0.72-0.79c-0.32-0.34-0.65-1.37-0.65-1.37s-0.03 0.96-0.03 1.34c0 0.37 0.43 0.72 0.29 0.86-0.15 0.13-0.83-0.72-1.02-0.86-0.18-0.14-0.76-0.58-1.01-1.06s-0.44-1.16-0.51-1.41c-0.07-0.24-0.19-1.31-0.07-1.58 0.18-0.4 0.47-1.13 0.47-1.13h-1.41c-0.76 0-1.3-0.23-1.59 0.28s-0.15 1.54 0.21 2.88c0.37 1.33 0.58 1.98 0.48 2.22-0.11 0.24-0.58 0.79-0.76 0.89-0.19 0.11-0.69 0.07-0.91-0.03-0.21-0.1-0.57-0.27-1.26-0.27s-1.12 0.03-1.37-0.03c-0.26-0.07-0.88-0.38-1.17-0.31s-0.79 0.32-0.65 0.72c0.22 0.61-0.21 0.75-0.51 0.72-0.29-0.04-0.53-0.14-0.9-0.24-0.36-0.11-0.9 0-0.83-0.42 0.07-0.41 0.22-0.44 0.4-0.74 0.18-0.32 0.25-0.52 0.04-0.54-0.25-0.02-0.51-0.05-0.7 0.11-0.2 0.16-0.51 0.51-0.76 0.38-0.26-0.14-0.46-0.43-0.46-1.08 0-0.64-0.68-1.2-0.05-1.17 0.62 0.03 1.41 0.48 1.55 0.13s0.06-0.51-0.28-0.78-0.76-0.43-0.31-0.77c0.45-0.35 0.56-0.35 0.74-0.54 0.17-0.18 0.41-0.79 0.73-0.64 0.62 0.3 0.02 0.73 0.65 1.42 0.62 0.69 1.01 0.94 2.06 0.83 1.04-0.11 1.33-0.24 1.33-0.54 0-0.29-0.09-0.82-0.12-1.04-0.02-0.21 0.15-0.99 0.15-0.99s-0.48 0.3-0.63 0.59c-0.13 0.29-0.42 0.8-0.42 0.8s-0.11-0.6-0.08-1.09c0.02-0.29 0.12-0.79 0.11-0.89-0.03-0.27-0.23-0.94-0.23-0.94s-0.16 0.73-0.28 0.94c-0.11 0.21-0.16 1.07-0.16 1.07s-0.67-0.58-0.48-1.55c0.13-0.75-0.12-1.74 0.11-2.06 0.22-0.33 0.75-1.64 2.06-1.69 1.3-0.05 2.31 0.05 2.77 0.03 0.45-0.03 2.06-0.33 2.06-0.33s-2.97-1.52-3.64-1.98c-0.68-0.45-1.73-1.63-2.07-2.16-0.34-0.54-0.65-1.58-0.65-1.58s-0.53 0.02-1.02 0.29c-0.48 0.27-0.96 0.67-1.24 0.99s-0.73 1.05-0.73 1.05 0.08-0.94 0.08-1.23-0.06-0.86-0.06-0.86-0.33 1.28-1.01 1.76c-0.68 0.49-1.47 1.15-1.47 1.15s0.08-0.71 0.08-0.88c0-0.16 0.17-0.99 0.17-0.99s-0.48 0.72-1.21 0.86c-0.74 0.13-1.81 0.11-1.9 0.56-0.08 0.45 0.2 1.07 0.03 1.39s-0.54 0.54-0.54 0.54-0.42-0.35-0.79-0.38c-0.36-0.03-0.71 0.16-0.71 0.16s-0.31-0.4-0.19-0.67c0.11-0.26 0.67-0.66 0.54-0.83-0.15-0.16-0.6 0.06-0.88 0.19-0.28 0.14-0.88 0.27-0.82-0.19 0.05-0.45 0.2-0.72 0.05-1.04-0.14-0.32-0.05-0.53 0.18-0.61 0.22-0.08 1.12 0.02 1.21-0.19 0.08-0.21-0.22-0.48-0.82-0.61-0.59-0.14-0.88-0.49-0.57-0.78 0.32-0.3 0.4-0.38 0.54-0.64 0.14-0.27 0.2-0.76 0.74-0.51 0.53 0.24 0.42 0.83 0.99 1.01 0.56 0.19 1.89-0.08 2.17-0.24s1.19-0.83 1.5-0.99c0.31-0.15 1.61-1.12 1.61-1.12s-0.76-0.53-1.05-0.8c-0.28-0.27-0.78-0.91-1.04-1.05-0.25-0.13-1.5-0.61-1.92-0.64-0.42-0.02-1.72-0.48-1.72-0.48s0.59-0.19 0.79-0.35c0.19-0.16 0.64-0.56 0.87-0.53 0.22 0.02 0.28 0.02 0.28 0.02s-1.21-0.05-1.47-0.13c-0.25-0.08-0.99-0.54-1.27-0.54s-0.84 0.11-0.84 0.11 0.76-0.48 1.38-0.59c0.62-0.1 1.1-0.08 1.1-0.08s-0.96-0.27-1.19-0.58c-0.22-0.33-0.45-0.8-0.62-1.02-0.17-0.21-0.28-0.56-0.59-0.59s-0.85 0.38-1.16 0.35-0.54-0.22-0.57-0.67c-0.02-0.46 0-0.3-0.1-0.54-0.12-0.24-0.57-0.8-0.15-0.93 0.43-0.14 1.33 0.08 1.42-0.08 0.08-0.16-0.48-0.65-0.85-0.83-0.37-0.19-0.96-0.51-0.65-0.78 0.31-0.26 0.62-0.37 0.79-0.61s0.37-0.91 0.74-0.7c0.36 0.21 0.87 1.26 1.16 1.18 0.28-0.08 0.3-0.83 0.25-1.15-0.06-0.32 0-0.88 0.28-0.83s0.51 0.43 0.96 0.46c0.45 0.02 1.13-0.11 1.07 0.21-0.05 0.32-0.31 0.71-0.62 1.06-0.3 0.36-0.45 1.05-0.25 1.5 0.2 0.46 0.71 1.19 1.16 1.48s1.3 0.51 1.84 0.85c0.53 0.35 1.78 1.34 2.2 1.45s0.85 0.32 0.85 0.32 0.48-0.21 1.13-0.21 2.14 0.1 2.71-0.14 1.3-0.64 1.08-1.15c-0.23-0.51-1.47-0.96-1.36-1.36s0.57-0.43 1.33-0.46c0.76-0.02 1.8 0.14 2-0.94 0.2-1.06 0.26-1.68-0.81-1.92-1.08-0.24-1.87-0.27-2.07-1.04-0.2-0.78-0.39-0.97-0.17-1.18 0.23-0.21 0.62-0.32 1.41-0.37 0.8-0.06 1.7-0.06 1.96-0.25 0.25-0.18 0.3-0.69 0.61-0.91 0.31-0.21 1.53-0.4 1.53-0.4s1.46 0.71 2.8 1.71c1.21 0.9 2.3 2.23 2.3 2.23"/>
<path d="m269 243.39s-0.8 0.23-1.1 0.67c-0.37 0.53-0.34 1.07-0.34 1.07s0.68-0.56 1.56-0.33c0.87 0.24 0.96 0.33 1.33 0.3s1.27-0.35 1.27-0.35-0.74 0.86-0.65 1.45c0.08 0.58 0.19 0.85 0.17 1.15-0.06 0.72-0.6 1.61-0.6 1.61s0.31-0.19 1.05-0.35c0.73-0.16 1.36-0.51 1.75-0.81 0.39-0.29 0.9-1.02 0.9-1.02s-0.16 1 0 1.42c0.17 0.44 0.23 1.67 0.23 1.67s0.47-0.42 0.85-0.62c0.19-0.11 0.7-0.38 0.9-0.7 0.14-0.22 0.32-1.06 0.32-1.06s0.11 0.9 0.39 1.34c0.28 0.42 0.7 1.74 0.7 1.74s0.29-0.86 0.6-1.21 0.68-0.8 0.7-1.07c0.03-0.27-0.08-0.85-0.08-0.85l0.39 0.85m-11.41 0.61s0.48-0.83 0.93-1.1c0.46-0.26 1.08-0.74 1.25-0.8 0.16-0.05 0.9-0.46 0.9-0.46m0.99 5.17s1.09-0.55 1.41-0.75c0.68-0.4 1.16-1.12 1.16-1.12"/>
<path fill="none" stroke-width="0.26" d="m282.57 240.9s-0.34-0.48-0.42-0.65c-0.09-0.15-0.23-0.48-0.23-0.48"/>
<path fill="none" d="m278.33 257.41s2.04 1.26 1.98 2.31c-0.06 1.04-1.13 2.41-1.13 2.41"/>
</g>
<path fill="#000" stroke-width="0.26" d="m273.05 236.24s-0.17-0.48-0.2-0.62c-0.03-0.13-0.12-0.29-0.12-0.29s0.88 0 0.85 0.27c-0.02 0.27-0.28 0.27-0.34 0.37-0.05 0.11-0.19 0.27-0.19 0.27z"/>
<path fill="#000" stroke-width="0.05" d="m277.06 234.85l-0.06-0.43s0.77 0 1.13 0.26c0.57 0.4 0.93 1.02 0.91 1.05-0.1 0.09-0.54-0.27-0.85-0.37 0 0-0.23 0.05-0.45 0.05-0.23 0-0.34-0.11-0.37-0.21-0.03-0.12 0.03-0.3 0.03-0.3l-0.34-0.05z"/>
<g fill="#000" stroke-width="0.26">
<path d="m273.08 240.14l0.33-0.53 0.34 0.49-0.67 0.04"/>
<path d="m273.89 240.12l0.4-0.53 0.43 0.48-0.83 0.05"/>
<path d="m273.53 236.83l0.82 0.29-0.74 0.38-0.08-0.67"/>
<path d="m274.52 237.1l0.73 0.18-0.59 0.46-0.14-0.64"/>
</g>
<g fill="#db4446" stroke-width="0.39">
<path d="m261.88 236.08s0.48 0.34 0.85 0.4c0.37 0.05 0.76 0.05 0.82 0.05 0.05 0 0.17-0.54 0.11-0.91-0.2-1.2-1.3-1.47-1.3-1.47s0.33 0.73 0.17 1.07c-0.23 0.48-0.65 0.86-0.65 0.86z"/>
<path d="m259.59 237.12s-0.43-0.77-1.33-0.67c-0.9 0.11-1.5 0.81-1.5 0.81s1-0.03 1.25 0.13c0.37 0.24 0.48 0.86 0.48 0.86s0.54-0.32 0.71-0.54c0.16-0.21 0.39-0.59 0.39-0.59z"/>
<path d="m258.49 240.25s-0.77 0.11-1.19 0.59c-0.43 0.49-0.36 1.4-0.36 1.4s0.5-0.54 0.95-0.54c0.46 0 1.16 0.16 1.16 0.16s-0.22-0.56-0.22-0.8-0.34-0.81-0.34-0.81z"/>
<path d="m261.06 250.37s-0.42-0.45-1.16-0.32c-0.74 0.14-1.22 0.97-1.22 0.97s0.63-0.17 1-0.08c0.36 0.08 0.62 0.45 0.62 0.45s0.34-0.29 0.45-0.45 0.31-0.57 0.31-0.57z"/>
<path d="m260.21 253.34s-0.62-0.1-1.16 0.33c-0.53 0.43-0.56 1.25-0.56 1.25s0.51-0.43 0.91-0.37c0.39 0.05 0.87 0.27 0.87 0.27s0.08-0.51 0.11-0.64c0.09-0.38-0.17-0.84-0.17-0.84z"/>
<path d="m261.66 256.08s-0.05 0.79 0.33 1.28c0.4 0.51 1.13 0.59 1.13 0.59s-0.24-0.53-0.28-0.8c-0.06-0.4 0.34-0.75 0.34-0.75s-0.37-0.38-0.73-0.38c-0.37 0-0.79 0.06-0.79 0.06z"/>
<path d="m269 263.12s-0.51-0.64-1.21-0.62c-0.71 0.03-1.45 0.69-1.45 0.69s0.88-0.07 1.11 0.22c0.23 0.3 0.45 0.67 0.45 0.67s0.4-0.21 0.57-0.35c0.17-0.13 0.53-0.61 0.53-0.61z"/>
<path d="m266.83 265.93s-0.93-0.14-1.39 0.35c-0.45 0.48-0.42 1.36-0.42 1.36s0.56-0.61 1.07-0.56 1.08 0.32 1.08 0.32-0.09-0.53-0.15-0.78c-0.05-0.24-0.19-0.69-0.19-0.69z"/>
<path d="m268.84 268.9s-0.46 0.64-0.12 1.15 1.05 0.75 1.05 0.75-0.26-0.37-0.14-0.8c0.09-0.34 0.67-0.8 0.67-0.8l-1.46-0.3z"/>
<path d="m281.24 270.11s-0.81-0.19-1.27 0.08c-0.45 0.26-0.82 1.39-0.82 1.39s0.74-0.62 1.28-0.54c0.53 0.08 0.93 0.3 0.93 0.3s0.08-0.46 0.02-0.78c-0.03-0.19-0.14-0.45-0.14-0.45z"/>
<path d="m281.64 273.1s-0.62 0.64-0.4 1.18c0.23 0.54 0.62 1.1 0.62 1.1s-0.02-0.8 0.23-1.02c0.37-0.32 1.05-0.37 1.05-0.37s-0.54-0.48-0.71-0.54c-0.17-0.05-0.79-0.35-0.79-0.35z"/>
<path d="m284.75 274.04s-0.31 0.78 0.28 1.28c0.59 0.52 1.11 0.57 1.11 0.57s-0.46-0.81-0.32-1.23c0.15-0.45 0.54-0.72 0.54-0.72s-0.74-0.25-0.85-0.22c-0.11 0.02-0.76 0.32-0.76 0.32z"/>
</g>
<g fill="#c8b100" stroke-width="0.26">
<path d="m282.88 232.71l-0.29 0.02c-0.01 0.03-0.14 0.24-0.26 0.35-0.26 0.25-0.65 0.28-0.86 0.07-0.11-0.11-0.16-0.26-0.14-0.41-0.17 0.09-0.35 0.09-0.51-0.01-0.26-0.15-0.32-0.5-0.14-0.79 0.03-0.06 0.06-0.14 0.11-0.18l-0.02-0.32-0.35 0.08-0.1 0.19c-0.22 0.25-0.54 0.31-0.7 0.17-0.08-0.07-0.14-0.26-0.13-0.27 0 0.01-0.09 0.09-0.17 0.11-0.54 0.13-0.75-1.05-0.77-1.35l-0.17 0.25s0.16 0.7 0.08 1.3c-0.08 0.59-0.29 1.19-0.29 1.19 0.74 0.19 1.86 0.8 2.97 1.65s1.98 1.78 2.34 2.42c0 0 0.58-0.32 1.18-0.51s1.36-0.2 1.36-0.2l0.22-0.21c-0.32 0.05-1.58 0.1-1.56-0.43 0-0.08 0.07-0.18 0.08-0.18-0.01 0.01-0.21-0.01-0.3-0.06-0.18-0.13-0.18-0.43 0.02-0.69l0.18-0.13 0.01-0.34-0.34 0.05c-0.03 0.04-0.11 0.09-0.15 0.13-0.27 0.23-0.65 0.25-0.86 0.03-0.13-0.12-0.17-0.29-0.11-0.46-0.16 0.04-0.32 0.03-0.45-0.05-0.26-0.15-0.31-0.52-0.11-0.8 0.09-0.14 0.28-0.31 0.31-0.32l-0.07-0.3h-0.01z"/>
<g fill="#000" stroke-width="0.05">
<path d="m280.63 233.4c0.05-0.07 0.15-0.06 0.23 0s0.1 0.16 0.06 0.21c-0.05 0.06-0.15 0.06-0.24-0.01-0.07-0.05-0.1-0.15-0.05-0.2z"/>
<path d="m281.58 234.19l-0.33-0.25c-0.06-0.04-0.07-0.12-0.04-0.16 0.04-0.04 0.12-0.04 0.18 0l0.33 0.26 0.33 0.25c0.05 0.04 0.08 0.12 0.04 0.16s-0.12 0.04-0.18 0l-0.33-0.26"/>
<path d="m279.84 233l-0.26-0.15c-0.07-0.04-0.1-0.12-0.07-0.17s0.11-0.06 0.17-0.02l0.26 0.16 0.26 0.15c0.06 0.03 0.09 0.11 0.07 0.16-0.03 0.05-0.11 0.06-0.17 0.02l-0.26-0.15"/>
<path d="m278.8 232.29c0.05-0.06 0.16-0.06 0.24 0 0.08 0.07 0.1 0.16 0.05 0.22-0.05 0.05-0.15 0.05-0.23-0.01s-0.1-0.15-0.06-0.21z"/>
<path d="m282.63 234.92c0.05-0.05 0.03-0.14-0.05-0.21-0.08-0.06-0.19-0.06-0.24 0-0.04 0.05-0.02 0.15 0.06 0.21s0.18 0.06 0.23 0z"/>
<path d="m283.2 235.58l0.22 0.21c0.05 0.05 0.13 0.07 0.18 0.03 0.04-0.04 0.04-0.11-0.01-0.16l-0.21-0.21-0.22-0.21c-0.05-0.05-0.14-0.07-0.18-0.03-0.05 0.03-0.04 0.11 0.01 0.16l0.21 0.21"/>
<path d="m284.15 236.39c0.05-0.06 0.03-0.15-0.05-0.21-0.08-0.07-0.18-0.07-0.23-0.01s-0.03 0.15 0.05 0.22c0.08 0.05 0.18 0.06 0.23 0z"/>
</g>
<path d="m281.4 230.36l-0.59 0.01-0.11 0.87 0.06 0.14 0.15-0.01 0.76-0.51-0.27-0.5"/>
<path d="m281.4 230.36l-0.59 0.01-0.11 0.87 0.06 0.14 0.15-0.01 0.76-0.51-0.27-0.5"/>
<path d="m279.8 230.84l-0.02 0.54 0.92 0.12 0.15-0.07-0.02-0.15-0.53-0.71-0.5 0.27"/>
<path d="m281.7 231.92l-0.49 0.27-0.54-0.71-0.01-0.15 0.14-0.06 0.93 0.11-0.03 0.54"/>
<path d="m280.51 231.25c0.08-0.13 0.26-0.17 0.39-0.09 0.14 0.07 0.18 0.24 0.1 0.37s-0.26 0.17-0.39 0.09c-0.14-0.08-0.18-0.24-0.1-0.37z"/>
<path d="m278.36 230.35c-0.02 0.01-0.13-0.46-0.26-0.71-0.08-0.19-0.39-0.43-0.39-0.43 0.03-0.05 0.42-0.19 0.87 0.09 0.38 0.31-0.03 0.87-0.03 0.87s-0.09 0.14-0.19 0.18z"/>
<path d="m279.39 230.66l-0.42 0.37-0.68-0.6 0.06-0.08 0.03-0.15 0.92-0.07 0.09 0.53"/>
<path d="m278.24 230.29c0.05-0.15 0.18-0.23 0.28-0.2 0.11 0.04 0.15 0.18 0.1 0.33s-0.18 0.23-0.29 0.2c-0.11-0.04-0.15-0.18-0.09-0.33z"/>
<path d="m283.67 231.77l-0.59-0.06-0.25 0.85 0.05 0.14 0.15 0.01 0.83-0.41-0.19-0.53"/>
<path d="m282.01 232.03l-0.1 0.54 0.9 0.23 0.15-0.04 0.01-0.14-0.43-0.79-0.53 0.2"/>
<path d="m283.73 233.36l-0.53 0.2-0.42-0.78 0.01-0.15 0.15-0.03 0.89 0.23-0.1 0.53"/>
<path d="m282.65 232.54c0.1-0.12 0.28-0.13 0.4-0.04 0.13 0.09 0.15 0.26 0.05 0.38s-0.28 0.13-0.41 0.04c-0.12-0.09-0.14-0.26-0.04-0.38z"/>
<path d="m285.64 233.61l0.11 0.55-0.87 0.3-0.16-0.04-0.01-0.14 0.36-0.81 0.57 0.14"/>
<path d="m285.49 235.2l-0.56 0.13-0.31-0.83 0.04-0.15 0.15-0.02 0.85 0.35-0.17 0.52"/>
<path d="m283.97 233.66l-0.18 0.52 0.85 0.34 0.16-0.02 0.03-0.14-0.3-0.83-0.56 0.13"/>
<path d="m284.91 234.63c0.12-0.11 0.12-0.28 0.02-0.39-0.11-0.11-0.29-0.11-0.41-0.02-0.11 0.11-0.12 0.28-0.01 0.39 0.1 0.11 0.29 0.12 0.4 0.02z"/>
<path d="m286.29 236.43c0 0.01 0.5 0.03 0.79 0.09 0.2 0.04 0.52 0.27 0.52 0.27 0.06-0.04 0.12-0.42-0.28-0.79-0.39-0.28-0.88 0.22-0.88 0.22s-0.12 0.12-0.15 0.21z"/>
<path d="m285.75 235.54l-0.29 0.46 0.76 0.51 0.09-0.08 0.13-0.04-0.12-0.88-0.57 0.03"/>
<path d="m286.37 236.53c0.14-0.07 0.21-0.22 0.15-0.31s-0.22-0.1-0.36-0.02-0.2 0.22-0.14 0.31c0.05 0.09 0.21 0.1 0.35 0.02z"/>
</g>
</g>
<g id="inescutcheon" stroke-width="0.61">
<ellipse fill="#ad1519" cx="250.43" cy="281.01" rx="16.26" ry="18.3"/>
<ellipse fill="#005bbf" cx="250.44" cy="280.97" rx="11.44" ry="13.42"/>
<g id="fdl" fill="#c8b100" stroke-width="0.34">
<path stroke-linejoin="round" d="m245.03 271.74s-1.35 1.48-1.35 2.86c0 1.39 0.57 2.54 0.57 2.54-0.21-0.55-0.76-0.94-1.41-0.94-0.83 0-1.5 0.63-1.5 1.42 0 0.22 0.14 0.58 0.24 0.77l0.49 0.99c0.16-0.37 0.54-0.57 0.98-0.57 0.59 0 1.08 0.45 1.08 1.01 0 0.09-0.01 0.17-0.04 0.25l-1.22 0.01v1.03h1.09l-0.81 1.61 1.07-0.42 0.81 0.91 0.84-0.91 1.07 0.42-0.8-1.61h1.08v-1.03l-1.22-0.01c-0.02-0.08-0.02-0.16-0.02-0.25 0-0.56 0.47-1.01 1.06-1.01 0.44 0 0.82 0.2 0.98 0.57l0.49-0.99c0.1-0.19 0.24-0.55 0.24-0.77 0-0.79-0.67-1.42-1.49-1.42-0.66 0-1.21 0.39-1.41 0.94 0 0 0.57-1.15 0.57-2.54 0-1.38-1.39-2.86-1.39-2.86z"/>
<path d="m242.87 281.11h4.36v-1.03h-4.36v1.03z"/>
</g>
<use xlink:href="#fdl" x="10.63"/>
<use xlink:href="#fdl" x="5.31" y="9.14"/>
</g>
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="600"><rect width="900" height="600" fill="#ED2939"/><rect width="600" height="600" fill="#fff"/><rect width="300" height="600" fill="#002395"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 225 150" width="1350" height="900"><rect width="225" height="150" fill="#f93"/><rect width="225" height="50" y="50" fill="#fff"/><rect width="225" height="50" y="100" fill="#128807"/><g transform="translate(112.5,75)"><circle r="20" fill="#008"/><circle r="17.5" fill="#fff"/><circle r="3.5" fill="#008"/><g id="d"><g id="c"><g id="b"><g id="a"><circle r="0.875" fill="#008" transform="rotate(7.5) translate(17.5)"/><path fill="#008" d="M 0,17.5 0.6,7 C 0.6,7 0,2 0,2 0,2 -0.6,7 -0.6,7 L 0,17.5 z"/></g><use xlink:href="#a" transform="rotate(15)"/></g><use xlink:href="#b" transform="rotate(30)"/></g><use xlink:href="#c" transform="rotate(60)"/></g><use xlink:href="#d" transform="rotate(120)"/><use xlink:href="#d" transform="rotate(-120)"/></g></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="1213px" height="808px" viewBox="0 0 1213 808" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
<!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->
<title>Interlingua Logo</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
<path d="M607,807 C829.570754,807 1010,626.570754 1010,404 C1010,181.429246 829.570754,1 607,1 C384.429246,1 204,181.429246 204,404 C204,626.570754 384.429246,807 607,807 Z M423.121094,116.945312 C439.794354,116.945312 453.902286,122.780866 465.445312,134.452148 C476.988339,146.123431 482.759766,160.167236 482.759766,176.583984 C482.759766,193.000733 476.924212,206.980411 465.25293,218.523438 C453.581647,230.066464 439.537843,235.837891 423.121094,235.837891 C406.704345,235.837891 392.724667,230.066464 381.181641,218.523438 C369.638614,206.980411 363.867188,193.000733 363.867188,176.583984 C363.867188,160.167236 369.638614,146.123431 381.181641,134.452148 C392.724667,122.780866 406.704345,116.945312 423.121094,116.945312 Z M476.988281,291.244141 L476.988281,576.355469 C476.988281,601.750127 479.938122,617.974249 485.837891,625.02832 C491.73766,632.082392 503.280513,636.122391 520.466797,637.148438 L520.466797,651 L326.160156,651 L326.160156,637.148438 C342.063882,636.635414 353.863243,632.018273 361.558594,623.296875 C366.688828,617.397106 369.253906,601.750127 369.253906,576.355469 L369.253906,366.273438 C369.253906,340.878779 366.304066,324.654658 360.404297,317.600586 C354.504528,310.546514 343.089928,306.506516 326.160156,305.480469 L326.160156,291.244141 L476.988281,291.244141 Z M754.019531,597.902344 C710.156031,636.63561 670.782075,656.001953 635.896484,656.001953 C615.375548,656.001953 598.317776,649.268622 584.722656,635.801758 C571.127536,622.334894 564.330078,605.469502 564.330078,585.205078 C564.330078,557.758326 576.129439,533.069446 599.728516,511.137695 C623.327592,489.205945 674.757416,460.028177 754.019531,423.603516 L754.019531,387.435547 C754.019531,360.245307 752.544611,343.123408 749.594727,336.069336 C746.644842,329.015264 741.065796,322.859076 732.857422,317.600586 C724.649048,312.342096 715.414765,309.712891 705.154297,309.712891 C688.481036,309.712891 674.757866,313.432254 663.984375,320.871094 C657.315071,325.488304 653.980469,330.874969 653.980469,337.03125 C653.980469,342.417996 657.571579,349.0872 664.753906,357.039062 C674.501351,368.069066 679.375,378.714141 679.375,388.974609 C679.375,401.543683 674.693732,412.252885 665.331055,421.102539 C655.968378,429.952193 643.720128,434.376953 628.585938,434.376953 C612.4257,434.376953 598.894911,429.503304 587.993164,419.755859 C577.091417,410.008415 571.640625,398.593815 571.640625,385.511719 C571.640625,367.042876 578.951099,349.407962 593.572266,332.606445 C608.193432,315.804929 628.585807,302.915409 654.75,293.9375 C680.914193,284.959591 708.104026,280.470703 736.320312,280.470703 C770.436368,280.470703 797.43382,287.71705 817.313477,302.209961 C837.193133,316.702872 850.082653,332.413978 855.982422,349.34375 C859.573586,360.117241 861.369141,384.870249 861.369141,423.603516 L861.369141,563.273438 C861.369141,579.690186 862.01041,590.014627 863.292969,594.24707 C864.575527,598.479513 866.499336,601.621735 869.064453,603.673828 C871.62957,605.725922 874.57941,606.751953 877.914062,606.751953 C884.583367,606.751953 891.380825,602.006558 898.306641,592.515625 L909.849609,601.75 C897.024024,620.731866 883.749743,634.519163 870.026367,643.112305 C856.302991,651.705447 840.720139,656.001953 823.277344,656.001953 C802.756408,656.001953 786.724667,651.192431 775.181641,641.573242 C763.638614,631.954053 756.584648,617.397233 754.019531,597.902344 Z M754.019531,569.814453 L754.019531,449.382812 C722.981616,467.595143 699.895909,487.08974 684.761719,507.867188 C674.757762,521.718819 669.755859,535.698497 669.755859,549.806641 C669.755859,561.606179 673.988239,571.994747 682.453125,580.972656 C688.865917,587.898472 697.843692,591.361328 709.386719,591.361328 C722.212304,591.361328 737.089759,584.179108 754.019531,569.814453 Z" id="Oval-1" fill="#000066" sketch:type="MSShapeGroup"></path>
</g>
</svg>
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
height="1000"
width="1500"
version="1.1"
viewBox="0 0 3 2"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<desc>Bandiera della Repubblica Italiana PMS 20060414</desc>
<!--
from http://commons.wikimedia.org/wiki/Image:Bandiera_della_Repubblica_Italiana_PMS_20060414.svg
this text is in the public domain
-->
<rect
fill="#009246"
height="2"
width="1" />
<rect
fill="#f1f2f1"
height="2"
width="1"
x="1" />
<rect
fill="#ce2b37"
height="2"
width="1"
x="2" />
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="600">
<rect fill="#a0a0a0" height="600" width="900"/>
<rect fill="#fff" x="6" y="6" width="888" height="588"/>
<circle fill="#be0026" cx="450" cy="300" r="180"/>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="900" height="600" viewBox="-36 -24 72 48">
<title>Flag of South Korea</title>
<rect fill="#fff" x="-36" y="-24" width="72" height="48"/>
<g transform="rotate(-56.3099325)"><!--arctan(-3/2)-->
<g id="b2"><path id="b" d="M-6-25H6M-6-22H6M-6-19H6" stroke="#000" stroke-width="2"/>
<use xlink:href="#b" y="44"/></g>
<path stroke="#fff" stroke-width="1" d="M0,17v10"/>
<circle fill="#c60c30" r="12"/>
<path fill="#003478" d="M0-12A6,6 0 0 0 0,0A6,6 0 0 1 0,12A12,12 0 0,1 0-12Z"/></g>
<g transform="rotate(-123.6900675)"><use xlink:href="#b2"/>
<path stroke="#fff" stroke-width="1" d="M0-23.5v3M0,17v3.5M0,23.5v3"/></g></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="600" viewBox="0 0 9 6">
<rect fill="#21468B" width="9" height="6"/>
<rect fill="#FFF" width="9" height="4"/>
<rect fill="#AE1C28" width="9" height="2"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 225 150" width="1350" height="900"><rect width="225" height="150" fill="#f93"/><rect width="225" height="50" y="50" fill="#fff"/><rect width="225" height="50" y="100" fill="#128807"/><g transform="translate(112.5,75)"><circle r="20" fill="#008"/><circle r="17.5" fill="#fff"/><circle r="3.5" fill="#008"/><g id="d"><g id="c"><g id="b"><g id="a"><circle r="0.875" fill="#008" transform="rotate(7.5) translate(17.5)"/><path fill="#008" d="M 0,17.5 0.6,7 C 0.6,7 0,2 0,2 0,2 -0.6,7 -0.6,7 L 0,17.5 z"/></g><use xlink:href="#a" transform="rotate(15)"/></g><use xlink:href="#b" transform="rotate(30)"/></g><use xlink:href="#c" transform="rotate(60)"/></g><use xlink:href="#d" transform="rotate(120)"/><use xlink:href="#d" transform="rotate(-120)"/></g></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="400">
<rect width="600" height="400" fill="#f00"/>
<rect width="240" height="400" fill="#060"/>
<g fill="#ff0" fill-rule="evenodd" stroke="#000" stroke-width="0.573" stroke-linecap="round" stroke-linejoin="round">
<path d="m318.24,262.04c-30.21-0.91-168.74-87.38-169.69-101.15l7.6496-12.757c13.741,19.966,155.36,104.06,169.27,101.08l-7.2299,12.823"/>
<path d="m154.59,146.4c-2.7101,7.2937,36.149,31.318,82.903,59.754,46.752,28.434,87.065,46.006,90.053,43.486,0.18256-0.32544,1.4701-2.5409,1.352-2.5232-0.56001,0.84402-1.9234,1.1104-4.0506,0.49741-12.631-3.6433-45.575-18.765-86.374-43.506-40.798-24.743-76.294-47.544-81.811-57.232-0.38363-0.67116-0.65702-1.8962-0.60146-2.8487l-0.13405-0.002-1.1747,2.0532-0.16139,0.32191h-0.00088zm164.36,116.04c-0.51238,0.92957-1.4675,0.96044-3.2816,0.76112-11.3-1.2506-45.589-17.925-86.162-42.213-47.21-28.26-86.2-54.01-81.97-60.74l1.1509-2.0346,0.22665,0.0706c-3.8037,11.405,76.948,57.578,81.702,60.522,46.724,28.947,86.115,45.851,89.601,41.458l-1.2682,2.181v-0.002z"/>
<path d="m240.17,169.23c30.237-0.23901,67.55-4.1319,89.023-12.69l-4.6265-7.5168c-12.692,7.0247-50.21,11.644-84.652,12.335-40.736-0.37483-69.49-4.1681-83.897-13.835l-4.3672,8.0045c26.484,11.207,53.623,13.587,88.52,13.703"/>
<path d="m330.44,156.71c-0.73904,1.1818-14.743,6.0113-35.373,9.5753-13.988,2.1325-32.234,3.9555-55.004,3.9776-21.633,0.0203-39.305-1.5196-52.684-3.3329-21.656-3.3955-32.833-8.1201-36.965-9.7896,0.39509-0.78581,0.64908-1.337,1.0301-2.0708,11.895,4.736,23.124,7.5918,36.279,9.6158,13.291,1.8,30.75,3.362,52.276,3.3417,22.664-0.0229,40.709-1.9844,54.616-4.0534,21.155-3.4122,32.711-7.8034,34.334-9.8425l1.494,2.5788h-0.002zm-4.0603-7.6226c-2.293,1.8415-13.718,5.8932-33.819,9.1034-13.415,1.9226-30.472,3.6433-52.265,3.6645-20.704,0.0203-37.619-1.375-50.485-3.2491-20.414-2.6661-31.279-7.4754-35.196-8.8776,0.3898-0.67381,0.78666-1.3423,1.1941-2.0135,3.0479,1.5346,13.533,5.7909,34.226,8.7224,12.72,1.8036,29.661,3.1477,50.262,3.1265,21.69-0.0221,38.553-1.7762,51.883-3.6883,20.205-2.7799,31.077-7.9472,32.728-9.241l1.4728,2.4509v0.002z"/>
<path d="m140.88,205.66c18.598,10.003,59.905,15.044,98.994,15.391,35.591,0.0564,81.958-5.5016,99.297-14.69l-0.47712-10.012c-5.4246,8.4773-55.113,16.609-99.206,16.276-44.093-0.3325-85.038-7.1429-98.687-15.959l0.0794,8.9914"/>
<path d="m340.12,204.22,0.00088,2.3874c-2.606,3.1159-18.946,7.8255-39.437,11.142-15.595,2.391-35.927,4.1945-61.262,4.1945-24.069,0-43.263-1.7163-58.148-4.0014-23.529-3.4264-38.579-9.4262-41.6-11.217l0.0132-2.7852c9.0748,6.0334,33.661,10.447,41.917,11.798,14.788,2.2701,33.868,3.9732,57.817,3.9732,25.216,0,45.434-1.7912,60.931-4.1663,14.701-2.1237,35.644-7.6465,39.767-11.324h0.00088zm0.01-8.4922,0.00088,2.3874c-2.606,3.1142-18.946,7.8237-39.437,11.14-15.595,2.391-35.927,4.1945-61.262,4.1945-24.069,0-43.263-1.7145-58.148-4.0014-23.529-3.4246-38.579-9.4245-41.6-11.216l0.0132-2.7852c9.0748,6.0325,33.661,10.447,41.917,11.796,14.788,2.2719,33.868,3.9758,57.817,3.9758,25.216,0,45.434-1.7921,60.931-4.169,14.701-2.1237,35.644-7.6465,39.767-11.324l0.00088,0.002z"/>
<path d="m239.79,260.32c-42.772-0.25489-79.421-11.659-87.16-13.544l5.6433,8.8344c13.67,5.7503,49.424,14.32,81.927,13.371,32.504-0.94809,60.91-3.466,80.928-13.211l5.7862-9.1555c-13.642,6.425-60.068,13.639-87.125,13.705"/>
<path stroke-width="0.55" d="m323.3,253.72c-0.85016,1.2991-1.7171,2.5823-2.5963,3.8294-9.4417,3.3293-24.319,6.8245-30.597,7.844-12.824,2.6423-32.665,4.594-50.274,4.6029-37.89-0.55474-68.905-7.9719-83.496-14.299l-1.1773-2.0241,0.19225-0.30427,1.9966,0.77435c25.948,9.2834,55.091,12.987,82.698,13.652,17.538,0.0617,35.095-2.01,49.292-4.5491,21.771-4.3621,30.574-7.65,33.275-9.1405l0.68701-0.38541h-0.00088zm5.0172-8.2753c0.022,0.0256,0.0441,0.0503,0.0653,0.0776-0.63585,1.0733-1.2911,2.1652-1.9622,3.2623-5.0357,1.8-18.702,5.7988-38.659,8.5893-13.149,1.7912-21.322,3.526-47.479,4.034-49.015-1.2471-80.75-10.831-88.289-13.195l-1.1174-2.1431c28.406,7.4154,57.422,12.592,89.408,13.121,23.931-0.50976,34.112-2.2719,47.152-4.0499,23.271-3.6186,34.996-7.4498,38.515-8.5558-0.0441-0.0635-0.0961-0.13053-0.15433-0.19932l2.5231-0.9428-0.002,0.002z"/>
<path d="m328.83,197.76c0.13873,28.137-14.26,53.386-25.858,64.525-16.408,15.759-38.163,25.896-63.569,26.363-28.37,0.52117-55.12-17.974-62.295-26.099-14.028-15.885-25.449-36.057-25.815-63.243,1.7376-30.709,13.793-52.1,31.268-66.769s40.743-21.813,60.121-21.302c22.358,0.59003,48.475,11.558,66.521,33.332,11.823,14.266,16.943,29.748,19.627,53.193zm-89.186-96.342c54.485,0,99.296,44.338,99.296,98.703,0,54.364-44.811,98.704-99.296,98.704s-98.924-44.339-98.924-98.704,44.439-98.703,98.924-98.703"/>
<path d="m239.91,101.08c54.534,0,99.011,44.483,99.011,99.022,0,54.538-44.478,99.02-99.011,99.02-54.534,0-99.011-44.481-99.011-99.02s44.478-99.022,99.011-99.022zm-96.832,99.0224c0,53.26,43.736,96.842,96.832,96.842,53.097,0,96.833-43.582,96.833-96.842,0-53.262-43.737-96.844-96.833-96.844s-96.832,43.584-96.832,96.844z"/>
<path d="m239.99,109.31c49.731,0,90.693,40.821,90.693,90.704,0,49.884-40.963,90.703-90.693,90.703s-90.693-40.819-90.693-90.703c0-49.883,40.964-90.704,90.693-90.704zm-88.515,90.7034c0,48.685,39.979,88.524,88.515,88.524s88.515-39.839,88.515-88.524c0-48.686-39.978-88.525-88.515-88.525-48.536,0-88.515,39.839-88.515,88.525z"/>
<path d="m243.98,100.68-8.48545,0,0.01,198.96,8.51455,0z"/>
<path d="m243.13,99.546h2.1598l0.0185,201.25h-2.1616l-0.0159-201.25zm-8.4213,0.0018h2.1766l0.003,201.25h-2.1783v-201.25z"/>
<path d="m338.99,203.935,0-7.3554-5.99-5.58-34-9-49-5-59,3-42,10-8.48,6.28,0,7.3572l21.48-9.637,51-8h49l36,4,25,6z"/>
<path d="m239.95,184.77c23.383-0.0432,46.07,2.2154,64.065,5.7194,18.569,3.7121,31.637,8.3556,36.105,13.571l-0.005,2.5823c-5.3884-6.4902-22.973-11.248-36.518-13.968-17.858-3.474-40.393-5.7168-63.647-5.6736-24.538,0.0459-47.387,2.3698-64.984,5.8032-14.12,2.8019-32.951,8.3679-35.302,13.858v-2.689c1.2911-3.8003,15.313-9.4792,34.984-13.417,17.729-3.4572,40.62-5.7415,65.302-5.7864zm0.01-8.4922c23.383-0.0423,46.07,2.2172,64.065,5.7194,18.569,3.7139,31.637,8.3556,36.105,13.571l-0.005,2.5823c-5.3884-6.4885-22.973-11.247-36.518-13.966-17.858-3.4757-40.393-5.7185-63.647-5.6736-24.538,0.0441-47.276,2.3698-64.875,5.8014-13.626,2.5832-33.226,8.3696-35.412,13.86v-2.6908c1.2911-3.7588,15.597-9.6414,34.985-13.417,17.729-3.4572,40.62-5.7397,65.302-5.7864z"/>
<path d="m239.48,132.96c36.849-0.18433,68.99,5.1523,83.695,12.685l5.3638,9.279c-12.781-6.888-47.456-14.05-89.005-12.979-33.854,0.20814-70.027,3.7271-88.176,13.41l6.4035-10.709c14.895-7.7241,50.022-11.643,81.72-11.684"/>
<path d="m239.97,140.62c21.017-0.0556,41.325,1.1298,57.476,4.0437,15.041,2.7993,29.385,7.0009,31.436,9.2604l1.5901,2.8099c-4.9881-3.257-17.401-6.8836-33.339-9.906-16.006-3.0083-36.3-4.0049-57.2-3.9502-23.722-0.0811-42.152,1.1712-57.969,3.9291-16.728,3.13-28.334,7.6015-31.197,9.7261l1.5583-2.9704c5.5631-2.8381,14.39-6.2592,29.223-8.9297,16.357-2.988,34.983-3.8841,58.423-4.0128h-0.00088zm-0.009-8.4843c20.113-0.0529,39.972,1.068,55.452,3.8506,12.209,2.3768,24.283,6.0872,28.704,9.3892l2.3256,3.6954c-3.9536-4.3947-18.836-8.5593-31.974-10.892-15.361-2.6494-34.395-3.698-54.508-3.8656-21.108,0.0591-40.615,1.352-55.752,4.1081-14.441,2.7481-23.76,6.0016-27.703,8.5425l2.0451-3.0868c5.4414-2.8646,14.232-5.4954,25.303-7.6465,15.249-2.7764,34.876-4.0358,56.108-4.0949z"/>
<path d="m289.15,241.26c-18.218-3.4008-36.469-3.8947-49.217-3.7447-61.407,0.71967-81.244,12.609-83.665,16.209l-4.5894-7.4815c15.634-11.332,49.073-17.687,88.587-17.037,20.518,0.33602,38.224,1.6986,53.119,4.5835l-4.2358,7.4727"/>
<path stroke-width="0.55" d="m239.58,236.46c17.082,0.25488,33.849,0.96044,50.033,3.9784l-1.172,2.069c-15.031-2.7746-31.055-3.8365-48.803-3.75-22.663-0.17727-45.585,1.9394-65.541,7.6668-6.2968,1.7524-16.721,5.8006-17.784,9.1458l-1.1659-1.9226c0.33601-1.9773,6.6363-6.081,18.414-9.3901,22.858-6.5458,44.239-7.6491,66.019-7.799v0.002zm0.77519-8.5963c17.698,0.33073,35.975,1.1492,53.74,4.6681l-1.2206,2.1537c-16.042-3.1847-31.369-4.2466-52.415-4.5702-22.735,0.0414-46.851,1.6625-68.778,8.0372-7.0791,2.062-19.297,6.5202-19.704,10.05l-1.1659-2.0655c0.26545-3.2059,10.842-7.388,20.358-10.156,22.096-6.4241,46.275-8.076,69.186-8.1174z"/>
<path d="M327.58,247.38,320.201,258.829,299,240,244,203,182,169,149.81,157.99,156.67,145.27,159,144l20,5,66,34,38,24,32,23,13,15z"/>
<path d="m148.65,158.29c5.646-3.8294,47.139,14.655,90.555,40.834,43.301,26.254,84.677,55.921,80.942,61.473l-1.2285,1.9323-0.56354,0.4445c0.12083-0.0864,0.74345-0.84755-0.0609-2.906-1.8449-6.0704-31.195-29.491-79.894-58.895-47.475-28.309-87.041-45.371-90.997-40.494l1.247-2.3892h-0.00089zm180.44,88.927c3.57-7.052-34.916-36.044-82.632-64.272-48.813-27.666-83.994-43.951-90.42-39.095l-1.4278,2.5991c-0.0124,0.14287,0.052-0.17727,0.35364-0.4101,1.1685-1.0195,3.1052-0.95074,3.9792-0.96662,11.065,0.16581,42.667,14.709,87.006,40.128,19.428,11.315,82.071,51.491,81.832,62.789,0.0168,0.97102,0.0803,1.1712-0.28485,1.6519l1.5936-2.4236v-0.002z"/>
</g>
<g>
<path fill="#fff" stroke="#000" stroke-width="0.67037" d="m180.6,211.01c0,16.271,6.6628,30.987,17.457,41.742,10.815,10.778,25.512,17.579,41.809,17.579,16.381,0,31.247-6.6525,42.016-17.389,10.769-10.735,17.443-25.552,17.446-41.88h-0.002v-79.189l-118.74-0.14111,0.0123,79.278h0.002z"/>
<path fill="#f00" stroke="#000" stroke-width="0.50734" d="m182.82,211.12v0.045c0,15.557,6.4414,29.724,16.775,40.009,10.354,10.305,24.614,16.712,40.214,16.712,15.681,0,29.912-6.3606,40.222-16.626,10.308-10.265,16.697-24.433,16.699-40.044h-0.002v-76.826l-113.84-0.0185-0.0697,76.748m91.022-53.747,0.004,48.891-0.0414,5.1717h0.00088c0,1.3608-0.082,2.9122-0.24076,4.2333-0.92512,7.7294-4.4801,14.467-9.7451,19.708-6.1636,6.1357-14.671,9.9413-24.047,9.9413-9.327,0-17.639-3.9379-23.829-10.1-6.3497-6.32-10.03-14.986-10.03-23.947l-0.0132-54.023,67.94,0.12259,0.002,0.002z"/>
<g id="castle3">
<g id="castle" fill="#ff0" stroke="#000" stroke-width="0.5">
<path stroke="none" d="m190.19,154.43c0.13493-5.521,4.0524-6.828,4.0806-6.8474,0.0282-0.0185,4.2314,1.4076,4.2173,6.8986l-8.2978-0.0512"/>
<path d="m186.81,147.69-0.68172,6.3447,4.1406,0.009c0.0397-5.2493,3.9739-6.1225,4.0691-6.1031,0.0891-0.005,3.9889,1.1606,4.0929,6.1031h4.1511l-0.74962-6.3932-15.022,0.0379v0.002z"/>
<path d="m185.85,154.06h16.946c0.35717,0,0.64908,0.35277,0.64908,0.78404,0,0.43039-0.29191,0.78141-0.64908,0.78141h-16.946c-0.35717,0-0.64908-0.35102-0.64908-0.78141,0-0.43127,0.29191-0.78404,0.64908-0.78404z"/>
<path d="m192.01,154.03c0.0185-3.3126,2.2621-4.2501,2.2736-4.2483,0.00088,0,2.3423,0.96661,2.3609,4.2483h-4.6344"/>
<path d="m186.21,145.05h16.245c0.34218,0,0.62263,0.31839,0.62263,0.70468,0,0.38717-0.28045,0.70467-0.62263,0.70467h-16.245c-0.34218,0-0.62263-0.31573-0.62263-0.70467,0-0.38629,0.28045-0.70468,0.62263-0.70468z"/>
<path d="m186.55,146.47h15.538c0.32719,0,0.59529,0.31662,0.59529,0.70379,0,0.38805-0.2681,0.70467-0.59529,0.70467h-15.538c-0.32719,0-0.59529-0.31662-0.59529-0.70467,0-0.38717,0.2681-0.70379,0.59529-0.70379z"/>
<path d="m191.57,135.88,1.2267,0.002v0.87136h0.89513v-0.89076l1.2567,0.004v0.88723h0.89778v-0.89076h1.2576l-0.002,2.0117c0,0.31574-0.25398,0.52035-0.54854,0.52035h-4.4113c-0.29633,0-0.56972-0.23724-0.5706-0.52652l-0.003-1.9879h0.00088z"/>
<path d="m196.19,138.57,0.27691,6.4514-4.3028-0.0159,0.28486-6.4523,3.741,0.0168"/>
<path id="cp1" d="m190.94,141.56,0.13141,3.4775-4.1256,0.002,0.11641-3.4793h3.8786-0.00089z"/>
<use xlink:href="#cp1" x="10.609"/>
<path id="cp2" d="m186.3,139.04,1.1994,0.003v0.87224h0.8775v-0.89253l1.2294,0.004v0.889h0.87926v-0.89253l1.2302,0.002-0.002,2.0117c0,0.31398-0.2487,0.51859-0.5362,0.51859h-4.3169c-0.28926,0-0.55824-0.23548-0.55913-0.52564l-0.003-1.9888h0.00088z"/>
<use xlink:href="#cp2" x="10.609"/>
<path fill="#000" stroke="none" d="m193.9,140.61c-0.0265-0.62706,0.87661-0.63411,0.86603,0v1.5364h-0.866v-1.536"/>
<path id="cp3" fill="#000" stroke="none" d="m188.57,142.84c-0.003-0.6059,0.83693-0.61824,0.82635,0v1.1871h-0.826v-1.187"/>
<use xlink:href="#cp3" x="10.641"/>
</g>
<use xlink:href="#castle" y="46.3198"/>
<use xlink:href="#castle" transform="matrix(0.70460892,-0.70959585,0.70959585,0.70460892,-35.341459,275.10898)"/>
</g>
<use xlink:href="#castle" x="45.7138"/>
<use xlink:href="#castle3" transform="matrix(-1,0,0,1,479.79195,0)"/>
<g id="quina" fill="#fff">
<path fill="#039" d="m232.636,202.406v0.005c0,2.2119,0.84927,4.2272,2.2118,5.6894,1.3652,1.4667,3.2454,2.3777,5.302,2.3777,2.0672,0,3.9439-0.90487,5.3029-2.3654,1.3581-1.4587,2.2021-3.47219,2.2021-5.693v-10.768l-14.992-0.0123-0.0273,10.766"/>
<circle cx="236.074" cy="195.735" r="1.486"/>
<circle cx="244.392" cy="195.742" r="1.486"/>
<circle cx="240.225" cy="199.735" r="1.486"/>
<circle cx="236.074" cy="203.916" r="1.486"/>
<circle cx="244.383" cy="203.905" r="1.486"/>
</g>
<use xlink:href="#quina" y="-26.016"/>
<use xlink:href="#quina" x="-20.799"/>
<use xlink:href="#quina" x="20.745"/>
<use xlink:href="#quina" y="25.784"/>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9 6" width="900" height="600">
<rect width="9" height="6" fill="#D52B1E"/>
<rect width="9" height="4" fill="#0039A6"/>
<rect width="9" height="2" fill="#FFF"/>
<path d="m0,0h9v6H0z" stroke="#a0a0a0" stroke-width=".1" fill="none"/>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="600" viewBox="0 0 9 6">
<title>Flag of Slovakia</title>
<rect width="9" height="6" fill="#ee1c25"/>
<rect width="9" height="4" fill="#0b4ea2"/>
<rect width="9" height="2" fill="#fff"/>
<g>
<path fill="#fff" d="M3.16255,4.635c-0.53781-0.25905-1.3071-0.77323-1.3071-1.79033,0-1.01711,0.04863-1.47967,0.04863-1.47967h1.25847,1.2585s0.04864,0.46256,0.04864,1.47967c0,1.0171-0.76929,1.53128-1.30714,1.79033z"/>
<path fill="#ee1c25" d="M3.16255,4.5c-0.4934-0.23766-1.19917-0.70938-1.19917-1.64251,0-0.933128,0.044612-1.35749,0.044612-1.35749h1.15456,1.15459s0.044626,0.424365,0.044626,1.35749c0,0.933128-0.705776,1.40485-1.19921,1.64251z"/>
<path fill="#fff" d="m3.26808,2.61284c0.133599,0.00216,0.394255,0.00739,0.626352-0.070273,0,0-0.00613,0.083055-0.00613,0.179805,0,0.096773,0.00613,0.179822,0.00613,0.179822-0.21289-0.07125-0.4758-0.07273-0.62635-0.07082v0.515391h-0.211033v-0.515391c-0.150545-0.00191-0.41345-0.0004252-0.626352,0.070815,0,0,0.00613-0.083049,0.00613-0.179822,0-0.09675-0.00613-0.179805-0.00613-0.179805,0.2321,0.077665,0.492753,0.072432,0.626352,0.070273v-0.323676c-0.121766-0.00108-0.297234,0.00473-0.49563,0.071126,0,0,0.00613-0.083055,0.00613-0.179822,0-0.096756-0.00613-0.179811-0.00613-0.179811,0.198103,0.066283,0.373356,0.072192,0.495088,0.071137-0.00626-0.20498-0.06597-0.46332-0.06597-0.46332s0.12289,0.00959,0.172016,0.00959c0.049178,0,0.172031-0.00959,0.172031-0.00959s-0.059695,0.258346-0.065964,0.463301c0.121741,0.00106,0.296989-0.00485,0.495086-0.071137,0,0-0.00613,0.083055-0.00613,0.179811,0,0.096767,0.00613,0.179822,0.00613,0.179822-0.198388-0.066392-0.373863-0.072207-0.495627-0.071126v0.323676z"/>
<path fill="#0b4ea2" d="m3.1625,3.29094c-0.24847,0-0.381562,0.344688-0.381562,0.344688s-0.073834-0.163438-0.276562-0.163438c-0.137161,0-0.238243,0.12201-0.3025,0.235,0.24954,0.39705,0.64768,0.64207,0.96062,0.79281,0.31299-0.15075,0.71139-0.39571,0.96094-0.79281-0.064256-0.11299-0.165339-0.235-0.3025-0.235-0.202734,0-0.276875,0.163438-0.276875,0.163438s-0.133073-0.344688-0.381562-0.344688z"/>
<path d="m0,0h9v6H0z" stroke="#a0a0a0" stroke-width=".1" fill="none"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="600" viewBox="0 0 16 10">
<rect width="16" height="10" fill="#006aa7"/>
<rect width="2" height="10" x="5" fill="#fecc00"/>
<rect width="16" height="2" y="4" fill="#fecc00"/>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="1500" height="1000" viewBox="-5 -5 30 20">
<title>Flag of the People's Republic of China</title>
<rect fill="#de2910" x="-5" y="-5" width="30" height="20"/>
<defs>
<polygon id="s" points="0,-513674 301930,415571 -488533,-158734 488533,-158734 -301930,415571"
fill="#ffde00" transform="scale(0.0000019467600073)"/>
</defs>
<use xlink:href="#s" transform="scale(3)"/>
<use xlink:href="#s" transform="translate(5,-3) rotate(-120.963756)"/>
<use xlink:href="#s" transform="translate(7,-1) rotate(-98.130102)"/>
<use xlink:href="#s" transform="translate(7,2) rotate(-74.054604)"/>
<use xlink:href="#s" transform="translate(5,4) rotate(-51.3401917)"/>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg>
<svg width="900" height="600" viewBox="-60 -40 240 160" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect x="-60" y="-40" width="100%" height="100%" fill="#fe0000"/>
<rect x="-60" y="-40" width="50%" height="50%" fill="#000095"/>
<path id="four_rays" d="M 8,0 L 0,30 L -8,0 L 0,-30 M 0,8 L 30,0 L 0,-8 L -30,0" fill="#fff"/>
<use xlink:href="#four_rays" transform="rotate(30)"/>
<use xlink:href="#four_rays" transform="rotate(60)"/>
<circle r="17" fill="#000095"/>
<circle r="15" fill="#fff"/>
</svg>
这是一个使用 ListWidget 和 TranscludeWidget 来显示所有语言图标网格的示例,那些条目含标签为 <<tag Language>> 和 <<tag Icon>>。
<style>
.language-gallery img {
width: 5em;
height: auto;
margin: 0.5em;
-webkit-box-shadow: 2px 2px 5px rgba(0,0,0,0.2);
-moz-box-shadow: 2px 2px 5px rgba(0,0,0,0.2);
box-shadow: 2px 2px 5px rgba(0,0,0,0.2);
}
</style>
<div class="language-gallery">
<$list filter="[all[tiddlers+shadows]tag[Language]tag[Icon]]">
<span title=<<currentTiddler>>>
<$transclude/>
</span>
</$list>
</div>
!! 语言插件
TiddlyWiki 的核心用户接口有20多种语言版本。您可以按照[[从插件程序库安装插件|Installing a plugin from the plugin library]]的说明,安装语言插件。您可以使用侧边栏中的''工具''页签的''语言''按钮改变当前语言。
通过学习如何[[将 TiddlyWiki 翻译成您的语言|Translate TiddlyWiki into your language]],您可以贡献新的语言给程序库。
!! 语言版本
部份语言,预先构建额外的翻译文档的版本:
<<list-links "[tag[Languages]]">>
<<.operator-examples "last">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]last[]]">>
<<.operator-example 2 "[list[Days of the Week]last[5]]">>
<<.operator-example 3 "[tag[Concepts]!sort[title]last[3]]">>
最新的新闻、文章、资源和示例。
<div class="tc-link-info">
<$list filter="[tag[Articles]] [tag[Examples]] [tag[Resources]] [tag[Tutorials]] +[!sort[modified]limit[8]]">
<div class="tc-link-info-item">
! <$link><$view field="title"/></$link>
!!! <a href={{!!url}} target="_blank"><$text text={{!!url}}/></a>
<div class="tc-subtitle">发表于 <$view field="modified" format="relativedate"/></div>
<$transclude/>
</div>
</$list>
</div>
通常 TiddlyWiki 的所有条目的完整内容嵌入于主 HTML 文件。延迟加载是指仅嵌入条目有关的中继数据(也就是说 ''text'' 字段除外的所有的字段),并于需要时再从服务器读取条目内容的技术。
两种配置,可以使用延迟加载:
* 当运行 [[TiddlyWiki on Node.js]],只有图片条目或所有非系统条目可以延迟加载
* 当运行 [[TiddlyWiki in the Sky for TiddlyWeb]],所有条目可以延迟加载
如何实现延迟加载的详细信息请参阅 LazyLoadingMechanism。
! 于 Node.js 延迟加载
要启动 TiddlyWiki 延迟加载图片,使用此指令:
```
tiddlywiki --listen root-tiddler=$:/core/save/lazy-images
```
要套用延迟加载到所有非系统条目,使用此指令:
```
tiddlywiki --listen root-tiddler=$:/core/save/lazy-all
```
TiddlyWiki 当前只实现[[延迟加载|LazyLoading]]运行于浏览器与 TiddlyWeb 兼容的服务器的对话。
在 [[TiddlyWeb 的配置|TiddlyWiki in the Sky for TiddlyWeb]],浏览器首先请求每个条目的 "精简" 版本 (包含除了 `text` 字段之外的所有字段)。随后,试图以 `wiki.getTiddler()` 读取那些精简的条目,只返回精简的字段,但尝试使用 `wiki.getTiddlerText()` 来读取,将触发异步加载完整条目内容,从而触发刷新循环,更新显示以反映新加载的条目。遍历所有条目的小工具都是好的;只有当其触发 `wiki.getTiddlerText()` 的条目,才会被加载。
延迟加载也可以用于 TiddlyWiki 自己的服务器。核心提供了一个范本,使图像能够被延迟加载,而其他条目则以通常的方式打包到初始的 HTML 文件中。
内置在 TiddlyWiki5 中的基于浏览器的搜索,将只搜索已完全加载的条目内容。期望当在主从式配置中使用延迟加载时,真正需要处理搜索操作的是服务器,因为它只是可以 "查看" 所有条目的内容的服务器。因此,计划是将内置搜索与 TiddlyWeb 的搜索 API 集成在一起。最简单的方法是任何本地搜索都会触发异步服务器端搜索。搜索结果将被异步加载,这样它们将动态显示在本地搜索结果中。
一个基于 [[Leaflet|http://leafletjs.com/]] 程序库的地图插件。允许您基于条目中包含的地理数据创建地图。
{{!!url}}
<<<
The [[leaflet plugin|http://sycom.github.io/TiddlyWiki-Plugins/#Leaflet%20plugin]] is a (working) attempt to integrate the [[leaflet|http://leafletjs.com/]] library in TiddlyWiki in order to display geographical purpose tiddlers.
For now `<$leafmap>` widget displays an interactive map. Select size, location and zoom, clustering distance, and background. You can display data : geojson, point(s), polygon(s) and/or polyline(s) directly or calling //GeoTiddler//(s). Tiddler can be called individually, by list or with a [[filter|Filters]].
Have a look at [[demo page on the web|http://sycom.github.io/TiddlyWiki-Plugins/#A%20plugin%20collection:%5B%5BA%20plugin%20collection%5D%5D%20%5B%5BLeaflet%20plugin%5D%5D]].
<<<
了解有关使用 TiddlyWiki 的更多信息:
<<list-links "[tag[Learning]]">>
另请参阅完整的 [[参考|Reference]],包括高端的 WikiText、宏、小工具、筛选器等等。
<<.from-version "5.1.20">>
<<.operator-examples "length">>
<<.operator-example 1 "[[abc]length[]]">>
<<.operator-example 2 "[tag[HelloThere]length[]]">>
TiddlyWiki 以[[宽松的 BSD 3-Clause 授权|https://opensource.org/licenses/BSD-3-Clause]]发布,授权内容存放在[[影子条目|ShadowTiddlers]] [[$:/core/copyright.txt]]:
<div style="font-size: 0.7em;line-height:1.4;">
{{$:/core/copyright.txt}}
</div>
通俗地说,该授权为您可以取得 TiddlyWiki,并用其做任何您想要做的事,无需付任何授权费用或其他法律义务给 ~TiddlyWiki 的创作者或其他任何人。交换条件是不保证或担保如同 ~TiddlyWiki 的开放源码项目。您不能因使用 ~TiddlyWiki 造成的任何丢失或毁损,而对 ~TiddlyWiki 的贡献者提出诉讼︰即使您的数据是由于涉及 ~TiddlyWiki 的一连串的悲惨情况而丢失。
恭敬地请您归属于该项目,但没有义务这样做。
为免生疑问,任何您选择存放于您自己的 ~TiddlyWiki 副本内的信息仍然是您的;使用 ~TiddlyWiki 发布的内容,不会改变您对该内容所有的任何权利。
`limit[n]` 和 `!limit[n]` 分别与 `first[n]` 和 `last[n]` 同义。
<<.operator-examples "limit">>
<<.operator-example 1 "[sort[modified]!limit[20]]" "20 个最近修改过的条目">>
<<.operator-example 2 "[has[created]sort[created]limit[10]]" "在此维基中最早创建的 10 个条目">>
<<.def lingo>> [[宏|Macros]]翻译 ~TiddlyWiki 的用户接口为其他语言,传回一段用户当前选定语言的文本。
由语言插件提供的可翻译文本,含以 `$:/language/` 开头的特定名称的条目。
!! 参数
;title
: 包含该文本的影子条目的名称。会自动加上前缀 `$:/language/`
<<.macro-examples "lingo">>
此示例演示用于为一个新建条目的名称当作基底的文本:
<$macrocall $name=".example" n="1" eg="""<<lingo DefaultNewTiddlerTitle>>"""/>
此示例演示一年中第八个月份的名称,用于[[格式化日期|DateFormat]]:
<$macrocall $name=".example" n="2" eg="""<<lingo Date/Long/Month/8>>"""/>
! 简介
链接捕手小工具捕捉 [[WidgetMessage: tm-navigate]],通过运行任何或所有这些动作,被分派于其子内容:
* 发送一个不同的小工具消息
* 设置条目为导航的条目名称
* 设置条目为指定的值
* 运行一系列的 ActionWidgets
! 内容与属性
`<$linkcatcher>` 小工具的内文将正常显示。
|!属性 |!说明 |
|to |可选条目名称被设置为导航条目的名称 |
|message |一个可选的识别,当导航被捕获时送出的[[小工具消息|Messages]] |
|set |当导航发生时,该可选条目名称被设置为指定的值 |
|setTo |由 `set` 属性分配的值 |
|actions |链接被捕获时要运行的操作。在动作字符串中,变量 "navigateTo" 包含正在导航的条目名称。<br /><<.from-version "5.1.23">> <<.def "modifier">> 变量列出了调用动作时,按下的修饰键。可能的修饰键为 ''ctrl''、''ctrl-alt''、''ctrl-shift''、''alt''、''alt-shift''、''shift'' 和 ''ctrl-alt-shift'' |
WikiText 的一个关键功能,链接到其他条目或外部网站。
! 手动链接
以条目名称链接到条目:
```
[[Tiddler Title]]
```
链接到条目且指定链结的标题:
```
[[Displayed Link Title|Tiddler Title]]
```
您也可以从编辑器工具见一个链接。点击''链接'' (<<.icon $:/core/images/link>>),然后搜索且选择一个条目
! 驼峰式链接
条目名称符合驼峰式规则,只要输入此类名称无须双中括号即可自动生成链结,例如: CamelCase
输入前置符号 `~` 即可不生成链结,例如:
<<wikitext-example src:"* ~HelloThere is not a link
* ~http://google.com/ is not a link">>
! 外部链接
链接到外部[[资源|https://en.wikipedia.org/wiki/Web_resource]],例如一个网站或文件,输入其//完整//[[网址|https://en.wikipedia.org/wiki/URL]],包括 [[URI 格式|https://en.wikipedia.org/wiki/URI_scheme]],像是一个协定 (例如 `http://`, `file://`) 或 `mailto`:
```
https://tiddlywiki.com/
[[TW5|https://tiddlywiki.com/]]
[[Mail me|mailto:me@where.net]]
[[Open file|file:///c:/users/me/index.html]]
```
为使此语法得以正常工作,网址必须是可识别的 URL,包含一个协定,例如 `http://` or `file://`。您可以扩展语法强制指定外部链接:
```
[ext[Open file|index.html]]
[ext[Open file|./index.html]]
[ext[Open file|../README.md]]
[ext[Open file|c:\users\me\index.html]]
```
扩充语法仍可用于完整的 URL,虽然在此情况下,并没有必要:
```
[ext[https://tiddlywiki.com]]
[ext[TW5|https://tiddlywiki.com]]
[ext[Open file|file:///c:/users/me/index.html]]
```
您也可用扩充语法来强制生成一个外部链接:
```
[ext[Donate|bitcoin:1aabbdd....?amount=0.001]]
```
! 自定义条目链接
详细信息请参阅 LinkWidget 用于实现条目链接的底层小工具,包括可以用于自定义其行为的宏。
依次处理每个输入的名称。依在条目内文中出现的顺序,生成相应条目的链接清单,并[[主导追加|Dominant Append]] 到运算符的整体输出。
<<.operator-examples "links">>
<<.operator-example 1 "[[HelloThere]links[]]">>
<<.operator-example 2 "[all[current]links[]]" "自此条目[[硬式链接|Hard and Soft Links]]的条目">>
这里有一些硬式链接:
* HelloThere
* [[Filter Operators]]
* [[links Operator]]
此 `link` 小工具用于生成条目链结。 (使用 HTML `<a>` 元素生成外部链接).
! 内容与属性
`link` 小工具的内容在 `<a>` 标记中呈现链接。如果内容为空,则目标条目的名称将呈现为默认值,例如:
* `<$link/>` 相当于 `<$link to=<<currentTiddler>>><$view field="title"/></$link>`
* `<$link to="HelloThere"/>` 相当于 `<$link to="HelloThere">HelloThere</$link>`
|!属性 |!说明 |
|to |链结的目标条目名称 (默认为[[当前条目|Current Tiddler]]) |
|aria-label |可选的辅助标签 |
|tooltip |可选的 WikiText 提示 |
|tabindex |可选的[[当前元素顺序索引|https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/tabIndex]] |
|draggable |"yes" 激活链接可拖动(默认为"yes") |
|tag |可选的标记,以覆写默认的 "a" 元素 |
|class|可选的 CSS classes //除了//默认的 classes (见下文)|
|overrideClass|<<.from-version "5.1.16">> 可选的 CSS classes //代替//默认的 classes |
`link` 小工具的内容呈现于 `<a>` 标记之内。可拖动功能相当于使用以 ''tiddler'' 属性设为链接目标的 DraggableWidget。
`tooltip` 属性的默认值由 <<.vlink tv-wikilink-tooltip>> 变量提供。
这意味着您可以多种方式控制链结提示的内容:
```
<$link to="HelloThere" tooltip="自定义工具提示">Link 1</$link>
<$link to="HelloThere" tooltip="另一个工具提示">{{$:/core/icon}}</$link>
<$set name="tv-wikilink-tooltip" value="I'm a link to {{!!title}}">
<$link to="HelloThere">Link 2</$link>
</$set>
```
显示结果为:
<$link to="HelloThere" tooltip="自定义工具提示">Link 1</$link>
<$link to="HelloThere" tooltip="另一个工具提示">{{$:/core/icon}}</$link>
<$set name="tv-wikilink-tooltip" value="I'm a link to {{!!title}}">
<$link to="HelloThere">Link 2</$link>
</$set>
请注意, `tooltip` 与当前设为链结目标的条目一起呈现。
一个有用的惯例,是要像这样设置提示:
```
\define tv-wikilink-tooltip()
<$transclude field="tooltip"><$transclude field="title"/></$transclude>
\end
```
这将使该工具提示为目标条目的 ''tooltip'' 字段。如果字段中不存在,则会使用条目名称。
! CSS 类别
link 小工具自动确定并将以下类套用于链接:
* `tc-tiddlylink` - 作用于所有链结
* `tc-tiddlylink-external` - 作用于外部、非条目链结
* `tc-tiddlylink-internal` - 作用于条目链结
* `tc-tiddlylink-missing` - 作用于条目链结,目标条目不存在
* `tc-tiddlylink-resolves` - 作用于条目链结,当目标条目已存在
使用 `class` 属性指定其他 css 类,或 `overrideClass` 仅套用于上述默认值,例如在 LinkCatcherWidget 中使用:
<<wikitext-example-without-html """*<$link class="example">这里</$link> 添加 `example` class。
*<$link overrideClass="example">这里</$link> 仅套用 `example` class 。
*<$link overrideClass="">这里</$link> 没设置 class 。""">>
! `href` 生成
以下过程将用来生成 `<a>` HTML 元素的 `href` 属性 :
# <<.from-version "5.1.15">> 如果 <<.vlink tv-get-export-link>> 被定义将其调用,以转换目标条目名称为 `href` 的值
#* 实际上,只能使用[[JavaScript macro|宏]]
# 如果 <<.vlink tv-filter-export-link>> 被定义将其解译为筛选器,转换目标条目名称为 `href` 的值
# 如果 <<.vlink tv-wikilink-template>> 被定义将其视为一种特定的宏,可以运行目标条目名称的有限转换为 `href` 的值
# 否则,目标条目名的 URI 编码是要创建该 `href`
! 设置变量
* <<.vlink tv-wikilinks>>
* <<.vlink tv-filter-export-link>>
* <<.vlink tv-wikilink-template>>
* <<.vlink tv-wikilink-tooltip>>
* <<.vlink tv-get-export-link>>
<<.place R>> 可以引用一个字段或属性。语法请参阅 [[TextReference]]。
* 如果没有指定,则缺省使用 <<.field list>> 字段。所以 `[list[T]]` 输出列于条目 T 的 <<.field list>> 字段中的名称。
* 如果 <<.place R>> <<.em 仅>> 由字段或属性组成,则引用的条目部分缺省为[[当前条目|Current Tiddler]]。所以 `[list[!!tags]]` 输出列于当前条目的 <<.field tags>> 字段中的名称。
<<.operator-examples "list">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[HelloThere]]">>
<<.operator-example 2 "[list[Days of the Week!!short]]">>
<<.def list-links>> [[宏|Macros]]返回一个链接到[[甄选条目|Title Selection]]的格式化清单。
如果条目具有 <<.field caption>> 字段,则显示此字段而非条目名称。如果字段 <<.field caption>> 为空, 则显示一个空白项。
注意:没有给定任何输入标题的[[筛选器 run|Filter Run]] 的每个第一个 [[step|Filter Step]] 都会接受 <$link to="all Operator">[all[tiddlers]]</$link> 的输出作为输入。这意味着全部现有的非[[影子|ShadowTiddlers]]条目。
!! 参数
;filter
: 一个选择要包括哪些条目的[[筛选器|Filters]]
;type
: 一个用于清单中每个项目的 HTML 元素,默认为 `ul`
;subtype
: 一个用于清单中每个项目的 HTML 元素,默认为 `li`
;class
: 一个整体的清单元素的 [[CSS|Cascading Style Sheets]] 类别
;emptyMessage
: 若无具有指定标签的条目,可选的用以显示的维基文本
<<.macro-examples "list-links">>
此示例列出名称开头为 J 的所有条目:
<$macrocall $name=".example" n="1" eg="""<<list-links filter:"[prefix[J]]">>"""/>
此示例列出核心宏的文档条目,每个皆有 <<.field caption>> 字段:
<$macrocall $name=".example" n="2" eg="""<<list-links filter:"[tag[Core Macros]]">>"""/>
<<.def list-links-draggable>> [[宏|Macros]] 将条目的 ListField 呈现为可以通过[[拖放|Drag and Drop]]重新排序的链接清单。
!! 参数
;tiddler
: 包含该清单的条目名称
;field
: 包含该清单的字段名称 (缺省为 `list`)
;type
: 要用于该清单包装的元素标记 (缺省为 `ul`)
;subtype
: 要用于列表项目的元素标记 (缺省为 `li`)
;class
: 可选的要添加到包装元素得空格分隔类别
;itemTemplate
: 可选的条目名称作为用于呈现清单项目的范本
若未提供 `itemTemplate` 参数,则将清单项目呈现为简单的链接。在 `itemTemplate` 中,[[currentTiddler 变量|currentTiddler Variable]]参照至当前清单项目。
<<.macro-examples "list-links-draggable">>
<$macrocall $name=".example" n="1" eg="""<<list-links-draggable tiddler:"Days of the Week">>"""/>
<<.def list-tagged-draggable>> [[宏|Macros]] 将具有特定标签的条目呈现为可以通过[[拖放|Drag and Drop]]重新排序的链接清单。
!! 参数
;tag
: 标签的标题
;subFilter
: 可选子筛选器,筛选出不需要的项目的 (例如 `!tag[done]`)
;itemTemplate
: 可选的条目名称,用作呈现清单项目的范本
;emptyMessage
: 若无具有指定标签的条目,可选的用以显示的维基文字
请注意,[[排序|Order of Tagged Tiddlers]]是通过将一个新的清单分配给标签条目的 `list` 字段来实现。任何带有该标签的其他条目的 `list-before` 或`list-after` 字段也被会删除,以确保遵守 `list` 字段的排序。
若未提供 `itemTemplate` 参数,则将清单项目呈现为简单的链接。在 `itemTemplate` 中,[[currentTiddler 变量|currentTiddler Variable]]参照至当前清单项目。
<<.macro-examples "list-tagged-draggable">>
<$macrocall $name=".example" n="1" eg="""<<list-tagged-draggable tag:"Features">>"""/>
<<.def list-thumbnails>> [[宏|Macros]]用于创建可链接缩略图皮肤的清单。
!! 参数
;filter
: 选择缩略图的筛选器
;width
:缩略图宽度 (默认 280 像素)
;height
:缩略图的高度 (默认 157 像素)
<<.macro-examples "list-thumbnails">>
此示例列出了具有标签 "HelloThumbnail" 的所有条目:
<$macrocall $name=".example" n="1" eg="""<<list-thumbnails filter:"[tag[HelloThumbnail]]" width:"168" height:"95">>"""/>
<<.field F>> 被假设是一个[[名称清单|Title List]]。
依次处理每个输入的名称。生成一个于 <<.place F>> 字段中提及它的条目的清单(没有特定的顺序),并[[主导追加|Dominant Append]]到运算符的整体输出。
<<.operator-examples "listed">>
<<.operator-example 1 "[[HelloThere]listed[]]">>
<<.operator-example 2 "[all[current]listed[my-special-list]]">>
<<.from-version "5.1.18">> 有关 TiddlyWiki 的网页服务器功能的详细信息,请参阅 WebServer。
{{$:/language/Help/listen}}
条目的 `list` [[字段|TiddlerFields]]是一个可选功能,可以用来帮助架构你的内容。其值为一[[名称清单|Title List]],且有多种用法:
* `list` 条目的列表字段,当成标签使用决定带有该标签的条目的顺序 - 详见 [[Tagging]]
* `list` [[筛选器|Filters]] 从列表中选择条目
* `listed` [[筛选器|Filters]] 自表列选定的条目选择条目
* NavigatorWidget 操作 StoryList 条目,此条目包含 `list` 字段,显示于主要故事栏的条目
! 符号清单
您可以使用 `*` 生成无序的符号清单 (<<.icon $:/core/images/list-bullet>>):
<<wikitext-example src:"* First list item
* Second list item
** A subitem
* Third list item
">>
! 数字清单
数字清单则使用 `#` 而非 `*` (<<.icon $:/core/images/list-number>>):
# First item
# Second item
# Third item
您也可混合数字与符号清单:
<<wikitext-example src:"* To do today
*# Eat
* To get someone else to do
*# This
*# That
*## And the other
">>
此例是另一个方式,用数字作为第一级:
<<wikitext-example src:"# To do today
#* Eat
# To get someone else to do
#* This
#* That
#** And the other
">>
! CSS 类别
您也可以指定一个 CSS 类别到此符号清单的个别成员:
<<wikitext-example src:"* List One
*.MyClass List Two
* List Three
">>
! 混合清单和引言区块
请注意,[[引言区块|Block Quotes in WikiText]]可以与清单混合。例如:
<<wikitext-example src:"* List One
** List Two
**> A quote
**> Another quote
* List Three
">>
! 清单中的段落
用换行符号分隔清单中的项目,使它不可能包括清单项目内的换行符号。有几个解决方法:
您可以从另一条目嵌入段落内容。例如:
```
* First entry
* <$transclude tiddler="MyTiddler" mode="block"/>
* Third entry
```
也可以使用一个HTML "div" 元素包含多行内容。例如:
```
# Step 1
# Step 2
# Step 3<div>
前面是第一部份的几个段落。请注意,明显的本段落之前有两个换行。
接着是第二部份的几个段落。
</div>
# Step 4
# Step 5
# Step 6
```
! 简介
`list` 小工具显示一符合[[筛选器|Filters]]的清单,有多种用途:
* 显示链接的清单,例如:于侧边栏的清单
* 显示自定义的清单,例如:所有 "标签为 '工作' 但不为 '已完成'" 的条目
* 表列条目的每一个标签
* 处理主要的故事河(打开中的条目)
由嵌入依序通过模板来显示条目。有几种方法来指定的模板,控制清单的行为。
! 示例
''普通清单''
```
<$list filter="[tag[ListWidget]sort[title]]"/>
```
显示为:
<<<
<$list filter="[tag[ListWidget]sort[title]]"/>
<<<
''自定义项目输出''
```
<$list filter="[tag[ListWidget]sort[title]]">
<<currentTiddler>>
{{||$:/core/ui/ViewTemplate/tags}}
</$list>
```
显示为:
<<<
<$list filter="[tag[ListWidget]sort[title]]">
<<currentTiddler>>
{{||$:/core/ui/ViewTemplate/tags}}
</$list>
<<<
''自定义项目模板''
```
<$list filter="[tag[ListWidget]sort[title]]" template="$:/core/ui/ViewTemplate/subtitle"/>
```
显示为:
<<<
<$list filter="[tag[ListWidget]sort[title]]" template="$:/core/ui/ViewTemplate/subtitle"/>
<<<
!! 分组清单
有关如何使用 ListWidget 生成嵌套式与群组清单,请参阅 GroupedLists 。
! 内容与属性
`<$list>` 小工具的内容是一个可选的模板,用于呈现清单中的每个条目。
`<$list>` 小工具的动作则取决于筛选器的结果,结合指定模板的若干选项:
* 如果筛选器的计算结果为空列表,则呈现 ''emptyMessage'' 属性的文本,并忽略所有其他模板
* 否则,如果指定了 ''template'' 属性,则将其视为条目的名称,用作呈现列表中每个项目的模板
* 否则,如果 `<$list>` 小工具的内容不是空白,则将其用作呈现列表的每个项目的模板
* 否则,将使用一个由 `<span>` 或 `<div>` 元素组成的默认模板,围绕在指向该项目的链接上
|!属性 |!说明 |
|filter |要显示的[[筛选器|Filters]] |
|template |用于清单中嵌入条目的模板条目的名称。当没有指定模板时,ListWidget 的内容作为项目模板。由于没有内容,返回简单的条目链接。 |
|editTemplate |于编辑模式的[[草稿条目|DraftMechanism]]的替代模板 |
|variable |存放清单中的条目名称于[[变量|WidgetVariables]]名称。默认为 ''currentTiddler'' |
|counter |<<.from-version "5.1.24">> 一个[[变量|Variables]]的可选名称,保存每个列出条目的基于 1 的数字索引(见下文) |
|emptyMessage |该清单为空白时显示的消息 |
|storyview |可选的模块名称负责清单的动画和处理 |
|history |包含导览历史的条目名称 |
!! `counter` 属性
可选的 `counter` 属性指定一个变量的名称,以保留清单中当前项目的数字索引。
还设置了两个额外的变量,表示清单中的第一个和最后一个项目:
* `<counter-variable-name>-first` 设置为 `yes` 是清单中的第一个项目,`no` 则为其他
* `<counter-variable-name>-last` 设置为 `yes` 是清单中的最后一个项目,`no` 则为其他
例如:
```
<$list filter="[tag[About]sort[title]]" counter="counter">
<div>
<<counter>>: ''<$text text=<<currentTiddler>>/>'' (is first: <<counter-first>>, is last: <<counter-last>>)
</div>
</$list>
```
显示为:
<<<
<$list filter="[tag[About]sort[title]]" counter="counter">
<div>
<<counter>>: ''<$text text=<<currentTiddler>>/>'' (is first: <<counter-first>>, is last: <<counter-last>>)
</div>
</$list>
<<<
请注意,使用 `counter` 属性会降低列表小工具的性能,因为其通过移动清单项目,而不是重新渲染它们来防止刷新优化。
!! 编辑模式
`<$list>` 小工具可选择性地以不同的模板呈现草稿条目处理编辑,请参阅 DraftMechanism。
!! `storyview` 属性
`storyview` 属性指定一个可选模块名称,可以更改清单(包括导航)的动画处理。内核附带以下 `storyview` 模块:
* `classic`: 以排序条目呈现清单
* `zoomin`: 只从清单中以缩放动画呈现当前条目,导航于条目之间
* `pop`: 缩放式呈现条目
!! 处理历史纪录和导航
可选的 `history` 属性,指定的条目名称为导航用途,用以追踪当前条目。当历史条目更改清单视图的回应,经由告诉 listview 来处理导航至新条目。详细信息请参阅 NavigationMechanism。
!! 附加说明和边缘案例
* 如果 `filter` 属性不存在,则使用默认的 `[!is[system]sort[title]]`
* 如果 list 完全为空(即开始和结束标记之间只有空格),则其行为就像内容是一个 `DIV` 或 `SPAN` 包含一个链接至当前条目(如果 list 小工具处于区块模式,则其为一 `DIV`,或若其处于内联模式,则为 `SPAN`)
* 如果 `template` 属性不存在,那么 list 小工具的内容将用作模板,除非小工具完全为空,在这种情况下使用默认模板
{{$:/language/Help/load}}
对于那些在一般维基中使用许多标签或存放许多不同主题的人来说,Locator 插件是一个目录小工具和一个增强的搜索引擎,使您有机会依相关标签筛选结果。与目录、标准搜索和标签列表不同,此插件以有机、协作的方式提供这些功能。
{{!!url}}
<<.from-version "5.1.23">>
<<.operator-examples "log">>
以 `2` 为底 `8` 的对数:
<<.operator-example 1 "[[8]log[2]]">>
以 `10` 为底 `100` 的对数:
<<.operator-example 2 "[[100]log[10]]">>
自然对数 10 (基数为 `e`),在数学上相当于 `ln(10)`:
<<.operator-example 2 "[[10]log[]]">>
! 简介
<<.from-version "5.1.23">> ''log'' 小工具可用于将调试信息输出到大多数浏览器都支持的 [[JavaScript 主控台|Web Developer Tools]] 。
<<.tip """ 与 ActionWidgets 一起使用,请参阅使用相同参数的 [[ActionLogWidget]]""">>
! 内容和属性
''log'' 小工具是不可见的。其中的任何内容将被忽略。请注意,该小工具将在首次呈现时,和每次刷新时记录到控制台。
呈现小部件时,所有属性的名称和值将记录到 JavaScript 主控台。
此外,还有可选属性可以使用:
|! 可选属性 |! 描述 |
|$$filter|还将记录匹配此筛选器的所有变量。 |
|$$message |要显示为记录信息的标题的消息。当按顺序使用多个 `log` 小工具时,非常有用。 |
|$$all |设置为 "yes" 以记录折叠表中的所有变量。请注意,如果没有指定任何要记录,则始终记录所有变量。|
! 示例
下面是记录两个变量的示例:
```
<$log myVar=<<myVar>> otherVar=<<otherVar>>/>
```
记录所有变量:
```
<$log />
```
记录两个变量以及所有内核变量(以 `tv-` 开始):
```
<$log myVar=<<myVar>> other={{!!status}} $$filter="[prefix[tv-]]"/>
```
<<.from-version "5.1.15">>
此操作符的动作如下:
* 套用指定的首码至每个输入的条目名称 , 生成新的条目名称清单
* 嵌入每个那些条目的值
** 取代佚失或空值的默认值
* 返回值的清单
<<.operator-examples "lookup">>
<<.operator-example 1 "[all[shadows+tiddlers]tag[$:/tags/PageControls]lookup[$:/config/PageControlButtons/Visibility/]]" "取回每个页面控制按钮的可见性状态">>
<<.operator-example 2 "[all[shadows+tiddlers]tag[$:/tags/PageControls]lookup:show[$:/config/PageControlButtons/Visibility/]]" "取回每个页面控制按钮的可见性状态,这次使用默认值">>
<<.from-version "5.1.20">>
另请参阅 [[uppercase 运算符|uppercase Operator]]和 [[sentencecase 运算符|sentencecase Operator]]。
<<.operator-examples "lowercase">>
<<.operator-example 1 "[[Abc]lowercase[]]">>
<<.operator-example 2 "[tag[HelloThere]lowercase[]]">>
<<.preamble """以下是宏调用的 WikiText 语法,使用[[语法图表|Railroad Diagrams]]的形式演示。另有一个[[简单概述|Macro Calls in WikiText]]。
""">>
<$railroad text="""
"<<" " 名称 " [: " 空格 " [:{" 参数值 "}] ]">>"
"""/>
<<.place 空格>>表示一个[[空白字符|Filter Whitespace]]串行。
[[宏|Macros]]<<.place 名称>>是一个除了 `(` 或 `>` 以外的非空白字符串行
每个<<.place 参数值>>都有以下语法:
<$railroad text="""
[: " 参数名称 " [:" 空格 "] ":" [:" 空格 "] ] " 参数值 " [: " 空格 "]
"""/>
<<.place 参数名称>>是一个由字母 (`A`--`Z`, `a`--`z`)、数字 (`0`--`9`)、连字号 (`-`) 和底线 (`_`) 组成的字符串行。
指定<<.place 参数值>>的方式如下:
<$railroad text={{$:/editions/tw5.com/railroad/macro-parameter-value}}/>
调用[[宏|Macros]],于名称和所有参数值于前后加上 `<<`双角括号`>>`
默认情况下,参数以宏定义中的相顺序同列出。为清楚起见或者要修改顺序,参数可使用其名称。
如果参数不指定任何值,则以宏定义中针对该参数的默认值替换。(如果未定义默认值,则该参数为空白)。
每个参数的值可以包裹于`'`单引号`'`、`"`双引号`"`、`"""`三重双引号`"""`或`[[`双方括弧`]]`。三重双引号允许包含几乎所有的值。如果参数值未包含空格、单引号或双引号,则无须分隔符号。
此语法也有一个更正式的[[陈述|Macro Call Syntax]]。
此语法其实是 <<.wlink MacroCallWidget>> 小工具的简写形式。该小工具本身提供了更大的灵活性,包括[[嵌入|Transclusion]]参数值的能力,或者由附加的宏产生它们。
由于宏是简单参数化[[变量|Variables]],变量的值可以使用相同的技术插入。
[[范例|Macro Calls in WikiText (Examples)]]
!! 命名与未命名参数
在维基文本表示法中,与仅定义值相比,使用命名参数始终是更安全的选择。未命名参数可能会产生令人困惑的副作用。例如,设想一些宏的第一个参数指定一个[[状态条目|StateMechanism]],而第二个是用于一个[[模板|Transclusion with Templates]]条目。如果您不小心忘记定义的第一个参数或弄错顺序,你的宏下次运行时,甚至可能使用预览被触发,你的模板条目可能无意中被意图成为状态的内容覆盖。
\define sayhi-example-1() <<sayhi>>
\define sayhi-example-2() <<sayhi 疯面仔>>
\define sayhi-example-3() <<sayhi "唐老鸭" 狄斯奈乐园>>
\define sayhi-example-4() <<sayhi "米老鼠" "老鼠屋">>
\define sayhi-example-5() <<sayhi name:'米妮' address:[[老鼠屋]]>>
\define sayhi-example-6() <<sayhi address:"嘎嘎塔" name:"唐老鸭">>
\define sayhi-example-7()
<<sayhi "米老鼠" """老鼠屋,
啮齿道,
吱吱市,
大鼠国""">>
\end
<$importvariables filter="$:/editions/tw5.com/macro-examples/say-hi">
<$codeblock code={{$:/editions/tw5.com/macro-examples/say-hi}}/>
<$macrocall $name=".example" n="1" eg=<<sayhi-example-1>>/>
<$macrocall $name=".example" n="2" eg=<<sayhi-example-2>>/>
<$macrocall $name=".example" n="3" eg=<<sayhi-example-3>>/>
<$macrocall $name=".example" n="4" eg=<<sayhi-example-4>>/>
<$macrocall $name=".example" n="5" eg=<<sayhi-example-5>>/>
<$macrocall $name=".example" n="6" eg=<<sayhi-example-6>>/>
<$macrocall $name=".example" n="7" egvar="sayhi-example-7"/>
</$importvariables>
<<.preamble """以下是 `\define` 编译指示的语法,使用[[语法图表|Railroad Diagrams]]的形式演示。另有一个[[简单概述|Macro Definitions in WikiText]]。""">>
<$railroad text="""
"\define" " 空格 " " 名称 " " 参数 " [:" 空格 "] " 其余 "
"""/>
<<.place 空格>>表示一个[[空白字符|Filter Whitespace]]串行。
[[宏|Macros]]<<.place 名称>>是一个除了 `(` 或 `>` 以外的非空白字符串行
参数声明清单 (<<.place 参数>>) 都有以下语法:
<$railroad text="""
"(" [:" 分隔符号 "] [:{ " 参数 " " 分隔符号 " }] ")"
"""/>
参数的<<.place 分隔符号>>是一个与<<.place 参数名称>>不匹配的任何字符串行。除其他外,包括逗号、空格和分行符号。
<<.place 参数名称>>是一个由字母 (`A`--`Z`, `a`--`z`)、数字 (`0`--`9`)、连字号 (`-`) 和底线 (`_`) 组成的字符串行。
每个<<.place 参数>>都有以下语法:
<$railroad text="""
" 参数名称 " [: [:" 空格 "] ":" [:" 空格 "] " 缺省 " ]
[: " 空格 "]
"""/>
可选的参数<<.place 缺省>>值指定的方式如下:
<$railroad text={{$:/editions/tw5.com/railroad/macro-parameter-value}}/>
定义的<<.place 其余>>具有以下语法:
<$railroad text="""
( " 片段 " | lf " 片段 " lf "\end" [:" 空格 "] ) lf
"""/>
其中 <<.place lf>> 表示一个换行符号。
<<.place 片段>>是不会结束宏定义的任何字符串行。也就是说,单行片段不能包含分行符号,而多行片段不能包含 `\end`。
片段可以包含预留位置使用以下语法:
<$railroad text="""
( "$" "名称" "$" | "$" "(" "名称" ")" "$" )
"""/>
[[宏|Macros]]使用[[编译指示|Pragma]] `\define` 定义。如同任何编译指示,宏定义必须位于条目的开始位置。
该定义的第一行指定宏的名称和所有参数。每个参数都有一个名称,以及用于调用宏而未指定参数值时,可选用的默认值。接下来的行包含宏内容(即由宏名称所代表的片段),直到出现一行 `\end`:
<$codeblock code={{$:/editions/tw5.com/macro-examples/say-hi}}/>
或者,可以於单行无 `\end` 标记,指定整个的定义:
```
\define sayhi(name:"Bugs Bunny") Hi, I'm $name$.
```
此语法也有一个更正式的[[陈述|Macro Definition Syntax]]。
!! 访问变量和参数
在宏的内部,有一些方法用于访问在宏或宏参数清单之外定义的变量和参数。
|语法|说明|h
|`$...$`|在宏参数清单中定义的参数的文本替换 |
|`<<__...__>>`|在宏参数清单中定义的参数,将参数当作变量访问 |
|`$(...)$`|变量占位符到宏外定义的变量的文本替换 |
|`<<...>>`|在宏外部定义的变量 (或其他宏) 的变量访问 |
<br>
!!! 占位符 `$(...)$`
宏可以包含参数的占位符。这些由包含美元符号之间的参数名称组成,例如 `$this$`。
该宏也可以包含[[变量|Variables]]的占位符。这些由包含变量名称(或宏名称)的美元符号和小括号组成,例如 `$(this)$`。
每当宏被调用,参数或变量的实际值取代占位符:
<$importvariables filter="$:/editions/tw5.com/macro-examples/say-hi-using-variables">
<$codeblock code={{$:/editions/tw5.com/macro-examples/say-hi-using-variables}}/>
<$macrocall $name=".example" n="1"
eg="""<$set name="address" value="兔子坑">
<<say-hi-using-variables>>
</$set>"""/>
</$importvariables>
!!! 参数当作变量 `<<__...__>>`
wikitext 宏的参数可以通过使用语法 `<<__...__>>` 当作变量来访问,亦即该参数名称由双底线括起来。。例如,上面的示例也可以表示为:
```
\define sayhi(name:"Bugs Bunny") Hi, I'm <$text text=<<__name__>>/>.
```
当作变量访问参数仅在 wikified 的宏中有效,例如,当宏用作属性值时。该技术的优点是,它可以避免将参数值替换为文本字符串,这反过来又有助于避免包含引号的参数的问题。
例如,考虑这个宏。使用单一参数作为参数,调用另一个宏:
```
\define film-quote(line) <$macrocall $name="anothermacro" actor="Bugs Bunny" line="""$line$"""/>
```
如果被调用的宏的参数有三个双引号 (例如,`<<film-quote 'I quote thrice """ - see!?'>>`),上面的代码将会失败。使用参数变量提供了一种解决方法:
```
\define film-quote(line) <$macrocall $name="anothermacro" actor="Bugs Bunny" line=<<__line__>>/>
```
!! 范围
宏可用于定义它的条目,以及该条目嵌入的任何条目。
为了使宏可用于所有条目,在具有标签 <<.tag $:/tags/Macro>> 的条目中定义它。
也可以将宏写成一个 [[JavaScript 模块|https://tiddlywiki.com/dev/index.html#JavaScript%20Macros]]。~JavaScript 宏可用于所有条目,并提供最大的灵活性。
一个条目可以使用 <<.wlink ImportVariablesWidget>> 小工具,手动从其他条目的[[选定条目|Title Selection]]导入宏定义。
<<list-links filter:"[tag[Macro Syntax]]">>
! 简介
相较于 [[Macros in WikiText]] 中,常用的 `<<macroname>>` 语法,宏调用小工具提供更灵活的替代语法来调用宏。
例如,名为 `italicise` 的宏,需要单一参数 `text` 通常会这样调用:
```
<<italicise "Text to be made into italics">>
<<italicise text:"Text to be made into italics">>
```
可以使用宏调用小工具,调用相同的宏,像这样:
```
<$macrocall $name="italicise" text="Text to be made into italics"/>
<$macrocall $name="italicise" text={{Title of tiddler containing text to be italicised}}/>
<$macrocall $name="italicise" text=<<textMaker "Another macro to generate the text to be italicised">>/>
```
小工具公式的优点是:
* 宏参数指定为小工具属性,从而允许间接通过 `{{title!!field}}`、`<<macroname>>`或 `{{{filter}}}`。
* 可以从几个选项中,选择输出格式:
** `text/html` 维基化宏的结果
** `text/plain` 维基化宏的结果,然后提取纯文本字符。 (亦即忽略 HTML 标记)
** <<.from-version "5.1.23">> `text/raw` 返回宏的结果,不进行维基化
你可以看到在内核内的宏调用小工具的几个例子:
* 表列模块信息:[[$:/snippets/modules]]
* 表列字段信息:[[$:/snippets/allfields]]
* 生成 `data:` URIs: [[$:/themes/tiddlywiki/starlight/styles.tid]]
! 内容与属性
此 `<$macrocall>` 小工具的内文会被忽略。
|!属性 |!说明 |
|$name |调用的宏名称 |
|$type |宏内文应被解析的内容类型 (默认为 `text/vnd.tiddlywiki`) |
|$output |输出显示的内容类型 (默认为 `text/html`, 也可为 `text/plain` 或 `text/raw`) |
|//parameters// |宏参数被指定为属性 |
<<.def 宏>>是一些文本片段。WikiText 可使用该名称为[[嵌入|Transclusion]]片段的简写方法。这种嵌入方式被称为 <<.def "调用宏">>,且每个调用可以提供一组不同的参数,替换在片段中的特定占位符。
有关语法,请参阅 [[Macros in WikiText]]。
多数宏其实只是参数化[[变量|Variables]]。
他们是使用 `\define` [[编译指示|Pragma]]创建。(此于背景转换为 <<.wlink SetWidget>>,亦即宏和变量是一体两面。)
片段及其传入的参数值被视为没有 WikiText 意含的简单的字符串,至少要等到占位符已填写和宏调用返回后。这意味着宏可以组装并返回一个 ~WikiText 的组件的完整语法,例如[[链接|Linking in WikiText]]。(进一步的相关讨论,请参阅[[嵌入和替代|Transclusion and Substitution]]。)
宏调用所返回的字符串从任何 ~WikiText 组件周围单独解析。所以安全的方式来插入特殊字符串行(如 `[[` 或 `<`) 而不会触发其正常的 ~WikiText 意思是把它包裹在一个宏。
在片段本身检测到的唯一标记是 `$name$`(宏参数的占位符)和 `$(name)$`( [[变量|Variables]]的占位符)。
<<.mlink dumpvariables>> 宏列出于该小工具树中的位置可用的所有变量(包括宏)。
<<.wlink ImportVariablesWidget>> 小工具可以用来将宏的定义复制到[[小工具树|Widgets]]的另一个分支。~TiddlyWiki 内部使用这种技术来实现全域宏 -- 亦即定义于标签为 <<.tag $:/tags/Macro>> 的条目内的任何宏。(标签 <<.tag $:/tags/Macro/View>> 用于定义仅在主视图模板和预览皮肤中可用的宏)。
为了最大的灵活性,宏也可以<<.js-macro-link "被写成为 JavaScript modules">>。
通过于[[嵌入|Transclusion]]设置[[变量|Variable]],可以生成参数化的宏调用的类似的效果 。
~TiddlyWiki 核心已内置[[一些宏|Core Macros]]。
[[宏|Macros]]的使用于 WikiText 有两个不同的面向:
* [[定义宏|Macro Definitions in WikiText]]
* [[调用宏|Macro Calls in WikiText]]
//这是[[工作管理示例|TaskManagementExample]]的样品任务//
<<.def makedatauri>> [[宏|Macros]]取一段文本和相关的[[内容类型|ContentType]],并返回对应的 [[data URI|Data URI]]。
<<.var makedatauri>> 用来实现 <<.mlink datauri >> 宏。
!! 参数
;text
: 欲转换成 data URI 的内容
;type
: [[内容类型|ContentType]]
;_canonical_uri
: 可选的 ''_canonical_uri'' 内容地址
<<.macro-examples "makedatauri">>
<$macrocall $name=".example" n="1" eg="""<<makedatauri "some example text" "text/plain">>"""/>
{{$:/language/Help/makelibrary}}
更多的详细信息请参阅 UpgradeMechanism。
若要获得您自己的''//自订//''日志按钮,从复制[[添加日志|$:/core/ui/Buttons/new-journal]]按钮开始。
然后创建您自己的配置条目,例如︰
* ``$:/config/myNewTiddler/Title``
* ``$:/config/myNewTiddler/Tags``
* ``$:/config/myNewTiddler/Text``
编辑您的自订按钮,并"搜索和替换"配置条目的名称。
更改近条目尾端处之以下两行
```
<$set name="journalTitleTemplate" value={{$:/config/NewJournal/Title}}>
<$set name="journalTags" value={{$:/config/NewJournal/Tags}}>
<$set name="journalText" value={{$:/config/NewJournal/Text}}>
```
为
```
<$set name="journalTitleTemplate" value={{$:/config/myNewTiddler/Title}}>
<$set name="journalTags" value={{$:/config/myNewTiddler/Tags}}>
<$set name="journalText" value={{$:/config/myNewTiddler/Text}}>
```
如果想在侧边栏看到您的配置条目,则改为︰
```
<$set name="journalTitleTemplate" value={{config/myNewTiddler/Title}}>
<$set name="journalTags" value={{config/myNewTiddler/Tags}}>
<$set name="journalText" value={{config/myNewTiddler/Text}}>
<$set name="journalText" value={{config/myNewTiddler/Text}}>
```
\define textOnPath(text)
$$$.svg
<svg width="100%" height="100%" viewBox="0 0 1000 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="background:white;"><defs>
<path id="MyPath" d="M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100"/>
</defs>
<use xlink:href="#MyPath" fill="none" stroke="#ddd"/>
<text font-family="'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif" font-size="42.5">
<textPath xlink:href="#MyPath">
$text$
</textPath>
</text>
</svg>
$$$
\end
此示例展示了如何使用 SVG 呈现沿着一条路径嵌入文本。可试着由下面的文本方块中输入一些文本,查看[[原始代码|Making curved text with SVG]] ,看看是它如何做到的。
<$edit-text tiddler="$:/CurvedText" tag="input" placeholder="Type text here" default=""/>
<$macrocall $name="textOnPath" text={{$:/CurvedText}}/>
# 创建当前 TiddlyWiki HTML 文件的备份 ([[只是以防万一|The First Rule of Using TiddlyWiki]])
# 在浏览器中开启您的 TiddlyWiki
# 在另一个浏览器窗口中,找到该插件的链接,例如:[[$:/plugins/tiddlywiki/example]]。通常您可以在该插件的主页上找到其链接 (例如, https://tiddlywiki.com/plugins/tiddlywiki/katex/)
# 拖动链接 [[$:/plugins/tiddlywiki/example]] 到包含您的 TiddlyWiki 的浏览器窗口
# 保存您的 TiddlyWiki (<<.icon $:/core/images/save-button>>)
# 如果窗口顶部出现黄色警告条,刷新窗口,使 TiddlyWiki 完成该插件安装 <<.icon $:/core/images/refresh-button>>
#* <<.from-version "5.1.22">> 安装支持动态加载的插件时,不再需要刷新 TiddlyWiki。相关详细信息,请参阅[[插件机制|PluginMechanism]]
# 该插件现在应该可供使用
此 Markdown 插件让您可使用标准 Markdown 标记写的条目。
请参阅演示于 https://tiddlywiki.com/plugins/tiddlywiki/markdown
<<.from-version "5.1.20">>
<<.op match>> 运算符使用允许传递多个标志的扩充语法:
```
[match:<flag list>[<operand>]]
```
* ''flag list'': 一个以逗号分隔的标志清单
* ''operand'': 筛检器操作数
可用的标志包括:
* ''casesensitive'': (默认),此标志强制区分大小写匹配,其中大写字母和小写字母被视为不同
* ''caseinsensitive'': 覆盖默认值,以使大写和小写字母,在匹配时被视为相同
<<.operator-examples "match">>
<<.operator-example 1 "a b c +[match[b]]">>
<<.operator-example 2 "[match[HelloThere]]">>
<<.from-version "5.1.20">> 数学筛选器操作符允许数值计算运行于筛选器之内。
数学操作符根据以下规则,将其参数解译为数字:
* 忽略有效数字后的任何非数字字符 (例如 `28px` 被解译为数字 28)
* 如果参数不能解译为数字,则使用值 0 (例如 `foo` 被解译为数字 0)
* 特殊值 `Infinity` 和 `-Infinity` 可以分别用来表示正无穷大和负无穷大
<$macrocall $name=".warning" _="某些筛选器操作符删除重复项,这些重复项在使用数学操作符时,可能会导致意外的结果。详细信息请参阅[[主导追加|Dominant Append]]。"/>
数学操作符有三种不同的形式:
* ''Unary 操作符'' 套用一个操作至输入清单中的每个数字 (例如 negate, truncate, sign)
** <<.inline-operator-example "=1 =2 =3 =4 +[negate[]]">>
** <<.inline-operator-example "=1.2 =2.4 =3.6 =4.8 +[trunc[]]">>
** <<.inline-operator-example "=1.2 =2.4 =3.6 =4.8 +[round[]]">>
* ''Binary 操作符'' 套用一个操作和操作数至输入清单中的每个数字 (例如 add, multiply, remainder)
** <<.inline-operator-example "=1 =2 =3 =4 +[add[3]]">>
** <<.inline-operator-example "=1 =2 =3 =4 +[multiply[8]]">>
* ''Reducing 操作符'' 套用一个操作于输入清单中的所有数字,返回单个结果 (例如 sum, product)
** <<.inline-operator-example "=1 =2 =3 =4 +[sum[]]">>
** <<.inline-operator-example "=1 =2 =3 =4 +[product[]]">>
** <<.inline-operator-example "=1 =2 =3 =4 +[average[]]">>
操作符可以组合:
* <<.inline-operator-example "[[355]divide[113]fixed[5]]">>
* <<.inline-operator-example "[range[100]sum[]divide[100]]">>
* <<.inline-operator-example "[tag[HelloThere]get[text]length[]sum[]]">>
有时需要将复杂的操作拆分为单独的筛选器。例如,要计算标签为 "~HelloThere" 的条目的 <<.field text>> 字段的平均长度:
<$macrocall $name='wikitext-example-without-html'
src="""<$set name="number-of-tiddlers" value={{{ [tag[HelloThere]count[]] }}}>
<$text text=<<number-of-tiddlers>>/> 个标签为 <<tag "HelloThere">> 的条目的平均长度: <$text text={{{ [tag[HelloThere]get[text]length[]sum[]divide<number-of-tiddlers>fixed[3]] }}}/>
</$set>""" />
<<list-links "[tag[Mathematics Operators]]">>
一个用于 ~TiddlyWiki 5 的实验性 MathJax 插件。正如 Martin 所言,该实现有点麻烦,但在我们有了更好的替代方案之前,可能会很有用。
{{!!url}}
<<<
Welcome. I have created plugin for TiddlyWiki 5 which allows you to use MathJax (math in TeX and MathML) inside TiddlyWiki 5. It's unofficial plugin and it doesn't follow general policy of TiddlyWiki as stand-alone solution but it works. So you can use it if you want.
<<<
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
另请参阅 [[min 运算符|min Operator]],并比较 [[maxall 运算符|maxall Operator]]和 [[minall 运算符|minall Operator]]。
<<.operator-examples "max">>
<<.operator-example 1 "[[23]max[32]]">>
<<.operator-example 2 "=1 =2 =3 =4 +[max[3]]">>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
另请参阅 [[minall 运算符|minall Operator]],并比较 [[max 运算符|max Operator]]和 [[min 运算符|min Operator]]。
<<.operator-examples "maxall">>
<<.operator-example 1 "=1 =2 =3 =4 =5 +[maxall[]]">>
<<.operator-example 2 "[tag[HelloThere]get[text]length[]maxall[]]">>
These are the internal mechanisms that fit together to make up TiddlyWiki.
这些是组成 TiddlyWiki 的内部机制。
<<list-links "[tag[Mechanisms]]">>
<<.from-version "5.1.24">> 相关概述,请参阅[[数学操作符|Mathematics Operators]]。
<<.operator-examples "median">>
<<.operator-example 1 "=1 =3 =4 =5 +[median[]]">>
请注意,如果没有输入,则操作符返回 `NaN`
<<.operator-example 2 "[title[NotATiddler]get[price]] +[median[]]">>
在世界各地的 ~TiddlyWiki 爱好者的当地聚会:
* 在英国牛津的 [[TiddlyWiki 2016 欧洲聚会|TiddlyWiki European Meetup 2016]] 和 [[TiddlyWiki 2017 欧洲聚会|TiddlyWiki European Meetup 2017]]
* [[OXTWIG]] 系''牛津 ~TiddlyWiki 兴趣小组''每月在英国牛津聚会,分享使用 TiddlyWiki 的经验。
* ''[[巴黎 TiddlyWiki 营|http://paris.twcamp.info]]''是一整天的 TiddlyWiki 庆祝活动和探索,适于初学者和有经验的用户。
//如果你是 ~TiddlyWiki 的爱好者,请考虑开始您所在地区的本地分支,这是一个很好的方式来散播有关使用 TiddlyWiki//
! 简介
<<.from-version "5.1.24">>
消息捕获器小工具捕获[[消息|Messages]],在其子内容中派送,并允许调用一系列动作小工具来回应这些消息。
! 内容和属性
`<$messagecatcher>` 小工具的内容正常显示。
|!属性 |!描述 |
|type |被捕获的消息名称,例如 "tm-scroll" 或 "tm-navigate" |
|actions |匹配消息被捕获时,将调用的动作字符串 |
! 变量
消息捕获器小工具
|!变量 |!描述 |
|`event-*` |`event` 对象的所有基于字符串的属性,其名称首码为 `event-` |
|`event-paramObject-*` |`event.paramObject` 对象的所有基于字符串的属性,其名称首码为 `event-paramObject-` |
|`modifier` |对于源自浏览器事件的消息,事件被触发时按下的辅助按键。可用的 `modifiers` 为 ''normal'' (无辅助按键)、''ctrl''、''ctrl-alt''、''ctrl-shift''、''alt''、''alt-shift''、''shift'' 和 ''ctrl-alt-shift'' |
! 示例
<$macrocall $name="wikitext-example-without-html" src="""
\define actions()
<$action-log/>
\end
<$messagecatcher type="tm-navigate" actions=<<actions>>>
单点击[[此链接]]进行操作。请查看浏览器 JavaScript 控制台的输出
</$messagecatcher>
"""/>
小工具消息乃由小工具生成,以回应用户的操作。他们由小工具树向上流动,直到它们被一个上层小工具来处理。
以下小工具消息由核心运行:
<<list-links "[tag[Messages]]">>
//这是[[购物清单示例|Shopping List Example]]的一个购物清单项目样本//
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
另请参阅 [[max 运算符|max Operator]],并比较 [[maxall 运算符|maxall Operator]]和 [[minall 运算符|minall Operator]]。
<<.operator-examples "min">>
<<.operator-example 1 "[[23]min[32]]">>
<<.operator-example 2 "=1 =2 =3 =4 +[min[3]]">>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
另请参阅 [[maxall 运算符|maxall Operator]],并比较 [[max 运算符|max Operator]]和 [[min 运算符|min Operator]]。
<<.operator-examples "minall">>
<<.operator-example 1 "=1 =2 =3 =4 =5 +[minall[]]">>
<<.operator-example 2 "[tag[HelloThere]get[text]length[]minall[]]">>
<<.operator-examples "minlength">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]minlength[7]]">>
<<.operator-example 2 "[list[Days of the Week]minlength[1]]">>
行动版拖放 Shim 插件提供一个 "shim" ,可在行动版浏览器(包括 iOS 和 Android)上实现 HTML 5 兼容的拖放操作。该 shim 程序库由 Tim Ruffles 创建,并发布于 https://github.com/timruffles/ios-html5-drag-drop-shim。
交互窗口 (或 "导引") 淡出主要的 TiddlyWiki 窗口,以显示孤立的条目,必须由用户解除。
要显示的条目可以包含以下用于自定义交互窗口的可选字段:
|!字段 |!说明 |
|footer|交互窗口的脚页文本 |
|subtitle|交互窗口的副标题文本,显示为 `h3` html 标记 |
|class|应用于交互窗口包装器的附加类 |
请注意,页脚和副标题字段不限于纯文本,还可以使用维基文本功能(如小工具和嵌入)。
交互窗口以 [[WidgetMessage: tm-modal]] 显示。
<$button message="tm-modal" param="SampleWizard">打开交互窗口示例</$button>
在 DroppableWidget、ButtonWidget、LinkCatcherWidget 和 EventCatcherWidget 的 ''action'' 字符串中,<<.def modifier>> [[变量| Variables]]包含在拖动过程中按住的辅助键。
变量包含一个辨识该键的字符串,下表为可能的键组合:
|辅助键 |变量内容 |h
|ctrl |ctrl |
|shift |shift |
|meta+shift |meta-shift |
|meta+ctrl |meta-ctrl |
|meta+alt |meta-alt |
|ctrl+shift |ctrl-shift |
|alt+shift |alt-shift |
|ctrl+alt |ctrl-alt |
|ctrl+alt+shift |ctrl-alt-shift |
|meta+ctrl+shift |meta-ctrl-shift |
|meta+ctrl+alt |meta-ctrl-alt |
|meta+alt+shift |meta-alt-shift |
|ctrl+alt+shift |ctrl-alt-shift |
|meta+ctrl+alt+shift |meta-ctrl-alt-shift |
|无辅助键 (正常点击或拖动) |normal |
<<.tip """某些操作系统可能会截获 ''meta'' 键,因此永远不会检测到它""">>
<$button actions="""<$action-setfield $tiddler="$:/temp/test-modifier-keys" text=<<modifier>>/>""">在这里测试的辅助键</$button>
!!! 点击上面的按钮时,同时按住的辅助键:
{{$:/temp/test-modifier-keys}}
一个 TiddlyWiki5 的 //模块// 是包含可运行 JavaScript 的条目,其类型为 `application/javascript` 且其 `module-type` 字段设为该模块的[[模块类型|ModuleType]]。
请参阅''[[控制台|$:/ControlPanel]]'' <<.icon $:/core/images/options-button>> > ''信息'' > ''高级'' > ''已加载模块''页签的有关当前已加载模块的清单。
<<.operator-examples "modules">>
<<.operator-example 1 "[[filteroperator]modules[]]">>
\define describe() {{$:/language/Docs/ModuleTypes/$(type)$}}
一个 [[JavaScript 模块|Modules]]的 `module-type` 字段是一个用于标识模块类型的字符串。下列为此维基中使用的模块类型:
<dl>
<$list filter="[moduletypes[]]">
<dt>{{!!title}}</dt>
<$set name=type value=<<currentTiddler>>>
<dd><<describe>></dd>
</$set>
</$list>
</dl>
<<.operator-examples "moduletypes">>
<<.operator-example 1 "[moduletypes[]]">>
<<.this-is-operator-example>>
按下 <<.icon $:/core/images/down-arrow>> 为您提供一个包含更多编辑选项的下拉式菜单。
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
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="34 107 510 317" width="510pt" height="317pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-05-10 07:32Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><path d="M 204.10294 372.67294 L 206.91333 373.50204 C 210.44484 371.92197 217.54364 374.36401 221.30923 375.55795 C 214.37523 367.871 203.92865 356.58286 196.40225 349.4665 C 193.93185 340.85104 194.98593 332.1817 195.51744 323.3866 L 195.62405 322.659 C 192.65733 329.6997 188.89246 336.5437 186.86893 343.95477 C 184.50095 353.95294 197.39323 364.74045 202.39233 370.92294 Z M 419.00293 414.95798 C 399.65295 414.411 391.14194 414.45804 381.28735 398.25296 L 373.60684 398.473 C 364.66696 398.076 368.39264 398.25595 362.42844 397.95901 C 352.45654 397.57098 354.05396 388.09604 352.29965 383.09003 C 349.49335 366.09698 356.01324 349.01611 355.80756 332.01971 C 355.73474 325.98639 347.19724 304.63062 344.14716 296.99548 C 334.58554 298.79572 324.97205 299.13895 315.27176 299.62231 C 292.91254 299.56754 270.70496 296.8295 248.65794 293.35248 C 244.36153 311.10052 231.59093 335.94183 242.14684 353.9793 C 254.95975 372.63696 263.95123 377.80597 277.88824 378.93094 C 291.8251 380.055 294.97214 395.78998 291.60031 401.40997 C 288.61584 405.294 283.37045 405.99902 278.91385 406.94 L 269.99945 407.35898 C 262.98456 407.12299 256.71454 405.229 250.46393 402.30798 C 240.02545 396.48102 229.24443 384.36703 221.23434 375.67001 C 223.09915 379.143 224.21146 385.92294 222.52005 389.07803 C 217.78415 395.78699 197.30133 395.746 187.92093 391.577 C 177.26495 386.84198 151.51596 353.59503 147.53493 328.69455 C 158.12593 308.66583 173.55493 291.2196 181.36093 269.41132 C 164.34593 258.55438 155.23293 240.88019 156.41594 220.8598 L 156.84294 218.5423 C 140.10095 221.67648 148.78296 220.51039 130.772964 221.87279 C 73.41696 221.6973 22.976959 182.80795 51.378967 122.367004 C 53.225952 118.787964 54.982956 115.534 58.113968 117.08801 C 60.626953 118.33496 60.265976 123.33699 59.001953 128.88399 C 42.766968 201.10277 122.11395 201.65552 170.88995 188.29181 C 175.73093 186.96521 185.35893 178.03061 192.02843 175.0687 C 202.93033 170.22757 214.76323 168.2634 226.50644 166.84811 C 255.71411 163.51997 290.81815 178.90649 308.65442 179.4089 C 326.4909 179.91129 351.86395 175.13808 367.43942 176.14308 C 378.74075 176.66016 389.83795 178.70007 400.74194 181.6059 C 407.79996 147.215 408.29895 121.867996 425.03094 116 C 434.85095 117.550995 442.4179 130.93298 448.01895 138.08301 L 448.04193 138.07898 C 459.4489 137.62897 470.30396 140.52301 481.09692 143.73497 C 500.63696 140.962006 517.03394 129.989 534.28992 121.45299 C 534.23596 121.721985 533.95398 121.81297 533.78595 121.99397 C 516.80396 135.72798 514.4319 158.952 516.42993 180.42822 C 517.17297 191.57237 514.02393 203.67166 510.13098 215.08179 C 502.84595 233.67169 488.77692 253.26677 472.44794 252.26176 C 466.27496 252.0665 462.68893 248.57117 458.10095 244.83946 C 457.21094 252.39809 453.71295 259.14267 450.34094 265.82758 C 442.55396 280.64941 422.20496 287.18097 403.36292 303.00763 C 384.52216 318.83453 409.39194 375.35904 415.42194 385.65802 C 421.45096 395.95798 438.28192 399.72598 431.75095 409.02194 C 429.75296 412.09198 426.69794 413.19 423.43292 414.38098 Z" fill="black"/></g></g></svg>
<<.operator-examples "move">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]] +[move[Wednesday]]">>
<<.operator-example 2 "[list[Days of the Week]] +[move:-2[Wednesday]]">>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
与 [[product 运算符|product Operator]]比较。
<<.operator-examples "multiply">>
<<.operator-example 1 "[[23]multiply[19]]">>
<<.operator-example 2 "=1 =2 =3 =4 +[multiply[4]]">>
MultiTiddlerFiles 允许多个条目,简明地表示在一个单一的文本文件中。
这种格式的目的是:
* 便于输入易于阅读
* 优化单行字符串
* 允许通用字段或标签共用于条目群组
* 让外部工具可易于处理
MultiTiddlerFiles 具有扩展名 `multids`。该文件结构化为一个共用字段区块于一个空行之后。文件的其余部分是一个些注解和条目。条目由其名称指定、跟着一个冒号、至少一个空白字符,然后该行其余部份是条目的文本字段。
例如:
```
title: $:/language/ControlPanel/
tags: strings
modifier: JoeBloggs
Basics/Caption: Basics
# This is a comment
Basics/Version: ~TiddlyWiki Version
```
此示例定义了两个条目,[[$:/language/ControlPanel/Basics/Caption]] 与 [[$:/language/ControlPanel/Basics/Version]].
若 `title` 字段在标题中指定,则其被视为定义于条目名称中的个别条目的前缀。
!! 语法规范
{{MultiTiddlerFileSyntax}}
!!! 多重条目文件
<$railroad text="""
{<" 标题列 ">} " 空白列 " {(<" 条目描述列 "> | <" 注释列 ">)}
"""/>
!!! 标题列
<$railroad text="""
<" 识别码 "> ":" {" 空格 "} <" 值 "> " 换行 "
"""/>
!!! 条目描述列
<$railroad text="""
<" 文件路径 "> ":" {" 空格 "} <" 条目名称 "> " 换行 "
"""/>
!!! 注释列
<$railroad text="""
"#" {(" 文本 " | " 空格 ")} " 换行 "
"""/>
<$set name="prefixlist" filter="""[all[shadows+tiddlers]has[module-type]module-type[filterrunprefix]trim:prefix[$:/core/modules/filterrunprefixes/]trim:suffix[.js]addprefix["]addsuffix["]join[|]addprefix[(]addsuffix[)]]""">
<$railroad text=<<prefixlist>>/>
</$set>
命名筛选器 run 前置码可以先于任何[[筛选表达式|Filter Expression]] [[run|Filter Run]] 的代替单一字符前置码(`+`、`-` 等等)。若要创建新的筛选器 run 前置码,请创建一个具有 `filerrunprefix` [[module-type|ModuleType]] 的 [[Javascript 模块|Modules]]。
<<.from-version "5.1.18">> 大多数的 TiddlyWiki [[指令|Commands]],使用基于位置的系统作为参数,其中每个参数必须按照命令定义的精确顺序列出。一些更复杂的命令提供了命名命令参数的替代方案。例如,这里我们提供两个名为 "port" 和 "host" 的参数:
```
--listen port=8090 host=0.0.0.0
```
请注意,参数的顺序无关紧要。
在参数中使用特殊字符需用引号。 Unix、Linux 和 Mac 使用单引号,Windows 则使用双引号:
```
--listen port=8090 username=joe 'password=s3cret(!'
--listen port=8090 username=joe "password=s3cret(!"
```
请注意,引号应用于整个成对的 name=value,而不仅仅是值部分。
<<.def namespace>> [[变量|Variables]]内部用由 [[HTML|HyperText Markup Language]] 小工具为其生成的 [[DOM|Document Object Model]] 元素追踪正确的命名空间。
一个 `svg` 或 `math` 元素为本身和其包含的任何子项目,提供不同的命名空间。
系统条目为核心的一部分,其命名规则如下:
|!命名空间 |!格式 |!描述 |
|`$:/*` |~CamelCase |根用户接口条目 (例如控制台、 高端搜索) |
|`$:/config/*` |~CamelCase |用户导向的配置设置 |
|`$:/core/images/*` |hyphen-case |核心图像 |
|`$:/core/modules/*` |lowercase |JavaScript 模块条目 |
|`$:/core/save/*` |lowercase |用于创建 TiddlyWiki 文件的保存范本 |
|`$:/core/templates/*` |//inconsistent// |TiddlyWiki 操作所需的范本。目前使用短划线和句号的组合隔开单词 |
|`$:/core/ui/*` |//inconsistent// |组成 TiddlyWiki 缺省用户接口的条目。目前使用混合驼峰式和小写的命名约定 |
|`$:/core/wiki/*` |lowercase |关于整个维基的中继数据 |
|`$:/docs/*` |lowercase |文档条目 |
|`$:/messages/*` |~CamelCase |系统消息 |
|`$:/plugins/*` |lowercase |插件条目,与插件内容 |
|`$:/snippets/*` |//inconsistent// |可重用的片段 (将由宏替换) |
|`$:/state/*` |lowercase |用户接口状态条目 |
|`$:/tags/*` |~CamelCase |用户接口配置标签|
|`$:/temp/*` |lowercase |不应被保存的临时条目 |
|`$:/themes/*` |lowercase |布景主题插件 |
格式栏说明:
* ''hyphen-case'' 指的是以连字号连接多个小写单字
* ''~CamelCase'' 指的是直接连接多个首字母大写的小写单字
* ''lowercase'' 指的是直接连接多个小写单字
* ''inconsistent'' 标志目前不一致的命名空间
在默认的 "classic" 查看模式中,开启条目显示于称为 "故事河" 的垂直栏。有很多种方式你可以导览故事河 — 亦即你如何在开启的条目之间来回跳转。
* 最好的办法是使用在侧边栏中的''开启''页签,点击的开启条目。
** ''开启''页签内含所有已开启条目的清单。你可以点击清单中的任何条目跳到它,或点击条目链接旁边的 "x" 将其关闭的。此外,在已开启条目的清单底部,还有一个方便的 <<.icon $:/core/images/close-all-button>> ''关闭所有''的按钮
* 另一个显而易见的方法是使用右边的''故事河''卷轴''上下滚动页面''。
** 请注意当故事河和侧边栏展开下面的可见的屏幕,将出现 //两个// 卷轴,外侧或最右边的卷轴控制故事河,内侧卷轴控制侧边栏。
* 很多新用户尝试一个笨拙的方式是''逐一关闭条目'',直到他们正在寻找的条目,。
** 关闭任何顶部或故事河中间的条目,将导致其下方的所有条目向上滑动。你关闭的条目下方的条目将立即向上滑动并取代其位置。
** 关闭底部的条目,其上方的条目会成为查看中的条目。
** 关闭故事河中间的条目将导致
! 简介
导航小工具操纵条目保存库,故事列表和历史记录列表回应各种[[消息|Messages]]。
! 内容与属性
导航小工具显示所有包含的内容,并回应其分派的消息。
|!属性 |!说明 |
|story |被操作的含有故事列表的条目名称 |
|history |被操作的含有历史列表的条目名称 |
|openLinkFromInsideRiver |决定从故事河内的链接打开新条目的位置:于故事河的''顶端''或''底部'',或当前条目''之上''或''之下'' |
|openLinkFromOutsideRiver |决定从故事河外的链接打开新条目的位置:于故事河的''顶端''或''底部'' |
|relinkOnRename|<<.from-version "5.1.14">> 确定如果条目名称更改,其他条目中的标签是否被重命名。''yes'' 或 ''no''。默认值为 ''no''|
! 小工具消息
下列[[消息|Messages]]由导航小工具消息处理:
<<list-links "[tag[navigator-message]]">>
! 变量
下列[[变量|Variables]]由导航器小工具分配:
* <<.vlink tv-story-list>>,含故事清单的条目名称
* <<.vlink tv-history-list>>,含历史清单的条目名称
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "negate">>
<<.operator-example 1 "[[-2000]negate[]]">>
<<.operator-example 2 "=1 =2 =3 =4 =5 +[negate[]]">>
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
依序处理每个输入名称,并将位于 <<.field list>> 字段中继其后者追加到输出。如果名称没有列于该字段,或者是里面最后一个名称,则无输出。
<<.operator-examples "next">>
<<.using-days-of-week>>
<<.operator-example 1 "[[Monday]next[Days of the Week]]">>
<<.operator-example 2 "[[Sunday]next[Days of the Week]]">>
<<.operator-example 3 "Tuesday Wednesday Thursday +[next[Days of the Week]]">>
通知是出现在 TiddlyWiki 窗口右的上方的小消息,并自动在缺省时间后消失。
<$button message="tm-notify" param="SampleNotification">显示示例通知</$button>
<<.def now>> [[宏|Macros]]传回指定[[格式|DateFormat]]的当前日期和时间。
该值不会自动更新,像一个滴答的时钟。于宏调用呈现时更新,像是每当包含的条目因某些其他原因需被刷新显示。
!! 参数
;format
: 一个指定所需[[日期格式|DateFormat]]的字符串,缺省为 `0hh:0mm, DDth MMM YYYY`
''注意'': 格式字符串 `[UTC]YYYY0MM0DD0hh0mm0ssXXX` 将传回代表 UTC 时间戳记的日期字符串,如同其用于 ~TiddlyWiki `created` 和 `modified` 时间戳字段。
<<.macro-examples "now">>
<$macrocall $name=".example" n="1" eg="""<<now>>"""/>
<$macrocall $name=".example" n="2" eg="""<<now YYYY年0MM月0DD日>>"""/>
<$macrocall $name=".example" n="3" eg="""<<now "pm 0hh12:0mm:0ss">>"""/>
<$macrocall $name=".example" n="4" eg="""<<now "[UTC]YYYY0MM0DD0hh0mm0ssXXX">>"""/>
非数字值被视为比任何数字具有较高的值,并且忽略大写字母和小写字母的区别。比较 <<.olink nsortcs>>。
<<.operator-examples "nsort">>
<<.operator-example 1 "10 010 1000 100 +[nsort[]]">>
<<.operator-example 2 "10 010 ALPHA beta alpha 1000 100 +[nsort[]]">>
非数字值被视为比任何数字具有较高的值,大小写字母被视为不同的。比较 <<.olink nsort>>。
<<.operator-examples "nsortcs">>
<<.operator-example 1 "10 010 1000 100 +[nsortcs[]]">>
<<.operator-example 2 "10 010 ALPHA beta alpha 1000 100 +[nsortcs[]]">>
<<.place N>> 是基于 1。换句话说, `nth[1]` 具有与 <<.olink first>> 运算符相同的效果。
<<.operator-examples "nth">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]nth[]]">>
<<.operator-example 2 "[list[Days of the Week]nth[5]]">>
NW.js 是开源应用程序,熔合网页浏览器与 [[Node.js]] 的功能。使网页应用程序如同本机应用程序一样,对文件系统和其他本机设备具有完全访问权限。从[[官方网站|https://github.com/nwjs/nw.js]]或[[此介绍性的博客文章|http://net.tutsplus.com/tutorials/javascript-ajax/introduction-to-html5-desktop-apps-with-node-webkit/]]可了解更多。
如何使用 TiddlyWiki 与 NW.js 的详细信息,请参阅 [[TiddlyWiki on NW.js]]。
Dave Gifford 使用目录宏和各种自订调整的 Obadiah 圣经概论:自订 ''new here'' 按钮、[[自订查看样板| HTTP://giffmex.org/experiments/obadiah.html#%24%3a%2f_aa%2FViewTemplate %2fnotelist]] 来添加笔记或图像到任何条目、和条目嵌入所有的内容,为了打印([[此条目|http://giffmex.org/experiments/obadiah.html#An%20introduction%20to %20obadiah]])。
{{!!url}}
官方的 TiddlyWiki 插件程序库包含的插件是[[主 TiddlyWiki 5 GitHub 存储库|Working with the TiddlyWiki5 repository]] 的一部分。从[[插件程序库|Installing a plugin from the plugin library]]安装它们]。来自官方插件程序库的插件将自动更新为[[升级处理|UpgradeMechanism]]的一部分。
<<list-links "[tag[OfficialPlugins]]">>
[[维基百科定义|https://en.wikipedia.org/wiki/Open_source]]开放源码为//一种哲学或促进自由地重新散布和访问终端产品的设计与实现细节的实用方法//。
这些都是示例条目提供为 TiddlyWiki 文档的一部分。
<<list-links "[tag[Operator Examples]]">>
当 ~TiddlyWiki 生成具有特定标签的条目的清单 (例如,标签丸的下拉清单),其排序条目依循下列规则:
# 始于标签条目的 <<.field list>> 字段中[[声明|Title List]]的给定顺序。
# 在其余每个条目 <<.place T>>,寻找 <<.field list-before>> 字段,如果此字段有一条目名称作为其值,则置此如果此字段有一条目名称作为其值,则置此 <<.place T>> 于该条目之<<.em 前>>。
#* 一个特殊情况,如果该字段存在,但其值为空,则置 <<.place T>> 于清单的起始处。
# 在其余每个条目 <<.place T>>,寻找 <<.field list-after>> 字段,如果此字段有一条目名称作为其值,则置此如果此字段有一条目名称作为其值,则置此 <<.place T>> 于该条目之<<.em 后>>。
# 如果仍有其他条目,则将其放在依字母顺序升幂排序的名称清单的末尾。将忽略大写字母和小写字母的区别。
具有特定标签的条目的排序,可以在标签丸下拉清单中使用拖放直接修改。底层的 [[list-tagged-draggable 宏|list-tagged-draggable Macro]]也可以用在别处。
根据参数是否为特殊值 `reverse`,反转或保留输入列表的顺序。
<<.operator-examples "order">>
Osmosoft 由 JeremyRuston 成立于 2004 年,最初为 TiddlyWiki 的软件服务顾问公司。显著的业务包括与 Socialtext 合作于 [[Socialtext Unplugged|https://www.socialtext.net/open/socialtext_unplugged]]。
于 2007 年,Osmosoft 为 [[BT]] 收购,并成为该企业内部的开放原代码支持。成为 BT 的一部分,Osmosoft 曾工作在 BT 和 BT 的客户的各种项目。
详见 http://osmosoft.com/
此列表包含不符合前述类别的 ~TiddlyWiki 社群共享的任何有用资源。它们可能是插件、宏、代码剪贴、想法或其他。
<div class="tc-link-info">
<$list filter='[tag[Other Resources]!sort[modified]]'>
<div class="tc-link-info-item">
! <$link><$view field="title"/></$link>
<div class="tc-subtitle">发布于 <$view field="modified" format="relativedate"/></div>
<$transclude/>
</div>
</$list>
</div>
{{$:/language/Help/output}}
''牛津 ~TiddlyWiki 兴趣小组''每月聚会,讨论和示范关于 TiddlyWiki。
有关下一次会议的详细信息,请参阅 https://oxtwig.eventbrite.co.uk/ 。
我们也有一个电子邮件讨论清单︰ https://groups.google.com/forum/#!members/oxtwig
! OXTWIG #2
于 2014 年 01 月 16 日星期四,举行第二次的 OXTWIG 聚会︰
<iframe width="560" height="315" src="https://www.youtube.com/embed/WOK_nVBf_6U" frameborder="0" allowfullscreen></iframe>
! OXTWIG #1
于 2013 年 11 月 21 日星期四,举行第一次的 OXTWIG 聚会︰
<iframe width="560" height="315" src="https://www.youtube.com/embed/tpNf_Dms_TE" frameborder="0" allowfullscreen></iframe>
<<.from-version "5.1.23">>
<<.op pad>> 操作符至少需要一个参数,指定输入名称的所需长度。第二个可选参数,可用于指定要填充的字符串(默认值为 "0")。
```
[pad[<length>],[<padding-string>]]
```
* ''length'' : 输入名称所需的最终长度。
* ''padding-string'': (可选)。要填充到所需长度的字符串。默认值为 "0"。
<<.operator-examples "pad">>
<<.operator-example 1 """[[2]pad[3]]""">>
<<.operator-example 2 """[[2]pad[3],[a]]""">>
<<.operator-example 3 """[[12]pad[9],[abc]]""">>
<<.operator-example 4 """[[12]pad:suffix[9],[abc]]""">>
很多新用户都不知道的 TiddlyWiki 的一个主要功能,是 TiddlyWiki 可以定制的程度,只需在关键影子条目中或在您自己的自定义条目中,添加或删除[[系统标签|SystemTags]]即可。
* 您可以在查看或编辑模式下,添加和删除条目中的默认功能(假设您发现条目副标题分散注意力,或者您想要添加一个在编辑条目时,看到的提醒)
* 您还可以在一般页面版面中,添加和删除默认功能(也许您想在侧栏添加时钟,或者用自己的页面控制按钮替换其中一个页面控制按钮)
* 您还可以重新排列显示这些功能的顺序(也许您希望条目名称上方的标签,或者 TiddlyWiki 的副标题位于页面控制按钮下方)
一旦你知道自己在做什么,所有这些事情实际上都很容易实现。
<<.from-version "5.1.23">> 您也可以创建[[替代页面版面|Alternative page layouts]],并在它们之间切换。
! 将定制的条目添加到用户界面
您还可以创建所需的任何条目,并使用相应的[[系统标签|SystemTags]]设置其标签,它将显示在该位置。例如,如果您创建一个条目 '提醒自己',添加文本 '这是一个提醒',并设其标签为 `$:/tags/EditTemplate`,当您在编辑每个条目时,里面将出现 '这是一个提醒' 的字样。
当您要添加条目显示于条目或页面版面中时,可能还需要重新定位它,使其准确显示在您希望它出现的位置。为此,使用前缀 `$:/tags/` 编辑相应的影子条目,并将条目名称插入 <<.field list>> 字段中的适当位置。例如,如果您希望上面的示例中的 '这是一个提醒',在编辑模式下显示于标签编辑器上方,请编辑条目 $:/tags/EditTemplate 的 <<.field list>> 字段,在 `$:/core/ui/EditTemplate/tags` 之前插入 `[[提醒自己]]`。
! 为查看工具栏和页面控件创建新按钮
假设您有一个名为 '食谱模板' 的骨架条目,您希望在条目查看工具栏中,有一个按钮可以按需创建新的食谱条目。这将需要以下步骤:
# 您要一个按钮图像。如果没有内核图像(具有前缀 $:/core/images/的影子条目)适合您,那么您将需要创建或取得 SVG 图像(例如,http://flaticon.com 中的一个图像),将它拖入您的文件,使其成为一个条目,编辑条目并将高度和宽度调整为 22px
# 您要创建包含您的条目的条目。创建、输入名称,并添加按钮代码(请参阅此条目底部的代码以获取示例,其中提示您需要对其进行调整)。设其标签为 [[$:/tags/ViewToolbar]]
# 您要创建一个条目,告诉 TiddlyWiki 您的按钮是在工具栏中显示还是隐藏。让其名称为 [[$:/config/ViewToolbarButtons/Visibility/Recipe]]。在 <<.field text>> 区域键入 `reveal`,然后保存。
# 您要正确定位按钮。打开条目 $:/tags/ViewToolbar 并将您的按钮条目的名称,插入至 <<.field list>> 字段中的适当位置。
```
\define newHereButtonTags()
[[$(currentTiddler)$]]
\end
\define newHereButton()
<$button class=<<tv-config-toolbar-class>>>
<$action-sendmessage
$message="tm-new-tiddler"
$param="TITLE OF YOUR SKELETON BUTTON"
title="New tiddler"
tags=<<newHereButtonTags>> />
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
{{TITLE OF YOUR SVG IMAGE TIDDLER}}
</$list>
<$list filter="[<tv-config-toolbar-text>match[yes]]">
<span class="tc-btn-text"><$text text="CAPTION FOR YOUR BUTTON"/></span>
</$list>
</$button>
\end
<<newHereButton>>
```
! 从用户界面中删除影子条目
在 ''更多'' > ''默认'' 页签中,您将找到所有影子条目的列表。在这个列表中,您会发现很多前缀为 `$:/core/ui/` 的条目,这些是定义用户界面的内核条目。这些条目具有[[系统标签|SystemTags]],删除或添加这些标签将调整条目和页面版面。
例如,$:/core/ui/SideBar/More 是侧边栏中''更多''页签的条目,它设置标签为[[系统标签|SystemTags]] `$:/tags/SideBar`,使其显示于侧边栏中。从条目中删除该标签,将从侧边栏中删除此''更多''页签。将 `$:/tags/SideBar` 标签重新插入该条目,将使其重新出现在侧边栏中。
您可以对任何具有 $:/core/ui/ 前缀的内核用户界面条目,使用相同的过程。例如,从条目 `$:/core/ui/ViewTemplate/subtitle` 中,删除[[系统标签|SystemTags]] `$:/tags/ViewTemplate` 将从所有条目中删除副标题。
如果以这种方式修改影子条目,则会覆盖预安装的值。如果要还原,只需删除修改后的条目即可恢复底层影子条目。
! 段落
在 TiddlyWiki 要标记结束一个段落,你需要输入<kbd>Enter</kbd>键两次,以增加两个换行符号:
```
This is the first paragraph.
And this is the second paragraph.
```
段落中的单一换行会被忽略,例如:
<<wikitext-example src:"This is a
paragraph made
up of
short lines">>
对于有些情况下这种行为是不是方便,您也可以使用 [[Hard Linebreaks in WikiText]].
! 介绍
解析机制根据一套句法规则分析条目的文本,生成一棵代表文本的结构的树。[[渲染机制|RenderingMechanism]]用于解析树变成小工具节点的渲染树。
TiddlyWiki5 包括 ParserModules 的几种条目类型:
* WikiText
* Raw HTML
* 纯文本
* 图像 (bitmap、SVG 和 PDF)
WikiText 分析器是最复杂的,包括分离的个别 WikiRuleModules 封装每个解析规则。
! 句法解析树
解析条目的输出是含有对应于原始文本解析节点树的对象。例如:
```
> JSON.stringify($tw.wiki.parseText("text/vnd.tiddlywiki","Some //italics// and a {{Transclusion}}.").tree)
[
{type: "element", tag: "p", children: [
{type: "text", text: "Some "},
{type: "element", tag: "em", children: [
{type: "text", text: "italics"}
]},
{type: "text", text: " and a "},
{type: "tiddler", attributes:{
tiddler: {type: "string", value: "Transclusion"}
}, children:[
{type: "transclude", attributes:{
tiddler: {type: "string", value: "Transclusion"}
}}
]},
{type: "text", text: "."}
]}
]
```
解析树节点是简单的 JavaScript 对象,而没有一个原型。
{{$:/language/Help/password}}
! 简介
密码小工具显示一个密码输入框绑定到在 TiddlyWiki5 PasswordVault 的命名项目。密码当前保存在浏览器的本机存放区且其本身没有加密。
! 内容与属性
`<$password>` 小工具的内文将被忽略。
|!属性 |!说明 |
|name |密码保存库项目的名称 |
<<.dlink-ex "Percent encoding" "https://en.wikipedia.org/wiki/Percent-encoding">> 是一个允许无效字符包含于 URI 中的符号转换。
这样的字符被表示为一个百分比符号 `%` 跟着两个附加字符。
例如,一个空格被表示为 `%20`,而一个真实的百分比符号被表示为 `%25`。
TiddlyWiki 默认为最适用于从智能手机到台式机的现代设备。如果您需要工作在较旧的、不够强大的设备,或使用大量的内容,有几个你能采取的步骤来提高性能。
!! 用法
* ''避开 "最近" 页签''。它计算缓慢来生成和更新以回应条目变更。
* ''使用 "Vanilla" 主题''。默认的 "Snow White" 主题包括像阴影、透明度和模糊的视觉效果,在较旧的设备上呈现,可能会很慢
* ''避免大型条目''。较大的位图会显著降低 TiddlyWiki 的性能。例如,现代智能手机拍摄的图像经常会是 5 MB 或更多。尽可能的使用[[外部图像|ExternalImages]]。
* ''不要一次打开太多条目''。已打开的每个条目将需要处理,以保持即时更新(例如,当您于草稿条目输入)。一个最显而易见的例子,当使用 ''zoomin'' 查看模式关闭数十列于边栏中的''打开''页签的条目。养成使用 <<.icon $:/core/images/close-all-button>> ''全部关闭''按钮定期关闭所有已打开条目的习惯。
!! WikiText
* ''使用内置的性能检测''。研究[[性能检测|Performance Instrumentation]]结果,有助于突出性能问题
* 利用索引筛选器操作符。在筛选器运行开始时,以下构造经过优化的运行速度,比其他方式快许多倍:
** `[all[tiddlers]tag[x]...`
** `[all[shadows]tag[x]...`
** `[all[tiddlers+shadows]tag[x]...`
** `[all[shadows+tiddlers]tag[x]...`
** `[all[tiddlers]field:y[x]...`
** `[all[shadows]field:y[x]...`
** `[all[tiddlers+shadows]field:y[x]...`
** `[all[shadows+tiddlers]field:y[x]...`
** 请注意,字段索引器目前默认为索引字段值小于 128 个字符;仍可搜索较长的值,但不会建构索引
** 另请注意,当操作符名称为字段名称时,也会使用 ''field'' 操作符,例如,`[all[shadows+tiddlers]caption[x]...` 已经过优化。
* 使用[[刷新机制|RefreshMechanism]]的[[节流|RefreshThrottling]]功能
* 请记住,''比起大量使用宏,嵌入单独的条目更有效'',并且在某些情况下,差异可能会很大。如果条目未更改,则解析每个条目的结果,将被缓存并于下次重复使用。宏不能使用相同的技术,并且每次都必须重新解析它们,因为它们不是全局的,而是局部于小工具树。
** <<.from-version "5.1.23">> 分析树现在缓存宏,而''不''通过参数或变量(即`$parameter$` `或 `$(variable)$`)运行任何文本替换。
* 在可能的情况下,''使用带有筛选器的 SetWidget 或 VarsWidget,而不是 WikifyWidget'',来声明变量和字符串连接。因为没有机会缓存解析树或小工具树,Wikify 机制的性能相对较差。
核心具有用于刷新周期的内置性能检测。请参阅控制台的“设置”页签上的“性能检测”。维基在生效之前需要重新加载。
打开性能检测后,每次触发刷新周期时,浏览器开发人员控制台都会显示附加的计时信息。例如:
```
performance: mainRender: 327.83ms
performance: styleRefresh: 9.14ms
performance: mainRefresh: 68.10ms
```
上述信息应解释如下:
* mainRender 是页面模板的初始显示所需的时间
* styleRefresh 是刷新页面样式表所需的时间
* mainRender 是刷新主页模板所需的时间
举个例子,尝试在侧边栏页签之间切换,以比较它们渲染所需的时间。
还提供了有关筛选器运行时间的更多详细信息。启用性能检测后,在浏览器开发人员主控台中输入以下 JavaScript 命令:
```
tw.perf.log()
```
将显示一个表格, 其中包含以下信息:
* ''name'' - 字符串 "Filter: " 加上筛选器的文本
* ''invocations'' - 自启动以来筛选器的调用次数
* ''totalTime'' - 自启动以来评估此筛选器所花费的总时间 (以毫秒为单位)
* ''percentTime'' - 此筛选器的运行时间与所有筛选器的总运行时间的百分比
永久链接允许直接链接到 ~TiddlyWiki 内的一些个别条目。
! 简单的永久链接
最简单的永久链接形式 (<<.icon $:/core/images/permalink-button>>) 是一个单一的目标条目名称与 `#` 附加到基本网址:
https://tiddlywiki.com/#HelloThere
如果需要,条目名称可以包含空格:
[[https://tiddlywiki.com/#Using TiddlyWiki on Node.js]]
请注意,目标条目名称前后不需要双方括弧:但是,如果存在,它们会被默默删除。
! 故事永久链接
永久链接还可以指定应该与目标条目一起打开的目标条目的故事清单,当作一个[[条目筛选|Filters]]:
[[https://tiddlywiki.com/#TiddlerFields:Tiddlers TiddlerTags TiddlerFields ContentType]]
如果目标条目不在故事清单中,则它会自动插入于顶部。这意味着以下两个示例都针对故事串行 `Tiddlers`、`Tags`、`TiddlerFields` 中的条目:
[[https://tiddlywiki.com/#Tiddlers:Tags TiddlerFields]]
[[https://tiddlywiki.com/#Tiddlers:Tiddlers Tags TiddlerFields]]
也可以指定故事条目筛选器,而无需指定用于导航的目标条目:
<a href="https://tiddlywiki.com/#:[tag[task]]" rel="noopener noreferrer">~https://tiddlywiki.com/#:[tags[task]]</a>
! 关于 URL 编码
对网址片段中的合法字符有技术限制。为了允许处理所有条目,非法字符受制于称为 "URL 编码" 的处理,即问题字符被其数字代码替换。例如,空格字符替换为 "%20"。
目标条目名称和故事筛选器都应该进行 URL 编码(而非分离的冒号)。~TiddlyWiki 生成正确编码的网址,看起来相当丑陋。然而,在实践中,浏览器通常会非常愉快地处理 URL 片段中的任意字符。因此,当手动创建永久链接时,您可以选择忽略 URL 编码。
! 永久链接行为
~TiddlyWiki 使用永久链接行为的两个重要方面,可以通过控制[[控制台|$:/ControlPanel]] <<.icon $:/core/images/options-button>>''设置''选项卡中的选项。
* 是否在每次导航时自动更新地址栏,如果是这样,是否包括故事串行,以及目标条目
* 地址栏的更新是否应影响浏览器历史记录。默认值为 ''no'';当切换为 ''yes'' 您可以使用浏览器后退和前进按钮,倒带条目之间的导航
请注意,键入或导航到永久链接,总是会导致永久链接被处理,并酌情打开和关闭条目。
!! 技术细节
当 ~TiddlyWiki 启动时,它根据以下步骤处理永久链接:如果永久链接发生动态更改,则重复相同的步骤(例如,这发生在用户编辑地址栏时)。
# 如果永久链接包含冒号,请将之前的字符串视''目标'',将之后的字符串视为''故事筛选器''
# 如果永久链接未包含冒号,将整个字符串视为''目标'',并将''故事筛选器''标记为//未指定//
# 如果''故事筛选器''未指定,且我们处于启动过程中, 如果''目标''已指定,则设置''故事筛选器''为空字符串;或如果''目标''未指定,则设为默认条目
# 如果''故事筛选器''未指定,且我们非处于启动过程中,则设置''故事筛选器''为当前的故事清单
# 评定''故事筛选器''为''故事清单''
# 如果''目标''已指定,并且不在''故事清单''中,则将其添加到顶部
# 如果''目标''已指定,则导航到它,否则导航到''故事清单''中的第一个条目
用 TiddlyWiki 创建的一个课程规划系统。
{{!!url}}
<<<
I built a program to help enter and store lesson plan information and then facilitate/automate some of the tedious work involved in creating the actual lesson plan document.
<<<
记录和组织信息的目的,是使其可以被再次使用。记录信息的价值与其可以被重新使用的容易性,直接成正比。
[[条目|Tiddlers]]的哲学是我们通过分段信息到最小的语义上有意义的单位,以[[他们之间关系的丰富模型|Structuring TiddlyWiki]],最大化再利用的可能性。然后,我们使用聚合和组成编织片段,一起呈现的叙事故事。
TiddlyWiki 冀望提供一个条目代数,一个表达和探索信息项目之间关系的简洁方式。
R0lGODlhAgABAIAAAP////f39yH5BAAAAAAALAAAAAACAAEAAAICDAoAOw==
TiddlyWiki 可使用于多种平台:
<<list-links "[tag[Platforms]]">>
插件之间最简单的依赖形式是,一个插件可以通过在 `parent-plugin` [[字段|Plugin Fields]]中指定插件名称,来声明本身是另一个插件的子插件。子插件显示在控制台插件选择器中的其父插件的可展开区中。例如,官方插件程序库包括 [[CodeMirror 插件|CodeMirror Plugin]]及其十几个子插件,这些子插件使用可选功能,扩充 CodeMirror 插件。请注意,子插件本身不能有进一步的子插件式。
插件也可以用其 `dependents` [[字段|Plugin Fields]]列出还应安装任何其他插件的名称。请注意,列表不递归解析:依赖插件的依赖插件将不会被安装。
当从插件程序库中安装一个插件,`parent-plugin` 和 `dependents` 两字段用于决定将被安装的任何额外的插件。
请注意,`dependents` 字段,也由[[布景主题机制|ThemeMechanism]]和[[语言机制|LanguageMechanism]]用于切换相关主题/语言插件。
这些应用版包含原始的 TiddlyWiki 插件组的简单演示。他们已预装 TiddlyWiki 的早期版本缺少的插件程序库。
<<list-links "[tag[Plugin Editions]]">>
插件保存为具有以下字段的条目︰
|!字段 |!说明 |
|author |//(可选的)// 插件的作者 |
|dependents |依赖插件的列表:应安装的插件,以便此插件运作 |
|description |插件的描述说明 |
|list |公开的插件信息条目的名称 (参阅下列说明) |
|name |该插件的简短名称 |
|parent-plugin |//(可选的)// <<.from-version "5.1.22">> 插件的名称,此插件应显示为其在控制台插件选择器中的子插件 |
|plugin-type |通常是 ''plugin'' 、''language'' 或 ''theme'';详细信息请参阅[[插件机制|PluginMechanism]] |
|plugin-priority |//(可选的)// 数字优先级别 (越高的数字越后安装,核心插件具有零优先级别 |
|source |//(可选的)// 插件的来源网址 |
|text |构成插件的条目列表的 JSON 编码 |
|title |插件的名称 |
|type |须为 ''application/json'' |
|version |//(可选的)// 版本字符串 (应符合 [ext[SemanticVersioning|http://semver.org/lang/zh-TW/]] 规范) |
! 插件的信息条目
鼓励插件作者提供特定的信息和文档条目,让 TiddlyWiki 可以包含为[[控制台|$:/ControlPanel]]里的插件信息页签。
插件应该提供一个图标,包含于一名称格式为 `<plugin-name>/icon` 的条目 (例如,$:/core/icon )。
插件公开个别信息页签的名称,是为他们期望在插件条目的 'list' 字段中显示的名称。依规范应提供的以下部分或全部:
* ''readme'': 关于插件的基本信息
* ''license'': 插件的版权声明
相关的信息条目名称必须为以下格式:
# `$:/<plugin-name>/<current-language>/<tab-name>` (for example, ''$:/core/en-GB/readme'')
# `$:/<plugin-name>/<tab-name>` (for example, ''$:/core/readme'')
因此,插件可以提供每个信息条目的特定语言版本。
请注意信息条目不应该参考在插件内的其他条目。这是因为包含布景主题或语言的插件,是依选择动态切换,所以他们的信息条目可能不可供查看。控制台使用 TranscludeWidget 的 'subtiddler' 属性来访问这些条目,而不依赖于插件切换机制。
插件有一个 `plugin-type` 字段,用于决定如何处理它。以下的值由核心定义:
* `plugin` - 一般插件
* `theme` - 布景主题插件 (见[[布景主题机制|ThemeMechanism]])。只有条目 $:/theme 中的布景主题插件,于任一时间被启用(以及任何从属布景主题插件)
* `language` - 语言插件 (见[[翻译机制|TranslationMechanism]])。只有条目 $:/language 中的语言插件,于任一时间被启用(以及任何从属语言的插件)
以下插件类型由核心内部使用:
* `import` - 用于导入进行中创建的特殊 $:/Import 插件
* `info` - 用于由[[信息机制|InfoMechanism]]创建的特殊 $:/temp/info-plugin 条目
当插件程序库不支持时,也可以使用自定义的插件类型,使用自定义用户界面构建类似插件的行为。具有自定义类型的插件,将自动接收与一般插件相同的行为,但可以使用适当的[[查看模板段|SystemTag: $:/tags/ViewTemplate]],显示自定义用户界面。
默认情况下,具有自定义插件类型的插件中的条目,不会注册为影子条目(组成条目仍可以由[[嵌入小工具|TranscludeWidget]]、[[查看小工具|ViewWidget]]或[[插件条目运算符|plugintiddlers Operator]] 寻址子条目)。将配置条目 `$:/config/RegisterPluginType/<plugin-type>` 设为 `yes`,将使插件中的条目被注册为影子条目。
在服务器上,插件可以保存为一般的 JSON 条目,但将其保存为文件夹内的个别条目文件,通常更方便。插件文件夹必须包含一个 `plugin.info` 文件,其中包含该插件的中继数据。它还可以识别插件文件夹外部应被加载为条目的文件。
`plugin.info` 文件应包含下列 JSON 结构:
插件条目的 JSON 结构如下:
```
{
"title": "$:/plugins/publisher/name",
"name": "name",
"description": "An exemplary plugin for demonstration purposes",
"author": "JeremyRuston",
"version": "1.2.3-alpha3",
"core-version": ">=5.0.0",
"source": "https://tiddlywiki.com/MyPlugin",
"plugin-type": "plugin",
"list": "readme license history"
}
```
按照惯例,个别条目的名称前缀为从属插件的名称,但它们并不局限于如此。
请注意,如果`plugin.info` 文件省略 `version` 字段,当插件文件夹被打包时,则核心自动填入为当前核心的版号,这是为了确保所有核心插件都带有正确的版号。一般插件作者会想要明确地指定一个版号。
! 简介
[[插件|Plugins]] 是成捆的条目,当成单一单元被散布和管理。用户可以拖放安装之,或使用 [[插件程序库 |Installing a plugin from the plugin library]]。
<<.from-version "5.1.22">> 包含 JavaScript 模块的插件,需要重新加载维基,才能运作。不包含 JavaScript 模块的插件,自动动态加载和卸载。
插件可用于打包任何条目内容,包含扩充和加强 TiddlyWiki5 核心功能的 JavaScript [[模块|Modules]]。已注册插件内的条目是[[影子条目|ShadowTiddlers]]:他们可以经由创建一个具有相同名称的条目,随意改写之。但删除该条目,则从插件的底层条目值还原之
按照惯例,插件名称的格式为 `$:/plugins/publisher/name`。插件是核心 TiddlyWiki 发行版的一部分,其名称格式为 `$:/plugins/tiddlywiki/name`。
当[[运行 TiddlyWiki 于 Node.js|TiddlyWiki on Node.js]],插件也可存放为各别条目文件于[[插件文件夹|PluginFolders]].
! 插件类型
{{Plugin Types}}
! 插件相依性
{{Plugin Dependencies}}
! 插件顺序
{{Plugin Ordering}}
! 插件字段
{{Plugin Fields}}
! 更多的信息
<<list-links "[tag[PluginMechanism]]">>
您可以从[[官方插件程序库|Installing a plugin from the plugin library]]或从[[社区网站|Resources]]安装插件。
TiddlyWiki5 中的插件可用于散布可选的组件,自订和扩充 TiddlyWiki
{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}
在内部,插件是一些条目被打包成可被安装的单一条目。插件中的个别条目呈现为[[默认条目|ShadowTiddlers]]。请参阅[[插件机制|PluginMechanism]]讨论有关内部如何实现插件的更多详细信息。
插件可以包含 JavaScript 模块、样式表和模板。 插件也可以用于散布普通的文本、图片或其他内容。
<<list-links "[tag[Plugins]]">>
<$macrocall $name=".note" _="有一个名为 $:/core 的插件,其中包含 ~TiddlyWiki 的主要核心代码。它始终存在,为[[默认条目|ShadowTiddlers]]的来源。您可以在<<.button control-panel>>的<<.controlpanel-tab Plugins>>子页签中查看详细信息。" />
TheDiveO 的插件集合。
[[插件建构系统|http://thediveo.github.io/ThirdFlow/]]:
{{!!url}}
<<<
The ~ThirdFlow plugin brings to you another way to develop customization plugins for TiddlyWiki 5. It is not enforcing a specific development flow, it simply tries to help you. Otherwise, it tries to stay out of your way.
<<<
[[Awesome 字体|http://thediveo.github.io/TW5FontAwesome/]] 插件:
<<<
The FontAwesome plugin supports embedding Font Awesome in TiddlyWiki 5. There is no need to install this font into your operating system in order to use it with TiddlyWiki 5. The font is already embedded in this TiddlyWiki 5 customization plugin instead, so nothing else to install.
<<<
<<.operator-examples "plugintiddlers">>
<<.operator-example 1 "[[$:/core]plugintiddlers[]]">>
快显机制允许有选择地显示和以相对于锚点定位的内容区块。它由几个部分组成:
* [[状态条目|StateMechanism]] 记录一个快显窗口目前显示与否
* RevealWidget 有选择性地显示快显窗口的内容
** "sticky" 快显窗口 — 当点击里面的一个而其本身不关闭 — 将 ''class'' 属性设为 `tc-popup-keep`
* ButtonWidget 通过适当地设置状态条目来触发快显窗口的显示
<<.from-version "5.1.23">>
<<.operator-examples "power">>
<<.operator-example 1 "[[3]power[3]]">>
<<.operator-example 2 "9 +[power[2]]">>
<<.def 编译指示>>是 WikiText 的一个特殊的组件,提供操控剩余的文本解析的方式。
编译指示位于行首为 `\`,他们只能出现于内文的起始处,编译指示之间允许空白的行。如果编译指示出现在内文的主体,会被当作是普通的文本一样处理。
下列是可用的编译指示:
;`\define`
: 用于定义一个[[宏|Macros]]
;`\rules`
: 调整用来解析文本的规则集
;`\whitespace trim` 或 `\whitespace notrim`
: <<.from-version "5.1.15">> 控制是否裁减文本的起始和结尾的空格(默认为 ''notrim'')。当由 linebreak 生成的空格会影响格式化时,此设置将非常有用
;`\import <filter-expression>`
: <<.from-version "5.1.18">> 用于从筛选器表达式标识的条目中导入宏定义
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
''precision'' 运算符使用[[指数|exponential Operator]]或[[定点数|fixed Operator]]表示法中较短者,返回具有准确的指定有效位数的输入数字的字符串表示。
<<.operator-examples "precision">>
<<.operator-example 1 "123456789 +[precision[3]]">>
<<.operator-example 2 "123456789 +[precision[13]]">>
<<.operator-example 3 "1.23E23 +[precision[90]]">>
<<.s-matching-is-case-sensitive>>
<<.operator-examples "prefix">>
<<.operator-example 1 "[tag[task]!prefix[Go]]">>
<<.operator-example 2 "[prefix[$:/languages/]]">>
<<.operator-example 3 "[prefix[$:/]]" "同 `[is[system]]`">>
<<.operator-examples "prepend">>
<<.using-days-of-week>>
此运算符可用于预置一些项目到清单中。
<<.operator-example 1 "[list[Days of the Week]prepend[Yesterday Today Tomorrow]]">>
操作数可只列出没有空格的项目 -- 要包括空格的项目,使用数组的索引,例如,预置最后三个缩写星期别到清单中
<<.operator-example 2 "[list[Days of the Week]!prepend:3{Days of the Week!!short}]">>
通常情况下,在启动 TiddlyWiki 时显示的条目,是在条目 [[$:/DefaultTiddlers]] 中指定为一筛选条件。
有时很有用,当要重新开启保存该文件时处于开启状态的相同条目。若欲如此,请设置 [[$:/DefaultTiddlers]] 为此筛选器:
```
[list[$:/StoryList]]
```
此筛选器传回在系统条目 [[$:/StoryList]] 中指定的条目,该系统条目是 TiddlyWiki 用以保存当前开启中的条目清单。
依序处理每个输入名称,并将位于 <<.field list>> 字段中其前者追加到输出。如果名称没有列于该字段,或者是里面第一个名称,则无输出。
<<.operator-examples "previous">>
<<.using-days-of-week>>
<<.operator-example 1 "[[Wednesday]previous[Days of the Week]]">>
<<.operator-example 2 "[[Monday]previous[Days of the Week]]">>
<<.operator-example 3 "Tuesday Wednesday Thursday +[previous[Days of the Week]]">>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
与 [[multiply 运算符|multiply Operator]]比较。
<<.operator-examples "product">>
<<.operator-example 1 "=1 =2 =3 =4 =5 +[product[]]">>
<<.operator-example 2 "[tag[HelloThere]get[text]length[]product[]]">>
TiddlyWiki 的项目和待办事项管理。
{{!!url}}
Projectify 是一个 Tiddlywiki 插件, 用于管理项目和待办事项清单,
灵感来自如 [[Todoist|https://todoist.com]] 和 [[Basecamp|https://basecamp.com]] 的产品。
Projectify 功能:
* 用于收集任务和想法的收件匣
* 将工作一起构建成单独的待办事项清单的项目
* 支持计划任务
* 用于快速查看所有项目、收件匣或计划任务的仪表板
<<.operator-examples "putafter">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]] +[putafter[Wednesday]]">>
<<.operator-example 2 "[list[Days of the Week]] +[putafter:2[Tuesday]]">>
<<.operator-example 3 "[list[Days of the Week]] [[Yesterday]] [[Today]] [[Tomorrow]] +[putafter:3[Tuesday]]">>
<<.operator-examples "putbefore">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]] +[putbefore[Wednesday]]">>
<<.operator-example 2 "[list[Days of the Week]] +[putbefore:2[Tuesday]]">>
<<.operator-example 3 "[list[Days of the Week]] [[Yesterday]] [[Today]] [[Tomorrow]] +[putbefore:3[Tuesday]]">>
<<.operator-examples "putfirst">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]] +[putfirst[]]">>
<<.operator-example 2 "[list[Days of the Week]] +[putfirst:2[]]">>
<<.operator-example 3 "[list[Days of the Week]] [[Yesterday]] [[Today]] [[Tomorrow]] +[putfirst:-2[]]">>
<<.operator-examples "putlast">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]] +[putlast[]]">>
<<.operator-example 2 "[list[Days of the Week]] +[putlast:2[]]">>
<<.operator-example 3 "one two three [list[Days of the Week]] +[putlast:-3[]]">>
''答:'' <<.from-version "5.1.16">>
如果条目有两个标签:`this` 和 `that`,创建一个橙色边框。
```
[data-tags*="bar"][data-tags*="froz"] {
border: 2px solid orange;
}
```
''如果您的 CSS 看起来像这样:''
```
[data-tags~="this"] {
border: 2px solid blue;
}
[data-tags~="that"] {
border: 2px solid red;
}
```
"""
`this` 创建蓝色边框
`that` 创建红色边框
如果互换位置,您可以用另一种方式。
"""
[[了解有关可能的属性的更多信息!|Attribute Selectors]]
''答:'' <<.from-version "5.1.16">>
标签 `this` 或标签 `that` 创建一个红色边框。
```
[data-tags~="this"],
[data-tags~="that"] {
border: 2px solid red;
}
```
[[了解有关可能的属性的更多信息!|Attribute Selectors]]
''考虑下列用例:'' <<.from-version "5.1.16">>
一个名为 `rank` 的字段,可以有不同的值,例如:`species`。
''答:''
现在的想法是:我们动态地创建样式表。该样式表如下:
"""
title: `myStyles`
tags: `$:/tags/Stylesheet`
"""
```
<$list filter="[rank[species]]">
[data-tiddler-title^="<$view field=title/>"] .tc-tiddler-body {
column-count: 2;
}
</$list>
```
此为每个条目名称创建一个 CSS 规则,其具有一个字段 `rank` 和值 `species`。
[[了解有关可能的属性的更多信息!|Attribute Selectors]]
''答:'' <<.from-version "5.1.16">>
有,请参阅: [[问:如何使用自订字段来设置条目样式?|Q: How can I use a custom field to style a tiddler?]]
''答:'' <<.from-version "5.1.16">>
* 如果条目没有标签,但需要设置样式,请使用:`data-tiddler-title` 作为 CSS 选取器
** 只有一个条目
* 如果用户希望以自订方式设置系统条目的样式,请使用:`[data-tiddler-title^="$:"/]` 作为 CSS 选取器
** 使用 TW 命名空间功能
* 如果用户想要具标签的条目的特殊行为。例如:Learning
** 请使用:`[data-tags*="Learning"]` 作为 CSS 选取器
使用的名称仅用于文档目的,而不更改现有的维基。不希望文档有副作用。
[[了解有关可能的属性的更多信息!|Attribute Selectors]]
<<.def qualify>> [[宏|Macros]]是[[状态机制|StateMechanism]]的重要组成部分。
传回在[[小工具树|Widgets]]中其位置的唯一字符串编码,由引导至该位置的嵌入条目的堆栈作为识别。
使用 <<.vlink transclusion>> 变量来实现。
!! 参数
;title
: 传回的字符串首码,通常是条目名称
<<.macro-examples "qualify">>
<<.mlink qualify>> 宏传回的结果,取决于其在嵌入堆栈中的位置。
下列两个示例是相同的,但生成不同的结果,因为第二个是由[[另一个条目|$:/editions/tw5.com/macro-examples/qualify-transcluded]]嵌入。
每个示例显示调用 <<.var qualify>> 的结果,然后 <<.vlink transclusion>> 变量的值。
<$macrocall $name=".example" n="1"
eg="""<ul>
<li><code><<qualify "BaseTiddler">></code></li>
<li><code><<transclusion>></code></li>
</ul>"""/>
<blockquote>
{{$:/editions/tw5.com/macro-examples/qualify-transcluded}}
</blockquote>
维基百科[[定义一个 Quine|https://en.wikipedia.org/wiki/Quine_(computing)]] 为//一个计算机程序,不接受任何输入,并将其自己原始代码的副本作为唯一的输出//。
TiddlyWiki 是一个不寻常的 Quine 实例,正是这种能力,生成了自己的原始代码的副本,这是 TiddlyWiki 的内核能力,独立保存变更至其本身。
"Quine" 也是一个[[在 iPhone/iPad 上的非官方 TiddlyWiki 应用程序|Saving on iPad/iPhone]]
! 简介
单选小工具显示 HTML `<input type="radio">` 反映一个给定的条目的字段是否有一个指定的值。选择该单选按钮设置条目的字段为选定值。
! 内容与属性
此 `<$radio>` 小工具的内容显示于 HTML `<label>` 元素也包含该单选按钮。亦即点击内容将有点击按钮本身相同的效果。
|!属性 |!说明 |
|tiddler |操作的条目名称 (默认为[[当前条目|Current Tiddler]]) |
|field |单选按钮绑定的 //tiddler// 的字段 |
|index|<<.from-version "5.1.14">> //tiddler// 的索引为[[数据条目|DataTiddlers]]绑定到单选按钮 (比 //field// 优先) |
|default |<<.from-version "5.1.24">> 如果缺少 `tiddler`、`field` 或 `index`,则为用于匹配的默认值 |
|value |//field// 或 //tiddler// 的 //index// 的值 |
|class |指定给该单选按钮标签的 CSS 类别 <<.from-version "5.1.14">> `tc-radio` 始终为默认,当被选定时则为 `tc-radio-selected` />|
|actions|<<.from-version "5.1.23">> 可选字符串包含 ActionWidgets,将在值更改时触发。<br>变量:''actionValue'' 可用于该操作。 |
|disabled|<<.from-version "5.1.23">> 可选。设置为 "yes",则禁用该单选按钮。默认为 "no" |
! 示例
!! 字段模式
此示例使用单选按钮小工具改变此条目的 `modifier` 字段:
<<wikitext-example-without-html """<$radio field="modifier" value="JoeBloggs"> Joe Bloggs</$radio>
<$radio field="modifier" value="JaneBloggs"> Jane Bloggs</$radio>""">>
!! 索引模式
在索引模式下使用单选小工具,需有 //index// 属性指定[[数据条目|DataTiddlers]]的索引名称与指定为其值的 //value//。
此示例设置条目 AnimalColours 内的 `Tree Frog` 索引:
<$macrocall $name="wikitext-example-without-html" src="""<$tiddler tiddler="AnimalColours">
<$radio index="Tree Frog" value="green"> green</$radio>
<$radio index="Tree Frog" value="brown"> brown</$radio>
</$tiddler>"""/>
{{RadioWidget Example}}
\define newText() value: $(actionValue)$
\define radioActions()
<$action-sendmessage $message="tm-notify" $param="RadioWidget ExampleTemplate" value=<<actionValue>> current=<<currentTiddler>> />
<$action-createtiddler $basetitle="$:/temp/test/value" $overwrite="yes" text=<<newText>>/>
<$action-navigate $to="$:/temp/test/value"/>
\end
!! 使用操作
当您选择以下选项时,将发生以下动作:
* 该值已写入到 $:/temp/test/value
* 条目 $:/temp/test 的 ''id'' 字段将更新
* 通知将显示 ''actionValue''
显示 ''actionValue'' 将显示的通知。
<$tiddler tiddler="$:/temp/test">
<$radio field="id" value="a" actions=<<radioActions>> > Option a </$radio>
<$radio field="id" value="b" actions=<<radioActions>> > Option b </$radio>
<$radio field="id" value="c" actions=<<radioActions>> > Option c </$radio>
</$tiddler>
----
此示例的 Wikitext 如下所示:
<$codeblock code={{RadioWidget Example!!text}}/>
<<.def "铁道图">>,有时被称为<<.def "语法图表">>,是一种视觉方式解释一种电脑语言的语法规则,犹如一份交通地图。
每个关系图始于左端且结束于右端,只需按照任何一条线从起始点到的终结点。所有的替代线都具有同等效力。一条线有时会跳过一个项目是可选的,或循环指示可以重复的项目。
<$railroad text="""
<" 开始 "> [:<" 选项 ">] {<" 重复 "> +","} <" 结束 ">
"""/>
在上面的示例中,逗号出现于每次发生 `重复` 的项目之间。逗号路径运行从右至左,并只可由第一次通过 `重复` 达成。
圆框中的字符都是文本,即他们表示自己。矩形框中的名称表示进一步的铁道图。
~TiddlyWiki 文档的铁道图是用 [[Railroad Plugin]] 生成。
\define __(doc) $:/plugins/tiddlywiki/railroad/$(languageTitle)$/$doc$
\define __en(doc) $:/plugins/tiddlywiki/railroad/$doc$
\define __show(doc)
<$transclude tiddler=<<__ $doc$>> mode="block">
<$transclude tiddler=<<__en $doc$>> mode="block"/>
</$transclude>
\end
<<__show readme>>
<<__show syntax>>
\define range_example(range)
```
[range[$range$]]
```
<$list variable=n filter="[range[$range$]]"><<n>> </$list>
\end
`range` 运算符生成一系列递增或递减的数字,对于计数和编号很有用,或可与[[Formula 插件|Formula Plugin]]结合使用。
|!Purpose|生成一系列的数字 |
|!Input|忽略 |
|!Parameter|1-3 以 `,` 或 `;` 分隔的数字 |
|!Output|一系列均匀间隔的数字,范围从 `<begin>` 到 `<end>` |
|!`!` Output|同 ''Output'',但顺序颠倒 |
其参数有三种形式:
|参数 |输出 |h
|`<end>`|所有数字最大为 `<end>`.|
|`<begin>,<end>`|数字从 `<begin>` 到 `<end>`,所有数字均匀间隔。|
|`<begin>,<end>,<step>`|数字从 `<begin>` 到 `<end>` 增量为 `<step>`。|
每个部分必须是一个数字,并按如下方式工作:
* `<begin>`: 开始计算于此数字。
** 如果 `<end>` >= 1,则默认为 1;或如果 `<end>` <= -1,则默认为 -1 。
* `<end>`: 停止计算余此数字。
** 除非介于两个间隔之间,否则此数字将显示在列表中。
* `<step>`: 按此数量计算(或减少)。
** 默认为 1。
** 不能为 0。
** 无论 `<step>` 是正或是负,都是从 `<begin>` 往 `<end>` 计数。
输出中的小数字数是固定的,并基于参数与//最大//的小数点位数之间。
为防止浏览器冻结, `range` 当前限制为 10,000 万个数值。
!! 示例
<<range_example "7">>
<<range_example "1, 10">>
<<range_example "17,13">>
<<range_example "1.001, 5, 1">>
<<range_example ".5,1.4,.004">>
! 简介
range 小工具显示一个 HTML `<input type="range">`,将此反映至给定的条目字段数值。调整范围滑杆,设置条目字段为该值。
! 内容和属性
`<$range>` 小工具的内文将被忽略。
|!属性 |!说明 |
|tiddler |操作的条目名称 (默认为 [[当前条目|Current Tiddler]]) |
|field |绑定到范围滑杆的//条目//字段 |
|index|<<.from-version "5.1.22">> //tiddler// 的索引,一个单选按钮绑定的[[数据条目|DataTiddlers]] |
|min |可以由 `<$range>` 小工具设置的最小值 |
|max |可以由 `<$range>` 小工具设置的最大值 |
|increment |可更改值的最小增量。 默认为 1 |
|default |如果字段丢失或为空,则此为小工具句柄相对于最小值和最大值的默认位置 |
|class |将 CSS 类分配给围绕范围滑杆的标签 |
|actions|<<.from-version "5.1.23">> 可选,在值更改时,要触发的包含 ActionWidgets 的字符串。<br>变量:''actionValue'' 可用于''所有''操作。<br>变量:''actionValueHasChanged'' 此处始终为 `yes` |
|actionsStart|<<.from-version "5.1.23">> 可选,包含 ~ActionWidgets 的字符串被触发,当 "handle" 为 ''clicked''。<br>变量:''actionValueHasChanged'' 此处始终为 `no` |
|actionsStop|<<.from-version "5.1.23">> 可选,包含 ~ActionWidgets 的字符串被触发,当 "handle" 为 ''released''。<br>变量:''actionValueHasChanged'' 为 `yes`,''如果'' 新值与起始值不同 |
|disabled|<<.from-version "5.1.23">> 可选,设置为 "yes",则禁用该范围输入。默认为 "no" |
! 示例
!! 范围 -1 到 10
<$macrocall $name='wikitext-example-without-html'
src="""<$range tiddler="$:/_RangeDemo/1" min="-1" max="10" default="1" increment="1"/> {{$:/_RangeDemo/1}}"""/>
!! 范围 0 到 1
<$macrocall $name='wikitext-example-without-html'
src="""<$range tiddler="$:/_RangeDemo/2" min="0" max="1" default=".01" increment=".01"/> {{$:/_RangeDemo/2}}"""/>
\define getText() $(text)$ - value: $(value)$ - changed: $(actionValueHasChanged)$
\define range-log(text:"", value:"", tiddler:"$:/temp/range/log")
<$vars text="""$text$""" value="""$value$""" >
<$action-setfield $tiddler="""$tiddler$""" $index=<<now "0hh-0mm-0ss:0XXX">> $value=<<getText>>/>
</$vars>
\end
\define clear-range-log(tiddler:"$:/temp/range/log")
<$action-setfield $tiddler="""$tiddler$""" text="{}" show=show/>
\end
\define logTiddler()$:/temp/range/log
\define clearLogButton()<$button actions=<<clear-range-log>>>清除日志</$button>
\define actionsStop()
<$macrocall $name="range-log" text=" actionsStop" value=<<actionValue>> />
\end
\define actionsStart()
<$macrocall $name="range-log" text=" actionsStart" value=<<actionValue>> />
\end
\define actions()
<$macrocall $name="range-log" text="actions" value=<<actionValue>> />
\end
!! 使用操作
<$range tiddler="$:/temp/range/1__" min="-1" max="10" default="1" increment="1"
actionsStart=<<actionsStart>> actionsStop=<<actionsStop>> actions=<<actions>>/> {{$:/temp/range/1__}}
<$range tiddler="$:/temp/range/__2" min="0" max="1" default=".01" increment=".01"
actionsStart=<<actionsStart>> actionsStop=<<actionsStop>> actions=<<actions>> /> {{$:/temp/range/__2}}
<$checkbox tiddler=<<logTiddler>> field="show" checked="show" unchecked="hide"> 显示日志</$checkbox> <<clearLogButton>>
<$reveal stateTitle=<<logTiddler>> stateField="show" type="match" text="show">
<$transclude tiddler=<<logTiddler>> />
</$reveal>
---
此示例的 Wikitext 如下所示:
<$codeblock code={{RangeWidget Example!!text}}/>
集成两个有趣的新功能的插件:
* [[SocialCalc|https://www.socialtext.net/open/socialcalc]] 提供一个功能强大的试算表
* [[Three.js|http://threejs.org/]] 提供交互式 3D 图形
{{!!url}}
<<<
I developed some plugins related to engineering tasks.
After using them for personal projects I'm glad to share with TiddlyWiki community.
<<<
\define tv-wikilink-template() https://tiddlywiki.com/static/$uri_doubleencoded$.html
\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]
欢迎来到 TiddlyWiki,一个非线性的个人网页式笔记本,谁都可以使用、永远保存、独立于任何公司。
TiddlyWiki 是 JavaScript 写成的一个完整交互式维基。它可以用于浏览器中当成一个单一 HTML 文件,或为强大的 Node.js 应用程序。它是可高度自订化的:整个用户界面本身被实作为可编程的 WikiText。
了解更多与观看演示在 https://tiddlywiki.com/
开发者文档于 https://tiddlywiki.com/dev/
! 加入社区
<$vars tv-adjust-heading-level="1">
<$transclude mode="block" tiddler="Forums"/>
</$vars>
! 安装 TiddlyWiki 于 Node.js
{{Installing TiddlyWiki on Node.js}}
! 使用 TiddlyWiki 于 Node.js
{{Using TiddlyWiki on Node.js}}
! 升级 TiddlyWiki 于 Node.js
{{Upgrading TiddlyWiki on Node.js}}
! 另请参阅
<<list-links "[tag[TiddlyWiki on Node.js]] -[[Installing TiddlyWiki on Node.js]] -[[Using TiddlyWiki on Node.js]] -[[Upgrading TiddlyWiki on Node.js]]">>
//此说明文件系由 TiddlyWiki自动生成//
\define tv-wikilink-template() https://tiddlywiki.com/static/$uri_doubleencoded$.html
{{Scripts for TiddlyWiki on Node.js}}
<<.from-version "5.1.23">> <<.op reduce>> 操作符对每个输入名称,运行子筛选器,将上一个子筛选器运行的结果作为变量传递。可选择指定累加器的初始值。它返回最终的子筛选器运行的结果。
<<.op reduce>> 操作符用于通过重复应用公式,将项目清单平展到单个项目。典型的用途,是将一个条目清单的给定字段值相加。
子筛选器中提供以下变量:
* ''accumulator'' - 上一个子筛选器运行的结果
* ''currentTiddler'' - 输入名称
* ''..currentTiddler'' - 子筛选器外部的 <<.var currentTiddler>> 的值<<.from-version "5.1.24">>
* ''index'' - 当前列表项的数字索引 (零是列表中的第一项)
* ''revIndex'' - 当前列表项的反向数字索引 (零是列表中的最后一项)
* ''length'' - 输入列表的总长度
如果 <<.op reduce>> 操作符没接收任何输入,则其输出将为空。在这种情况下,[[else 操作符|else Operator]] 非常有用。
<<.tip "文本筛选器操作数不能包含方括弧,但您可以使用变量解决此问题:">>
```
<$set name="sum-input" value="[add<accumulator>]">
{{{ =1 =2 =3 +[reduce<sum-input>] }}}
</$set>
```
<<.tip "与类似的命名[[筛选器 run 首码|Filter Expression]] `:reduce` 进行比较">>
```
\define num-items() [get[quantity]add<accumulator>]
[tag[shopping]reduce<num-items>]
```
等同于:
```
[tag[shopping]] :reduce[get[quantity]add<accumulator>]
```
<$macrocall $name=".tip" _="""如果未指定可选的第二个参数,则累加器初始值将为空。数字操作符将空输入视为数字 0。请参阅 multiply-input 示例,了解这如何影响 <<.op reduce>> 的结果。"""/>
<<.operator-examples "reduce">>
\define add-price() [get[price]multiply{!!quantity}add<accumulator>]
\define num-items() [get[quantity]add<accumulator>]
\define join-with-commas() [<index>compare:number:gt[0]then<accumulator>addsuffix[, ]addsuffix<currentTiddler>else<currentTiddler>]
\define multiply-input() [multiply<accumulator>]
\define display-variable(name)
''<$text text=<<__name__>>/>'': <code><$text text={{{ [<__name__>getvariable[]] }}}/></code>
\end
这些示例使用以下预先定义的变量:
* <<display-variable add-price>>
* <<display-variable num-items>>
* <<display-variable join-with-commas>>
* <<display-variable multiply-input>>
他们还使用以下数据条目:
<ul>
<$list filter="[tag[shopping]!has[draft.of]]">
<li>
''<$link><$text text=<<currentTiddler>>/></$link>'' quantity: <$text text={{!!quantity}}/>, price: <$text text={{!!price}}/>
</li>
</$list>
</ul>
项目数:
<<.operator-example 1 "[tag[shopping]reduce<num-items>]">>
总价:
<<.operator-example 2 "[tag[shopping]reduce<add-price>]">>
<<.operator-example 3 "[tag[shopping]reduce<join-with-commas>]" "使用 `<index>` 在第一个项目上的行为与其他不同">>
<<.operator-example 4 "[tag[non-existent]reduce<add-price>]" "空输入生成空输出">>
<<.operator-example 5 "[tag[non-existent]reduce<add-price>else[0]]" "如果输入为空,使用 `else` 以确保输出">>
<<.operator-example 6 "=1 =2 =3 +[reduce<multiply-input>]" "空初始值由数学操作符视为 0">>
<<.operator-example 7 "=1 =2 =3 +[reduce<multiply-input>,[1]]" "设置初始值,有时对于正确结果是必要的">>
以下主题提供了 TiddlyWiki 的规范参考文档:
<div class="tc-table-of-contents">
<<toc-selective-expandable 'Reference'>>
</div>
<<.def "参考条目">>提供全面相互关联的原始信息。读者很可能是一个中级或专家用户。
有几个类别:
;概念
* 与定义,一起形成术语
;用户手册
* 呈现 ~WikiText 功能的技术细节
* 细分类为:小工具消息、筛选器、小工具等等
;开发人员手册
* 呈现 ~TiddlyWiki 内部架构的技术细节
参考数据以一个简洁、正式的风格撰写,避免提及读者,转而侧重于 ~TiddlyWiki 本身的行为如何。被动语态常是合适的:
* <<.word "the template can be specified as a tiddler">> 而非 <<.word "specify the template as a tiddler">>
* <<.word "the widget can be used for various purposes">> 而非 <<.word "you can use the widget for various purposes">>
* 但 <<.word ""this widget has several possible uses">> 比较好,因为它更简洁
通常避免在参考条目的缩短动词形式。
为了减少读者会忽视 "not" 这个字的风险,可以将其斜体化。
避免在参考条目使用大多数简约的动词形式。但那些结尾为 <<.word "n't">> (<<.word "aren't">>、<<.word "doesn't">>、<<.word "hasn't">>、<<.word "isn't">> 等) 式可以接受的,因为他们使 <<.word not>> 不容易被不小心忽略.
Refnotes 插件是一组用于创建缩写、脚注和引文的宏和样式表。它还制作脚注、缩写(词汇)和参考(书目表)表格。
{{!!url}}
Refnotes 包含代码和元素
;创建和插入
:缩写
:脚注
:参考
;创建表格
:缩写词或词汇表
:脚注和尾注
:使用不同输出样式的参考文献(参考书目)
刷新机制是[[维基化机制|WikificationMechanism]]的一部分,用于在条目存放区中发生更改时,更新渲染。
刷新机制是对条目存放区更改的异步通知。这样做是为了将多个连续更改,合并到单个更改通知中。因此,一系列修改多个不同条目的操作小工具,将仅触发单个刷新周期。
发生更改时,通过调用根小工具的 "refresh" 方法更新呈现。刷新方法确定是否需要更新小工具以反映传入的更改,然后递归调用到每个子小工具的刷新方法
刷新周期本身相当慢,因为它涉及访问渲染树中的每个节点。为了保持性能,有一个[[刷新节流|RefreshThrottling]]机制,当同一个条目发生快速更改时,可以延迟刷新处理。
刷新节流机制允许在对同一个条目发生快速更改时,限制(或延迟)刷新周期。其用于在编辑草稿条目时,保持回应能力,但也可用于其他条目。
管理刷新节流的规则如下:
* 发生更改通知时,仅当所有修改的条目都满足以下条件之一时,才会进行节流:
** 具有字段 `draft.of`
** 具有字段 `throttle.refresh`
** 标题首码为 `$:/temp/volatile/`
* 如果要限制刷新周期,在内部指定的 [[$:/config/Drafts/TypingTimeout|Hidden Setting: Typing Refresh Delay]] 设置一个计时器 (取消任何珍贵的设置计时器)
** 当计时器触发时,将触发刷新周期,传递所有延迟刷新周期的聚合标题
"~RegExp in ~Tiddlywiki" 包含 ~Tiddlywiki 中的正则表达式的实际用例。
{{!!url}}
正则表达式是一种使用字符串行来描述复杂搜索模式的方法。
"~RegExp in ~Tiddlywiki" 有四个主要部分
* 使用正则表达式来匹配条目名称中的模式
* 使用正则表达式符合条目字段中的模式,不包括条目文本(正文)
* 使用正则表达式符合条目正文中的模式(文本字段)
* 使用正则表达式进行验证,如用户名、密码等。
<<.def "正则表达式">> 是要搜索的字符的字符串简明的表示方式。~TiddlyWiki 中使用的格式,完全定义于[[此 Mozilla 参考文档|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions]]。
[[筛选器语法|Filter Run]]使其无法直接指定包含方括弧的正则表达式。解决办法是将该表达式存放于[[变量|Variables]]。请参阅 <<.operator-examples "regexp" "示例">>。
该参数 <<.place X>> 可以选择一串旗标开始或结束:
<$railroad text=""" "(?" { ("i"|"m"|:"g") } ")" """/>
通常只用到 `i` 旗标:它强制大写字母和小写字母的区别被忽略。
如果 <<.place X>> 是空的,则 <<.op regexp>> 将匹配所有输入的条目。
<<.operator-examples "regexp">>
<<.using-days-of-week>>
<<.operator-example 1 "[!is[system]regexp[Wiki]]" "名称中含 `Wiki` 的非系统条目">>
<<.operator-example 2 "[!is[system]regexp[(?i)Wiki]]" "名称中含 `Wiki` 的非系统条目,忽略大小写">>
<<.operator-example 3 "[!is[system]regexp[Wiki(?i)]]" "同上">>
<<.operator-example 4 "[regexp[(?i)\.jpe?g$]]" "名称结尾为 `.jpg` 或 `.jpeg` 的条目,忽略大小写">>
<<.operator-example 5 "[regexp:created[^201408]]" "创建于 2014年08月的条目">>
正则表达式 `[0-9]{2}` 匹配两个连续的数字。因其包含方括号,与 <<.op regexp>> 运算符一起使用的方式是通过[[变量|Variables]],示例如下:
<$macrocall
$name="wikitext-example-without-html"
src="""<$set name="digit-pattern" value="[0-9]{2}">
<<list-links "[regexp:title<digit-pattern>]">>
</$set>"""/>
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.10-beta...v5.0.11-beta]]//
!! 不兼容的更动
详见 [[Notes for upgrading to 5.0.11-beta]]:
* 命令行操作的缺省输出位置已更改为 `/output` 文件夹位于 TiddlyWikiFolders 中的子文件夹 (现行目录)。
* 注意缺省条目 [[$:/core/ui/PageMacros]] 在此版本已更改。若您曾经修改过此条目,则应先将此更动复制至另一条目、删除 [[$:/core/ui/PageMacros]]、运行更新、然后再于新版本的 [[$:/core/ui/PageMacros]] 手动修改先前的自订更动
!! 文档的改进
* 添加有关 [[备份数据|The First Rule of Using TiddlyWiki]] 的更多的警示消息
!! 可用性改进
* 诸多性能优化,尤其是筛选器操作
* 添加支持固定链接,以及浏览器的后退和前进按钮
* 添加支持 WikiLinks in Markdown via `[link text](#TiddlerTitle)`
* 添加支持显式外部 [[Linking in WikiText]] (例如:`[ext[tooltip|url]]`)
* [[更换|https://github.com/Jermolene/TiddlyWiki5/issues/580]] 汉堡功能表图标为`>>`形图标
* [[加强|https://github.com/Jermolene/TiddlyWiki5/commit/552657fc584dbb36754d3fcabca2cdef7e916ec9]] 纯文本的解析,以便使用 CodeBlockWidget,因此如果已安装该插件程序则使用语法高亮显示。此外这给了我们语法高亮显示的 JavaScript 缺省条目
* 改进 German、French、Italian、Japanese 以及 Chinese 翻译
* [[移除|https://github.com/Jermolene/TiddlyWiki5/commit/61c3f8a5ba3c815d623c06f6a97d9c00a31a4157]] WikiText 条目,自侧边栏的 "类型" 页签
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/a90339d1e573ec82dba1caeaead0f71717618a80]] 在编辑缺省条目时的各种警示消息
* [[允许|https://github.com/Jermolene/TiddlyWiki5/commit/0ac4c2b554f045c6bd2dc6ea5daa0d2f0397d04c]] 字段名称包含数字
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/a4294b55f0a217d019a6e4cbb62f6a8a19668928]] 警示横幅,当尝试编辑二进位条目时
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b84c663215cf7877fff960748af4b2849ae0dbb3]] 浏览器窗口的标题的自动刷新,从 $:/core/wiki/title
!! 可编程性改进
* 改进了垂直布局的 <<.mlink tabs>> 宏
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/93566cdc332226b77eaba8a70fa166f3b8fcfe1e]] "标准" 页签至 [[高端搜索|$:/AdvancedSearch]]
* [[增加|https://github.com/Jermolene/TiddlyWiki5/commit/e83759e86d2a9e05e4b85dae50925fe988f8e239]] 新的筛选器运算符 <<.olink before>> 和 <<.olink after>>
* [[增加|https://github.com/Jermolene/TiddlyWiki5/commit/570cad1c7f90e685961130918f09a7f9b2951f8c]] 新的 <<.olink get>>
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/f7e50e0950c5bf10d94d926576011893418b25f1]] [[BuildCommand]]、[[OutputCommand]]、[[ClearPasswordCommand]]
* 添加可扩充的 StartupMechanism 规划启动任务
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/711b76307c95d0026f79f584e85ae3d4b7289d15]] 至新版 CodeMirror
* 添加 https://github.com/Jermolene/TiddlyWiki5NodeWebkit, 使用 TiddlyWiki 作为一个 node-webkit 应用程序中的程序库的一个演示
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/4e07b3335b570f4039427e11df729fc4a899a671]] `.tid` TiddlerFiles,使其允许单行 `text` 字段
* 改名 `$:/ShowEditPreview` 为 `$:/state/showeditpreview`
!! 修复错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/cc60ad1428dcf99a7ea0787e43e3b37f5a02fb98]] 顶端栏图标悬停的错误,于 Firefox
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/e548dd35af2d3195f82899096d4a4080362a1ff0]] 在文本内编辑控制项的拖放问题
!! 贡献者
([[@Jermolene|https://github.com/Jermolene]]) 要感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
[[@BramChen|https://github.com/BramChen]], [[@mwfogleman|https://github.com/mwfogleman]], [[@nameanyone|https://github.com/nameanyone]], [[@natecain|https://github.com/natecain]], [[@pekopeko1|https://github.com/pekopeko1]], [[@pmario|https://github.com/pmario]], [[@sukima|https://github.com/sukima]], [[@xcazin|https://github.com/xcazin]].
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.11-beta...v5.0.12-beta]]//
这是一个紧急发布,修复 5.0.11 的缺省条目处理的单一的明显的错误,详见 [[讨论串|https://groups.google.com/d/topic/tiddlywiki/pNxZsSCVp7c/discussion]]。
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.12-beta...v5.0.13-beta]]//
!! 无障碍改进
此版本包含诸多功能旨在改善与屏幕阅读器的 TiddlyWiki 的经验。特别感谢 [[@domasofan|https://github.com/domasofan]] 的回馈意见
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/34e4166dc5f24519b000de66853d5b1aee8f1648]] 显示/隐藏 侧边栏按钮的标题和提示
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/346b2f86111815c746c993fa09b7f677fa0b4b37]] 高端搜索链接的标题和提示
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/6f859c8d447a477a9120bdc308d1524558a80f20]] "开启" 页签里的关闭按钮的标题和提示
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/06b0f9adb7209870b46d42f832c1f7ad7a78976f]] ''aria-label'' 支持 LinkWidget
* [[更换|https://github.com/Jermolene/TiddlyWiki5/commit/bc9b67cbc3f363d48aafea86c077fcd5a9c0ca64]] H1 标记用于页面标题,且 H2 标记用于条目名称
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/eeedcb6d94a25d02e8fec45c89b30c7f2bcdde73]] 条目与页面工具列按钮的标题和提示
!! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/9ab0c84140bbc0f31cf65e632bddac616bbadbda]] 支持全域 [[宏|Macros in WikiText]] 借由新的 ImportVariablesWidget
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/3182a2d599f0e4b70a73fe369df4f398587dc1a9]] SelectWidget
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/f131c378934a86b741ab5b808437c95694dc5503]] `text/html` 条目的行为,使其可显示于 HTML iframe 元素之内
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/9b576f2a8d39dcca37bcb709183a8f9b27f33ccf]] 分组标题于编辑模式中的内容类型的下拉式菜单
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/4d70d5780e51cf0918fba15954cd47549e4e1a9f]] 使用选项按钮的高端导览设置于 [[控制台|$:/ControlPanel]]
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/f7b8813a27141a78980eefa03df70a4a2de9d10b]] (以及 [[此处|https://github.com/Jermolene/TiddlyWiki5/commit/3f25db0abe8cd28712c020f218506710cec004b6]]) 固定链接的行为,因此现在 [ext[https://tiddlywiki.com/#HelloThere]] 只开启单一指定的条目
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/0c48502e8ed214cee23537d06e7e87efd53592c7]] 支持 `"""` 多行属性于 [[宏|Macros in WikiText]]、[[小工具|Widgets in WikiText]] 以及 [[HTML 元素|HTML in WikiText]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/32099b85d3b12f9e590274cb7550e3e531131706]] [[目录|TableOfContents]] 页签于 tw5.com 版
!! 可编程性改进
* [[恢复|https://github.com/Jermolene/TiddlyWiki5/commit/1b37d660ea7cd576cfeadfe8b782fe6c62dc9048]] ''escape'' 为放弃编辑的快捷键
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/9547a1f01c144c604c294f394a68d7dc6dbe4e5d]] 支持以 URI 引用[[外部图片|ExternalImages]],且不存放于 TiddlyWiki HTML 文件内
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/d2796d0c9c7ed7a971ae6b0752d7418384072bb5]] [[SetField|SetFieldCommand]] 命令
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/305617b632fd6ecf25cd4be85f4dfb5a5a65dfef]] [[SaveTiddlers|SaveTiddlersCommand]] 命令
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/f14ecf4eb8965f2e407ccac51d4277330221efe3]] 支持系统页签 [[$:/tags/RawMarkup]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/0bdc5b5c70fbbf34aa459afcf0499fc9c8ae6374]] 编辑器类型于控制台中的高端页签
* [[重构|https://github.com/Jermolene/TiddlyWiki5/commit/1717c93d001ad184a08ca66d1bffb33fb5d32b3a]] CodeMirror (https://tiddlywiki.com/codemirrordemo.html) 插件更简易的组态
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b2e48d00e9ea068a22b5ac5c0a4c93e8ddbb4a8a]] 支持 [[Environment Variables on Node.js]]
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/eee3a0cf8e5aa047f8596df06e28194409f38b01]] ServerCommand 允许路径前缀
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/4238af2a405c14d22937d7c47a70bfb3d4e6f22d]] <<.olink listed>> 使用任何列表字段
!! 修复错误
* 修正 [[此处|https://github.com/Jermolene/TiddlyWiki5/commit/6fb992690d33940d3509d7d4d74538e7f458e063]] 以及 [[此处|https://github.com/Jermolene/TiddlyWiki5/commit/0fae9ee99200e7eca30b9db0584c479d58841349]] 状态条目无意中保存的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/a03a15e7de32a1b41618146ac334b5cd7d432e91]] TextWidget 未正确刷新的错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/d8a142fed5b22a8273d93ba05095e5f9c6929cb3]] 于 Safari 垂直页签的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/b8aedf2ca3cfc870be5a46accbb2dc0ddbb6d451]] Markdown 里的图片问题
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 要感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@BramChen|https://github.com/BramChen]]
* [[@buggyj|https://github.com/buggyj]]
* [[@csugden|https://github.com/csugden]]
* [[@danielo515|https://github.com/danielo515]]
* [[@IreneKnapp|https://github.com/IreneKnapp]]
* [[@jayfresh|https://github.com/jayfresh]]
* [[@mwfogleman|https://github.com/mwfogleman]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.13-beta...v5.0.14-beta]]//
!! 主要更动
!!! 改善控制台的插件页签
[[控制台|$:/ControlPanel]]的''插件''页签已改进,加上可用来显示插件文档的文档页签。另有一个更大的可拖动区域,能将整个条目拖到其他维基。
!!! 可设置的按钮工具列
页面工具列和条目工具列,现在可以设置用几个新的按钮 - 详见 [[控制台|$:/ControlPanel]]里的''视觉外观''和''工具列''页签。
侧边栏工具页签现在显示所有可用的页控制,允许他们被调用或选用显示于工具列。条目信息区现在包括一个工具页签,内含所有条目动作的按钮。
!!! 升级机制介绍
有两个组成部分:
* 更灵活的[[导入机制|ImportMechanism]]:
** 介绍了即将导入的条目作成一个待处理的导入清单,允许用户对其进行检查,如有必要可取消选择实际导入它们
** 提供[[升级模块|UpgraderModules]]得以处理每个将导入的条目
*** [[插件升级程序|$:/core/modules/upgraders/plugins.js]]模块处理插件版本检查以及从特定的[[升级程序库|UpgradeLibrary]]插件条目将其升级
*** [[系统升级程序|$:/core/modules/upgraders/system.js]]模块负责排除导入某些系统条目 (目前为 [[$:/StoryList]] 与 [[$:/HistoryList]])
*** [[布景主题调整升级程序|$:/core/modules/upgraders/themetweaks.js]]模块处理自其 pre-5.0.14-beta 格式迁移布景主题 (见下列说明)
* [[升级插件|UpgradePlugin]]和为升级标准版 TiddlyWiki 文件提供了自订、单一用途的用户接口的相关联的版本,请参阅 https://tiddlywiki.com/upgrade.html
!!! 改进驼峰式匹配的辨识
TiddlyWiki 现在采取更加保守的方法应该自动地生成连接辨识出的[[驼峰式匹配|CamelCase]]条件。以前,破折号和底线被当成小写字母,导致一些误判。详见 [[GitHub bug #337|https://github.com/Jermolene/TiddlyWiki5/issues/337]]。
!!! 固定链接缺省为关闭
先前的 TiddlyWiki 试用版会自动更新浏览器的网址列,因此动态地反映了当前已开启条目。如此可易于复制与粘贴固定链接至他处,但也导致许多混乱,致使一般用户总是无法了解在他们刷新页面后,为什么浏览器显示一些非预期的条目。
在 5.0.14-beta 版,已改变该设置值。可于[[控制台|$:/ControlPanel]] ''高端''/''设置'',将此设置值切换回 "包括目标条目和当前已开启的条目串行"。
!! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/f6d7d87a3d49f816ccc050bdf4a5394eed37dd51]] 下拉式预览图标于[[标签管理|$:/TagManager]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/56945d91d327489478fc44dce5234ece35a01abb]] 未保存的更动的征兆,通过改变保存变更按钮的颜色
* [[拆分|https://github.com/Jermolene/TiddlyWiki5/commit/7aa6c7c06d8b5359f183e6b9f6f57cf89611cda8]] wikitext 的重点解析成单独的模块以便他们可以用 `\rules` 独立控制
* [[重构|https://github.com/Jermolene/TiddlyWiki5/commit/f43cd5ba9c6e5eda221ec738174e61e34fad2b8d]] (与[[此处|https://github.com/Jermolene/TiddlyWiki5/commit/a3de93b4eb8b108239b2e4b496308026e9e9eef8]])[[版本历史|ReleaseHistory]]将各版本置于垂直页签
* [[停止|https://github.com/Jermolene/TiddlyWiki5/commit/3ff7462afd5414b92680c6b6e67274be79233224]] 保存 [[$:/HistoryList]], 从而避免失控地增加文件大小
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/73cf1bfdb3cd238ac7800162f58d44a8bb60019b]] (与[[此处|https://github.com/Jermolene/TiddlyWiki5/commit/d5e4b9b5d1e7db5ad4d769433cc934ef08265f57]]) 移除打印样式的页面背景
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/07f13b310d300631267936ad8bc55a338369afc0]] 插件条目的显示,使显示其构成的条目,而非原始的 JSON
* [[搬移|https://github.com/Jermolene/TiddlyWiki5/commit/799a5b059a40a51fdeb1dae7a0eb5bf8a79f5106]] 全屏幕插件的功能于核心
!! 可编程性改进
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/c23f6af4b5c59f4d09dd8d6704e1939bb9d5b2d3]] TiddlerWidget 添加一个 CSS 类别,对应每个标签于显示的条目
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/d357e1706c91d17a72fb19fedf43e57071fc7dd6]] 支持于条目编辑器中隐藏指定的字段
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/be040ea8a2cc8962f1a28a313e4c9ebc2d5c0e31]] 支持可变操作数于筛选器 (详见 [[筛选器|Filters]])
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/1f16ef6fa88b51d2dad7c8e57fcff014950a7442]] 支持小工具消息 [[tm-permalink|WidgetMessage: tm-permalink]] 与 [[tm-permaview|WidgetMessage: tm-permaview]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/tree/master/plugins/tiddlywiki/browser-sniff]] 浏览器嗅探插件,以便 tiddlywiki.com 可以显示正确的特定浏览器的文档
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/ef67cc3fd9b267a522598abccdfbb93fbfca240c]] 设置选项用于指定在用主从式版本设置中保存新条目的缺省位置
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b4d47858e587c96f3a68cc28cffff181ec45f55f]] 支持 [[信息机制|InfoMechanism]]
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/f08f57c5d24eb0146ac2cb77472a5fc5f135f1e9]] 允许 CheckboxWidget 切换字段如同可切换标签
* [[重构|https://github.com/Jermolene/TiddlyWiki5/commit/21c137a66c37f010b36697bb6bed5321138fbb9f]] [[控制台|$:/ControlPanel]]布景主题调整保存于独立的条目
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/e18d8a88661a1c2caa1b722841747c75ca6af437]] <<.mlink tabs>> 宏,允许页签使用范本
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/91acad0f7ce8637945a953dfcb122cd31292626d]] (与[[此处|https://github.com/Jermolene/TiddlyWiki5/commit/8612bc4006e717e4fa3c562fa72a85650206b66f]]) [[系统标签|SystemTags]]支持插入内容于已开启的条目的上端或底部
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/f793816dfa687ae7791143b33487fd5f95f3265c]] [[嵌入小工具|TranscludeWidget]]支持嵌入插件子条目
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/c73853288c5b4b0716da94fea2f2edec09345643]] (与[[此处|https://github.com/Jermolene/TiddlyWiki5/commit/08f775eac8cb053d08c1c561e65a5eeb87c4c6b6]]) 支持自 `*.htm` and `*.hta` 导入文件如同既有的支持导入 `*.html` 文件
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/73d7e85e11c7732080ca8bc4321ebb12afbac09c]] "sticky titles" 布景主题可作用于当条目编辑模式
!! 修复错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/5b3b62f93da4b7b19e24ccf72d9ce20b9edce6d5]] BuildCommand 目标的运行顺序的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/d93da81671a704377209fc1871425c3a7c5db35a]] 失去外部链接的悬停颜色的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/465f4ac46903070759a572d183c498c5579cb922]] 刷新模块对话的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/3351ae7e29cbf3bed6fc1925ef33664bcc59fef5]] 于 Firefox 停用 cookies 时发生的问题
* [[放宽|https://github.com/Jermolene/TiddlyWiki5/commit/5260899d8b090e8886e41e3aa770fdcf5967ad8c]] 对紧接于宏的定义结束 '\end' 的分行符号的要求
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@BramChen|https://github.com/BramChen]]
* [[@pmario|https://github.com/pmario]]
* [[@ssokolow|https://github.com/ssokolow]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.14-beta...v5.0.15-beta]]//
!! 可用性改进
* [[简化|https://github.com/Jermolene/TiddlyWiki5/commit/c57b00996855f10d9b7fa2aa4e9deb2a2a607d7f]] 缺省开启目
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/32a7ee2683ace619599f0ab73028307ca33f4e4c]] 停用插件功能(见[[插件机制|PluginMechanism]])并提供用户接口于[[控制台|$:/ControlPanel]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/4b05608ad5e77043b01495825ea0f0e76c378760]] 调用[[标签管理|$:/TagManager]]的页面控制按钮
* [[简化|https://github.com/Jermolene/TiddlyWiki5/commit/c4b76ceb0bc786bcceb12fc3417bb8c4bfde27a9]] 下载一个主从版维基的脱机副本
* [[封锁|https://github.com/Jermolene/TiddlyWiki5/commit/2bbe9f76ecf8fc89c789e72be00ac19e811195ee]] 暂存的状态条目,从导入/升级
!! 可编程性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/c912fed55d94c9bef2d541cd55f458b12172941c]] 横幅到编辑模板,鼓励改善文档
* [[重构|https://github.com/Jermolene/TiddlyWiki5/commit/f75af2c983e10e8a82639890b993fb5cf042d610]] `saver-handler.js`,自 `syncer.js` 分离之
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/8cf726275c19ed5b4a0ed1cf8354d64d1bc29da5]] [[目录宏|Table-of-Contents Macros]]支持
* 简化启动模块架构 (见 [[Startup Modules.svg]])
* [[改变|https://github.com/Jermolene/TiddlyWiki5/commit/25777b147fa4ed2f915150aec503ad1e094e6043]] [[拖放区小工具|DropzoneWidget]] 的覆叠文本使其支持多语翻译
* [[采用|https://github.com/Jermolene/TiddlyWiki5/commit/920e11e7921f777170aa2f9e1836c000fec2e26d]] 新的 [[刷新按钮|WidgetMessage: tm-browser-refresh]]以及恢复[[首页按钮|WidgetMessage: tm-home]]的行为
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/fbf307c648ae0e92679c54f7d03f197a75b4e101]] ''alt'' 属性到[[图片小工具|ImageWidget]]
!! 修复错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/c8830d32f74b8c228553f11f7f55b5be45ae6471]] 在 Windows 下生成 TiddlyWiki 的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/34461cb2fe554331a0269fd7795b1d6a879fcba9]] 升级导引中无法点击的下载链接
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/9e85ddfec78dd8df71e6173100dce659417551f4]] 在 ''empty.html'' 中缺少语言标志
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/18592fe8f810d1858ca040da1a7c4a81fb74cfed]] 条目类型的图形和文本编辑器之间切换的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/fe6623d7feed1a9068e15bfac57be0b0924e8915]] 侧边栏标签的前景颜色
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/c912fed55d94c9bef2d541cd55f458b12172941c]] github 来源链接 tiddlywiki.com 标题包含冒号无效的问题
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@BramChen|https://github.com/BramChen]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.15-beta...v5.0.16-beta]]//
!! 不兼容的更动
5.0.16-Beta 比任何以前的版本带来了更多不兼容的改变。这些变化都有可能破坏为以前版本的 TiddlyWiki 5 写的几乎所有插件、以及会破坏多数的客制化。
* [[改变|https://github.com/Jermolene/TiddlyWiki5/issues/764]] 所有 CSS 类别的前缀,从 `tw-` 改为 `tc-` (例如,`tw-tiddler-frame` 改成为 `tc-tiddler-frame`;缺掉的前缀也增加了,因此 `btn-invisible` 改成为 `tc-btn-invisible`)
* [[改变|https://github.com/Jermolene/TiddlyWiki5/commit/2f69ea362cd673f59b9fadbe11f1f95549a59813]] 所有消息的前缀,从 `tw-` 改为 `tm-` (例如,`tw-close-tiddler` 改成为 `tm-close-tiddler`)
* [[改变|https://github.com/Jermolene/TiddlyWiki5/commit/89fd5379dd78887fc21746d792072bf5a25f0c56]] 所有变量的前缀,从 `tw-` 改为 `tv-` (例如,`tw-config-toolbar-icons` 改成为 `tv-config-toolbar-icons`)
* [[改变|https://github.com/Jermolene/TiddlyWiki5/commit/112a9a95d95e9f62f110c97a4faaf537c5c100b1]] prefix/removeprefix 筛选器运算符区分大小写
!! 与 TiddlyWikiClassic 兼容
此版本包括一个初步版本的新插件,提供创建的内容与 TiddlyWikiClassic 的兼容性:
https://tiddlywiki.com/classicparserdemo.html
随后的版本将包括用户迁移内容的逐步指示文档。
非常感谢 @buggyj 为此插件所作的一切。
!! 可用性改进
* [[改良|https://github.com/Jermolene/TiddlyWiki5/commit/e47852cb141b384ad2a9097eca795545cb5b2494]] [[tm-browser-refresh|WidgetMessage: tm-browser-refresh]] 消息的行为,因此它不再清除网址的位置哈希(网址中 # 部份)
* [[隐藏|https://github.com/Jermolene/TiddlyWiki5/commit/88c9c0c3ee115917b8c1a9126452bb0574061857]] 从静态效果的工具栏按钮
!! 可编程性改进
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/48312272adb17610db96d50758e6af947cab7b1d]] 筛选器 <<.olink all>> 可选择所有的源条目
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/43aeb47fc34f1ba424030c4f78ee907fe7b1d5d8]] 单行宏定义不正确包括值中空格的问题。(例如,`\define mymacro() yes` 会将宏的值设置为 " yes",伴随一个前置空格)
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/d2a5a12f2d6b6ccc36dd22a70ac2def08d1d3722]] [[目录宏|Table-of-Contents Macros]],若条目有 caption 字段则使用之
* [[可配置性|https://github.com/Jermolene/TiddlyWiki5/commit/b437f1b450f5f2a3104a9086f7c674299b53b9bc]] 在条目信息皮肤中显示的缺省页签 (请参阅 [[Configuring the default TiddlerInfo tab]])
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/dcf4e93a3283e3e93cc14e50366f9b0252870835]] <<.olink suffix>> 与 <<.olink removesuffix>> 筛选器运算符
!! 修复错误
* [[回复|https://github.com/Jermolene/TiddlyWiki5/commit/ad40223d6b9bed435d9381611cb9de1841b53df6]] 条目小工具的不正确刷新
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/44228ed9f733217557851150f5ae45d9ebb23420]] 可选择展合的[[目录宏|Table-of-Contents Macros]]的缩进
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@BramChen|https://github.com/BramChen]]
* [[@buggyj|https://github.com/buggyj]]
* [[@gernert|https://github.com/gernert]]
* [[@pmario|https://github.com/pmario]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.16-beta...v5.0.17-beta]]//
!! 亮点
此版包含出自 [[@giffmex|https://github.com/giffmex]] 的欢迎和教学文档的重大改善,以及新的开发文档纳入 [[@cheigele|https://github.com/cheigele]] 和 [[@cjrk|https://github.com/cjrk]] 的 [[工作|https://github.com/cjrk/saa-tw]]。
!! 不兼容的更动
!!! 改变系统标签 `$:/tags/stylesheet` 为 `$:/tags/Stylesheet`
[[问题|https://github.com/Jermolene/TiddlyWiki5/issues/824]] `$:/tags/stylesheet` 与其他系统标签不一致。此版添加支持 `$:/tags/Stylesheet`,且若用到 `$:/tags/stylesheet` 则增加弃用警告,于试用版之前对 `$:/tags/stylesheet` 的支持将被移除。
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/f6ff0a7f715bdf12dfba6556f72c49ea2c3016b0]] `$:/tags/Stylesheet` 的支持,且当使用 `$:/tags/stylesheet` 时,有弃用警告
!!! 改变 ButtonWidget 的 `title` 属性为 `tooltip`
ButtonWidget 的 `title` 属性与 `tooltip` 属性的用法与 ImageWidget 及 LinkWidget 的用法不一致。此版添加支持 `tooltip` 属性至 ButtonWidget,除现有对于 `title` 属性的支持,但带有弃用警告。
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b7f638aef3094d0552db2f72330b40a526113bd5]] `tooltip` 属性至 ButtonWidget
!!! 移除支持正则表达式筛选器操作数
如于[[相关问题|https://github.com/Jermolene/TiddlyWiki5/issues/762]]所讨论的,对正则表达式筛选器运算符的支持并不完整和不一致。计划于移除对此功能的支持下个版本。已提供一个新的筛选器运算符来取代它,每当用到正则表达式筛选器运算符,会附加显示弃用警告。
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/f4fff7a33037ba9dd537379bcb44a52a280868d6]] <<.olink regexp>>
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/d45c417c187fe3dcc35ee7a308e64feebc7b185b]] 正则表达式筛选器运算符的弃用警告
!!! 存储库中重组
目标是使 TiddlyWiki 存储库更容易为新的用户所理解。
* [[搬移|https://github.com/Jermolene/TiddlyWiki5/commit/6e9cd5943703f7137e819fcb85376423b9c930d5]] 脚本到一个单独的 `bin` 文件夹
!! 可用性改进
* 重组 [[控制台|$:/ControlPanel]] 使其更符合逻辑和可用
!! 可编程性改进
* 开发者文档移至 https://tiddlywiki.com/dev
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/872e6fc2532012f0f9acfb29aa24a9cd5f340b9d]] (与 [[此处|https://github.com/Jermolene/TiddlyWiki5/commit/c8a131ffd4716f2b99ab508567422ff463f2849d]]) 至 `serve.sh`/`serve.cmd` 脚本
* [[停用|https://github.com/Jermolene/TiddlyWiki5/commit/ac54fe33263cbe48bc294f9c14257ccc146be38e]] 插件于安全模式
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/c1de85838f3d0d3e6a207152ecc9d61ff08a4b05]] <<.mlink timeline>> 宏
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/f16d1832aae9a7ce71dea78b16c11afaf673acf2]] <<.mlink dumpvariables>> 宏
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/ba3f8002355607c8b00b7d184f01fa68bbcda152]] [[目录宏|Table-of-Contents Macros]],如此可以停用个别链接
* [[移除|https://github.com/Jermolene/TiddlyWiki5/commit/542788bfeba98ec3bac0bb721293c16354bc1b34]] (与 [[此处|https://github.com/Jermolene/TiddlyWiki5/commit/487c4a40abda2b457b4015033bf1be76bd81dcc9]]) 非必要的 `<p>` 标记,从编辑标签与类型的下拉式清单
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/ccd916ca7cb45468ac30eb48bfdf86bea704d810]] ''multiple'' attribute to the BrowseWidget
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/ab944bbf02e9fae606632a11df1053a46573fa49]] 查看样板,字段 ''hide-body'' 设为 ''yes'' 时隐藏条目内文
!! 修复错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/c713eddbef50603e313a86f78c185753bab3d607]] 草稿条目未计入未保存的修改的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/f87ce7e98a083f1bdcff5b1887b56aa95b731efe]] 在 5.0.16-Beta 中的键盘快捷键的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/756e05504b33c387da7d3f81446a18f9a8fefe49]] 解析在行内模式中的样式表的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/9adc30f69fba169813638021780263ff0df4e2bc]] 可选扩展[[目录宏|Table-of-Contents Macros]]的错误
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@BramChen|https://github.com/BramChen]]
* [[@buggyj|https://github.com/buggyj]]
* [[@cheigele|https://github.com/cheigele]]
* [[@cjrk|https://github.com/cjrk]]
* [[@giffmex|https://github.com/giffmex]]
* [[@pmario|https://github.com/pmario]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.17-beta...v5.0.18-beta]]//
这是在 9 月 20 日 TiddlyWiki 发布完整版之前的小改版。文档已完成清理与改进(将有更多的改善)。
!! tiddlywiki.com 文件的布局
在 tiddlywiki.com 文件的布局进行了调整,使之更加符合逻辑。请参阅 [[#823|https://github.com/Jermolene/TiddlyWiki5/issues/823]] 的讨论。 你可以在 https://github.com/Jermolene/jermolene.github.com 找到组成 tiddlywiki.com 的来源文件。
!! 可编程性改进
* 添加 <<.mlink list-links>> 宏 (已计划进一步改善)
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/6d9bd4df8a1133c2ba246333edad14e6028d3ea4]] 支持导入 `.markdown` 和 `.md` 文件
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/c4123ba3740f74f172468c4aa050451ebc5780d8]] <<.mlink timeline>> 宏,支持子筛选器
!! 修复错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/a9f46525a0b1ecf7ce6d1bdae64e6763a247106b]] 对于匹配维基链接,数字被归为小写字母的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/8cc236b4dca96327c7b28ad45e1eb4c2dce174e5]] 当依非名称字段排序佚失条目时崩溃
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/73a4747d05c6746476ccd9e8cb8255853f631d17]] 处理 `.jpeg` 扩展名的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/775482a2428d24a475e0c7df7bea215c190b5574]] RadioWidget 与佚失条目的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/2571f534aa67c7f9d423d44d36efa32480f4c370]] 拖动部分选定链接的问题
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@BramChen|https://github.com/BramChen]]
* [[@buggyj|https://github.com/buggyj]]
* [[@Eucaly|https://github.com/Eucaly]]
* [[@pmario|https://github.com/pmario]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.18-beta...v5.1.0]]//
这是 TiddlyWiki 的第一个完整版本。自 5.0.18-Beta 版本以来的大量文档更新。
!! 可编程性改进
* [[移除|https://github.com/Jermolene/TiddlyWiki5/commit/b239b3d6230a9f7aab4c9ef6a59aefb4158f45b1]] 核实识别码的大括弧
!! 修复错误
[[修正|https://github.com/Jermolene/TiddlyWiki5/commit/9e6dab06cc2db8263fce083510ae570923b21c0b]] Markdown Maruku 模式的 metadata 的问题
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@BramChen|https://github.com/BramChen]]
* [[@malgam|https://github.com/malgam]]
* [[@gernert|https://github.com/gernert]]
* [[@pmario|https://github.com/pmario]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.0...v5.1.1]]//
这是一个错误修复的小改版,更正一些 TiddlyWiki 的第一个完整版的问题的。
!! 不兼容的更动
在 [[Release 5.0.17-beta]] 中已被弃用的某些功能现在已被移除:
* [[移除|https://github.com/Jermolene/TiddlyWiki5/commit/62edd1e8a3fddc0c11b87c87b3e5b404d8e1e395]] 已弃用的 ButtonWidget 的 `title` 属性
* [[移除|https://github.com/Jermolene/TiddlyWiki5/commit/d047ccdc84ab6f23779c3614712e0d6fa0ef63ec]] 支持已弃用的 `$:/tags/stylesheet` 系统标签
请注意,下一个版本也将取消对正则表达式筛选操作元,这也是在 5.0.17-beta 时不推荐使用的。
!! 可编程性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/96b7d0eebaf73dcfd4eccb848b90caaa055e5e20]] 首次实作数学排版的 [[KaTeX 插件|KaTeX Plugin]]
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@pmario|https://github.com/pmario]]
* [[@TheDiveO|https://github.com/TheDiveO]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.9...v5.1.10]]//
! 主要改进
!! 性能优化
此版包括数个低级的性能优化技术,在许多常见的操作应该会提高速度和回应。
* [[缓存解析条目的结果|https://github.com/Jermolene/TiddlyWiki5/commit/b0cb17cd83dde89753ec159e27c920a7bf22bee1]]
* [[循环优化|https://github.com/Jermolene/TiddlyWiki5/commit/c6e48ebc2db4af895f5b3935b3f575b8aab292fe]]
* [[条目反复运算优化|https://github.com/Jermolene/TiddlyWiki5/commit/8f63e2a959a7ac44533ae2b6192716ee17a1ce93]]
* [[状态修饰的生成|https://github.com/Jermolene/TiddlyWiki5/commit/848a7f4e744c8f4dcb4ec88a0e99c4ae6aac25e5]]
* [[缓存数据条目|https://github.com/Jermolene/TiddlyWiki5/commit/32f6d7f1b01474b82debcbdd5d76c49c59303265]]
* [[删除昂贵的视觉效果|https://github.com/Jermolene/TiddlyWiki5/commit/4f5cf4597abb08af787b62c2e2ee1b8c667dad1e]]
在控制台中有一个可启用性能检测的新设置,更易于测量和改进性能问题。
!! 新的应用版
* [[简历生成器应用版|Résumé Builder Edition]],由 @inmysocks 制作的一个自订的版本,引导您使用 TiddlyWiki 创建一个好看的简历的过程。
* [[博客应用版|Blog Edition]]提供一些用于 Node.js 环境下的工具,使用 TiddlyWiki 创建一个可以发布在 GitHub 页上 (或类似) 静态的 HTML 博客。
* [[Text-Slicer 应用版|Text-Slicer Edition]] 是一个定制版的工具,协助高端用户将较长的文本裁切成一些个别条目。
!! 外部文本条目
对存放于外部的 `.tid` 文件的条目的有限的支持:
* 有外部文本条目的单独的 TiddlyWiki HTML 文件可于 Node.js 构建之。
* 有外部文本条目的维基可以运作于浏览器中,当其首次被引用时,会自动延迟加载文本条目的内容。
** 于浏览器中保存变更不如预期运作:若编辑之,外部文本条目会被替换为普通条目
** 延迟加载外部文本条目,无法运作于 Chrome 以 ''file:'' URI的方式查看 TiddlyWiki HTML 文件时;但可于 Firefox 中正常运作。
** 延迟加载运作于所有浏览器上的 HTTP URI,只要目标文件也存放在同一个网域或由[[服务器支持 CORS|https://en.wikipedia.org/wiki/Cross-origin_resource_sharing]]
请参阅[[爱丽丝梦游仙境|Alice in Wonderland]]示例。尝试不使用网络连接开启它。
!! 新的 "Tight" 布景主题
一个称为 "Tight" 的新主题,减少使用填充、边距和字体大小,以尽可能包裹更多的文本:
<$button>
<$action-setfield $tiddler="$:/theme" text="$:/themes/tiddlywiki/tight"/>
试试看
</$button> <$button>
<$action-setfield $tiddler="$:/theme" text="$:/themes/tiddlywiki/snowwhite"/>
还原
</$button>
! 其他改进
!! 翻译改进
* 添加由 @Superdos 提供的瑞典文翻译
* 添加由 @araname 提供的韩语(大韩民国)翻译
* 改进加泰罗尼亚语、华语、丹麦语、荷兰语、法语、德语、意大利语、俄语和西班牙文翻译
!! 可用性改进
* [[加强|https://github.com/Jermolene/TiddlyWiki5/commit/e6529af04e004b59093921f74758ac7132e1b19d]] 条目编辑器,在点击确认时,接受新字段和标签,而无需点击 "添加标签" 或 "添加字段"
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/5d43cd740863be188e43fd49893dc8dddcd5b937]] 条目工具列的''收合''和''收合其他''按钮,可暂时隐藏条目内容,以及 [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/ac08dc2e35d99eb563ab8c4449ce1fcfe30f3bf7]]''全部收合''和''全部展开''页面按钮
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/d5e690a06d523a2047eaf9b623b633bb72c18af9]] 停用个别 WikiText 解析规则的功能 (见[[控制台|$:/ControlPanel]]的''高端''页签)。还有[[添加|https://github.com/Jermolene/TiddlyWiki5/commit/58188cf8053bef87dbe97e4b05cdba67f75c615d]] 可停用驼峰式单词自动连接的一个简单的设置
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/2cb6400773096b02b71c1851fb0fac5dfefbbd6f]] 支持自动链接的系统条目名称可包含数字和底线
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/2c9b1ae2579f8d2452c60217aa3e153a29d32d1f]] 当试图使用为 TiddlyWiki 经典版设计的插件的警示消息
* 升级 [[Highlight Plugin]] 的 highlight.js 到 v8.8.0 版
* [[移除|https://github.com/Jermolene/TiddlyWiki5/pull/1981]] 必须手动确认删除警示消息
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/2147]] 可选的工具提示 [[tabs 宏|tabs Macro]]
!! 可编程性改进
* 更新 KaTeX 插件至 0.5.1 版,有[[一些新功能|https://github.com/Khan/KaTeX/releases]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/e0aacc84d5f084ff7a53153c590fbff3d24f2e2c]] `publishFilter` 至缺省的保存范本
* [[允许|https://github.com/Jermolene/TiddlyWiki5/commit/7dddc925ae93725552b98bc348a07572895da96c]] ''删除''按钮用于条目查看模式的工具列
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/742161675421a942051abed01cb47c0394f4db6d]] [[隐藏快捷键的设置|Hidden Setting: Keyboard Shortcuts]]
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/e5cd8313a0d1a4a3dea17457a8a883675243b9c7]] ActionSetFieldWidget 允许保留时间戳记
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/fdce67399d175a9911df908981b83ac3edfb1142]] 可停用编辑/取消 /保存的导航的选项
* [[加强|https://github.com/Jermolene/TiddlyWiki5/commit/5176f008f0bc15751e36933c95ae299c1ee5971a]] SaveTiddlersCommand 不删除选项
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/4ccdaf3fafda2f1d0766ed69c68d030a7db2bbc6]] RenderTiddlerCommand 范本选项
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/51d771a07493f91c32145b69e4f5534724416d2e]] tm-open-window 传递变量
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/7b8928886bf101b0cf4a8cc2d2dd2e576ec1c8d8]] 实用方法 `$tw.utils.tagToCssSelector(tagName)`,将标签名称转换成符合 `tc-tagged-*` 的[[由 TiddlyWiki 生成的 CSS 类别|How to apply custom styles by tag]]的适当格式
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/99df9f46f7cc4c1d3aa0320347f9b6c1bc458c60]] 条目含 mp4 影片的支持
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/fd997c45814e6bb5b576137bf62bad5575b0a28c]] ActionSetFieldWidget,使其可用于删除字段或索引属性
* [[使|https://github.com/Jermolene/TiddlyWiki5/commit/746aab2cf6bbe3c1905efd5caf80e40e23b914b0]] tw5.com 文档可当作插件和[[应用版|https://tiddlywiki.com/editions/tw5.com-docs/index.html]],简化一些重复使用它的方案。
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/0035a0046315ee0203b1adfb75efdbb0e854a7f6]] 在 "Snow White" 布景主题的侧栏 "更多" 页签呈现渐层色
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/33563d01baed4b4092fc834eb6a1df55e1671418]] [[控制台|$:/ControlPanel]]中的选项,可启用在浏览器的开发者主控台中显示详细的性能检测
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/bc0cbf907063ccd484da7d56c8e42cf5e90489b8]] 所有的非系统条目的[[延迟加载|LazyLoading]]范本
* [[改进|https://github.com/Jermolene/TiddlyWiki5/issues/1984]] 在 Markdown 条目里的 TiddlerLinks 处理
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/pull/2004]] FieldManglerWidget 创建建目标条目,若其不存在时
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/pull/2049]] KeyboardWidget 触发 ActionWidgets
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/pull/2074]] SelectWidget 支持多重选取
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/1909]] [[days Operator]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/231d0a3dc8385fcb2173436754f00f464d7b018e]] JavaScript 程序库的官方的插件包裹,[[async.js|https://github.com/caolan/async]] 和 [[JSZip|https://stuk.github.io/jszip/]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/2037]] ActionListopsWidget
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/791f97983e8bbbbb209cf0e7068f858dfd2d38eb]] ''rows'' 属性至 EditTextWidget
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/1882]] 在 5.1.9 引进用于处理 `tiddlywiki.info` 文件的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/3fbf29093b32c00941b0c03951250de7c0cc8d6f]] 于 $:/AdvancedSearch 条目未显示图标的问题
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/862e358b57fde74595420e7948bf44fdadf690dc]] 在 ServerCommandcheck 中检查所需插件
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/709126dd643207adab725569c214f8617c28fbeb]] 删除不存在条目的队列中变更事件的问题
* [[确保|https://github.com/Jermolene/TiddlyWiki5/commit/85553609b10ccc813662c867d4043e5df78efcec]] EditTextWidget 固定高度,即使不需要刷新
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/8a763e9d838fcb571d12c4175952cd4e15e95e00]] 在侧边栏的页签分隔的渐层色
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/6add992bf2e9cedd077c74c3471758bbe9d6e1b2]] 如 `$:/templates/something` 之类的条目名称被错误地归类为 `$:/temp` 条目,且被排除同步的问题
* [[切换|https://github.com/Jermolene/TiddlyWiki5/commit/acbf87657b6c88719148266100b91a61e29a0546]] 条目副标题中的日期为绝对日期格式
!! Node.js 改进
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/dc020276b07fd0ec365c13000eb868a87a3376b9]] 文件系统配接器的问题,将新的图档保存为 base64-编码的 `.tid` 文件,而非保存为二进位文件与伴随的 `.meta` 文件
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/803d70225a2ce1f1f7992e493bbaf7a78b15c04d]] `tiddlywiki.files` 支持于 TiddlyWikiFolders 允许递归加载目录以及个别文件
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@afeldspar|https://github.com/afeldspar]]
* [[@araname|https://github.com/araname]]
* [[@BramChen|https://github.com/BramChen]]
* [[@danielo515|https://github.com/danielo515]]
* [[@Drakor|https://github.com/Drakor]]
* [[@erwanm|https://github.com/erwanm]]
* [[@felixhayashi|https://github.com/felixhayashi]]
* [[@Evolena|https://github.com/Evolena]]
* [[@hegart-dmishiv|https://github.com/hegart-dmishiv]]
* [[@idoine|https://github.com/idoine]]
* [[@inmysocks|https://github.com/inmysocks]]
* [[@IreneKnapp|https://github.com/IreneKnapp]]
* [[@gernert|https://github.com/gernert]]
* [[@kixam|https://github.com/kixam]]
* [[@Marxsal|https://github.com/Marxsal]]
* [[@matabele|https://github.com/matabele]]
* [[@mklauber|https://github.com/mklauber]]
* [[@nameanyone|https://github.com/nameanyone]]
* [[@pmario|https://github.com/pmario]]
* [[@senevoldsen90|https://github.com/senevoldsen90]]
* [[@Spangenhelm|https://github.com/Spangenhelm]]
* [[@spelufo|https://github.com/spelufo]]
* [[@SuperDOS|https://github.com/SuperDOS]]
* [[@tgrosinger|https://github.com/tgrosinger]]
* [[@tobibeer|https://github.com/tobibeer]]
* [[@xcazin|https://github.com/xcazin]]
* [[@zahlman|https://github.com/zahlman]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.10...v5.1.11]]//
这是一个 [[5.1.10 版|Release 5.1.10]]的修正版本,用于修复影响官方插件程序库操作的严重问题。
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.11...v5.1.12]]//
! 主要改进
!! 新的编辑器工具列
[[添加|https://github.com/Jermolene/TiddlyWiki5/pull/2315]] 编辑器小工具支持可扩充的格式工具列。
* 支持 Markdown 的 WikiText 格式化操作:
** 粗体、斜体、底线、删除线、上标、下标和内联等宽的字符格式化操作
** 等宽区块、引言、标题、编号和符号清单的列格式化操作
** 从下拉清单中选择插入图片
** 缺省程序化的文本片段印记
** 剪切所选文本为一新的条目
** 可选的自动调整大小以符合内容
* 在控制台中的完整的键盘快捷键编辑器。快捷键也会显示在工具列按钮的提示
!! 改进位图编辑器
位图编辑器已增强为带有工具列支持︰
* 绘制可选的颜色、宽度和不透明度
* 清除图像
* 调整图像的大小
* 保留最近选择的颜色
!! 改进插件
此版本已更新几个插件库中可用的官方插件,[[升级|Upgrading]]将自动更新所有已安装的插件。
* KaTeX 插件更新到 [[0.60.0 版|https://github.com/Khan/KaTeX/releases/tag/v0.6.0]]
* CodeMirror 插件更新到 5.13.2 版,并集成新的编辑器工具列。更新缺省配置,包括 HTML、~JavaScript、CSS、XML、TiddlyWiki 经典以及 Markdown 语法的加强显示。
* Markdown 插件包括格式工具列按钮,以及在侧边栏中的工具页签的一个新的 "添加 Markdown 条目" 按钮。
* 实验性的 Evernote 插件允许笔记和图像从 `.enex` 文件导入到 TiddlyWiki。
* 新的 `tiddlywiki/internals` 插件提供帮助理解 TiddlyWiki 内部操作的功能,包括:
* 改进语言翻译 ︰
** 韩语
** 正体中文和简体中文
** 德语
** 法语
** 丹麦语
** 荷兰语
* 在编辑器中显示当前条目的解析及小工具树的新预览模式。
!! Text-Slicer 插件改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/176d2ccd76856b10aadd5e71af587574e7bcd447]] 支持文档内的便笺
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/c98ef97d236fb023c3b5099a5fc52c1e8da7eb4d]] 支持裁切文档到 Node.js
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/1335dff45013f83fb06a47453e6063b5c0e2c0b3]] 文档中继数据显示
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/46800d790a6521aafba24fc9cb9e0d0e8f1a48a2]] `list-children` 筛选器运算符
* 修正错误
! 其他改进
!! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/7908e10488cc4280dd8e4f405bcb09f2fb6d3524]] 一个禁用链接到佚失条目的设置
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/de3adf905aff80e547dc630890f0d18bd87da880]] 一个等宽代码区块中的强制换行的设置
* [[添加|https://github.com/Jermolene/TiddlyWiki5/issues/2351]] 在创建或编辑条目名称包含问题字符时的警示消息
* 增加 “添加图像” 按钮于侧边栏的 “工具” 页签
* 引进新的通用[[颜色选取器宏|colour-picker Macro]]
* 引进新的通用[[图像选取器宏|image-picker Macro]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/adf45b346847a81d4ed26397466daa4514035bb9]] 批次删除按钮至[[高端搜索|$:/AdvancedSearch]]的 "筛选" 页签
!! 可编程性改进
* [[引进|https://github.com/Jermolene/TiddlyWiki5/issues/2337]] 新的 WikifyWidget
* [[引进|https://github.com/Jermolene/TiddlyWiki5/commit/126f7d60f961021b1318bd195f7005b6b8f46097]] 新的 EditShortcutWidget,直接输入的键盘快捷键代码
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/7daebba46bad0e7ea3e4dfc1fc2e59e36414a683]] 编辑器预览窗格,以便允许插件进一步添加预览的类型 (见新的 `tiddlywiki/internals` 插件为例)
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/f8565443d7617f4d18b90ba7ce3f55b9764eccb2]] 一个使用 WebDav 或 REST 服务器的简单的 HTTP PUT 保存器
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/37823f64e96809df16884c605b062f8da2453635]] build 目标至服务器版
* [[改进|https://github.com/Jermolene/TiddlyWiki5/pull/2364]] [[days Operator]] 以更好地应对于昨天和今天的操作
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/3c20f2396e7c794b6e28c3e369e09230352402d0]] ActionWidgets 机制允许其与 LinkCatcherWidget 和 SelectWidget 一起使用
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/19e699d3302da842c4a6596f7b9ecc4dcaf8fbc2]] 适用 Android Chrome 的 `mobile-web-app-capable` meta 标记
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/3d5885f5a5ef8a395ba15285e68c19a8db115e6b]] 用于 ViewWidget 的 `plainwikified` 格式
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/54bf6c8a93f026ad1128dfc9cd745a67aaa6cda0]] [[目录宏|Table-of-Contents Macros]]中的条目名称包含单引号的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/037cfb7cc7c1b32153e23774697e8a9045d8f36a]] zoomin 查看模式的故事视图中的 modals 的 z-index 的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/2284]] [[has Operator]] 的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/4a03dcab2031a31eb60f99b6d15a70ff0449182c]] 在 EntityWidget 中的双字节 entities 的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/276074b6cfde9d916f9428b2185f795915e190ae]] ScrollableWidget 在静态渲染的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/1e0d019610acd960b8c70c0b85b7bb1a25096a8f]] 条目没有 `text` 字段的重复延迟加载的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/b326ba5b2c9e622f5fe99b00ab368bb484c1d4e5]] 条目名称包含 Url 被解释为外部链接的问题
!! Node.js 改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/2379]] [[自订用于条目保存的路径|Customising Tiddler File Naming]]的功能
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/bf74d13df544e323066cde9a019cbf1855d3db04]] 保存非 JPG 二进位文件的问题
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@araname|https://github.com/araname]]
* [[@BramChen|https://github.com/BramChen]]
* [[@brentmaxwell|https://github.com/brentmaxwell]]
* [[@Drakor|https://github.com/Drakor]]
* [[@edrex|https://github.com/edrex]]
* [[@Evolena|https://github.com/Evolena]]
* [[@felixhayashi|https://github.com/felixhayashi]]
* [[@FND|https://github.com/FND]]
* [[@Infurnoape|https://github.com/Infurnoape]]
* [[@kixam|https://github.com/kixam]]
* [[@Marxsal|https://github.com/Marxsal]]
* [[@maxthomax|https://github.com/maxthomax]]
* [[@mklauber|https://github.com/mklauber]]
* [[@nameanyone|https://github.com/nameanyone]]
* [[@nome|https://github.com/nome]]
* [[@PauDeLuca|https://github.com/PauDeLuca]]
* [[@pmario|https://github.com/pmario]]
* [[@rcrath|https://github.com/rcrath]]
* [[@r1chard5mith|https://github.com/r1chard5mith]]
* [[@sukima|https://github.com/sukima]]
* [[@telmiger|https://github.com/telmiger]]
* [[@twMat|https://github.com/twMat]]
* [[@webninjasi|https://github.com/webninjasi]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.12...v5.1.13]]//
这是一个小的错误修复版。
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/e49d310ea943916089b5381b00df20b1f9a9e52e]] (和 [[refixed|https://github.com/Jermolene/TiddlyWiki5/commit/782553eb62ccfea31ad249911c3230e2137a07dd]]) [[有问题|https://github.com/Jermolene/TiddlyWiki5/issues/2501]]的 5.1.12 版的外部链接的严格匹配规则
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/e282ff1d92d6d3abaf9fd50c9deff464ac028ad7]] 条目名称为 "undefined" 的[[问题|https://github.com/Jermolene/TiddlyWiki5/issues/2507]]
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/487d6642e34e5eb685ad83a11c8514dbc6fc4d89]] [[KaTeX 插件|KaTeX Plugin]]的呈现[[问题|https://github.com/Jermolene/TiddlyWiki5/issues/2500]]
* [[移除|https://github.com/Jermolene/TiddlyWiki5/commit/8f6178acfce1f4f49d1a7d234c25dcbf0256aa10]] 打印样式表中不需要的边框
!! Node.js 改进
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/2504]] 外加 `.tid` 扩展名至条目文件名称的问题e
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@sukima|https://github.com/sukima]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.13...v5.1.14]]//
!! 新的和改进的插件
* 添加 [[SaveTrail 插件|SaveTrail Plugin]],在背景持续下载已编辑的条目,提供了一些备份轨迹
* 添加 [[XLSX 工具应用版|XLSX Utilities Edition]] 用于导入 Excel 兼容试算表。详细信息请参阅 [[XLSX 工具应用版|XLSX Utilities Edition]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/22c1b04ee79a5ccc25cbc33cc91bf5daac1df831]] QR code 生成器插件
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/7f11c151f06cd039d1887a6940075237ccb4b7a9]] ~BibTeX 导入插件
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/c16f96626e2ff9d849563eeba7d8ef5cf8e4ed4b]] Google Analytics 插件到最新版本
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/e30330d4be0e0b9b04ea807a034c8d9fa3d13fea]] 可嵌入推文等等的 [[Twitter 插件|Twitter Plugin]]
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/c0f7f18f0a268087e51813bfbba1b796478d0bb1]] [[KaTeX 插件|KaTeX Plugin]] 为 [[KaTeX v0.7.1 版|https://github.com/Khan/KaTeX/releases]]
!! 拖放的改进支持
有几项[[拖放|Drag and Drop]]的改进:
* 能够重新排列侧栏的"开启"皮肤和标签下拉清单(且可将新条目拖动到列表中来开启)
* 能够重新排列标签下拉清单中的项目
* 拖动标签丸现在相当于将该标签的所有条目一起拖放
* 控制台的"视觉外观"/"工具列"页签中的项目可以经由拖放重新排序
* 拖动时显示的图像现在反映拖动的项目,而不是一般的拖动区块
!! 新的 "Heavier" 布景主题
一个名为 "Heavier" 的新主题,加粗 TiddlyWiki 缺省的轻量级字体。将 "Heavier" 布景主题与现有的 "Tight" 布景主题结合的变种 "Tight-Heavier":
<$button>
<$action-setfield $tiddler="$:/theme" text="$:/themes/tiddlywiki/heavier"/>
试用 "Heavier" 布景主题
</$button> <$button>
<$action-setfield $tiddler="$:/theme" text="$:/themes/tiddlywiki/tight-heavier"/>
试用 "Tight-Heavier" 布景主题
</$button> <$button>
<$action-setfield $tiddler="$:/theme" text="$:/themes/tiddlywiki/snowwhite"/>
还原
</$button>
!! 新的条目管理器
[[添加|https://github.com/Jermolene/TiddlyWiki5/commit/16bb65d17f5a20a0076320c6b1305b7b139d7375]] 新的[[条目管理器|$:/Manager]]支持以下任务:
* 审查并将标签套用到多个条目
* 调整自订颜色和图标到多个条目
将在未来扩充条目管理器,加强灵活性并增加批量操作的支持。
!! 性能改进
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/989cee50594a76a0f30d1d2124ce9e5e5808c6cf]] 搜索机制,要求最小长度的搜索字符串
!! 翻译改进
* [[改进|https://github.com/Jermolene/TiddlyWiki5/tree/master/languages]] 丹麦语、荷兰语、法语、德语、葡萄牙语和华语翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b96377099a7377e4c77582800cac78103a08b066]] 新的希伯来文翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/e20bce5450f40c8db891893fa0674c493bba7f11]] 初步支持从右向左 (RTL) 语言
!! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/3197f9a639761e1e56b2f5b18b5f7cf5c3d992da]] 一个全选/全不选的复选框至导入皮肤的顶端
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/2072]] "关闭插件程序库" 按钮
* [[增加|https://github.com/Jermolene/TiddlyWiki5/pull/2592]] 使用 <kbd>Enter</kbd> 键添加标签的支持
* [[改进|https://github.com/Jermolene/TiddlyWiki5/pull/2590]] <kbd>Ctrl</kbd>+<kbd>Enter</kbd> 的处理,以增加部分完成的标签和字段
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/e8bb897e263feea1a671ce035af68d0c6bc246b5]] 支持重新链接参考的已重命名的条目
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/0b76c327c217251e2eb8e318e3f2d4637192581a]] "打印页面" 页面控制按钮 {{$:/core/ui/Buttons/print}} (和[[添加|https://github.com/Jermolene/TiddlyWiki5/commit/c4e13bc94afb022e40aaa70b06464084188acfea]]关联的[[图标|$:/core/images/print-button]])
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/d1121787c090ec8f5fc592b83c3dbad1075fe0ec]] 暂停时间戳记 {{$:/core/ui/Buttons/timestamp}}的页面控制按钮
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/7a6d7e2a1567ce04330939b3926b21b88796b4c9]] 访问插件的信息︰
** 使用与控制台相同的格式,重构插件条目的显示,添加影子条目列表为可改写的扩充页签
** 在侧边栏中 "更多" 页签中,提供一个可快速访问所有已安装的插件的新页签
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/2616]] 当选择固定高度布局时的使用滚动条的预览窗格的高度
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/4eed18496fe2f4f67ad6a382b813b5c5371d3930]] 编辑器创建外部链接和佚失链接的 "链接" 按钮
* [[增加|https://github.com/Jermolene/TiddlyWiki5/commit/2d9aa12aa867d1b7c983e21de2ed60abf6f5a1bc]] [[高端搜索|$:/AdvancedSearch]]的 "筛选" 页签里的图标大小
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/2381]] 故事河里出现条目的多个副本的问题
* [[改进|https://github.com/Jermolene/TiddlyWiki5/pull/2585]] 新字段名称的搜索建议的下拉清单功能
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/c02c3a06e09baaa7746a26dffebb97ef8ec1ff6e]] 条目编辑器内容类型的下拉清单中的分组排序
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b3273bcbda6bcb9f3a0670b79ea598c3674c5012]] 条目信息皮肤 "sticky" 模式。详见[[控制台|$:/ControlPanel]]里的 "设置" 页签
* [[增加|https://github.com/Jermolene/TiddlyWiki5/commit/5bf238fc8698a6b750dd0f577ab745a4db714a17]] 标签丸文本的边框线宽
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/ee66d1a1afb939c0cba8c2257b8300921831c716]] 发布标示版本的文档标记的新功能
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b1a5afbf158fab9e224978c81a10aca15d30d91a]] 一个项目到高端搜索筛选器中,用于导出当前的故事(不含高端搜索)的下拉清单
!! 新的和改进的筛选器运算符
* [[添加|https://github.com/Jermolene/TiddlyWiki5/issues/2767]] [[enlist Operator]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b4b77d1681023d4ccc0e157df1ce67d0d388cd5a]] 数个新的字符串编码/解码的筛选器运算符︰
** [[decodehtml 运算符|decodehtml Operator]]
** [[decodeuri 运算符|decodeuri Operator]]
** [[decodeuricomponent 运算符|decodeuricomponent Operator]]
** [[encodehtml 运算符|encodehtml Operator]]
** [[encodeuri 运算符|encodeuri Operator]]
** [[encodeuricomponent 运算符|encodeuricomponent Operator]]
** [[escaperegexp 运算符|escaperegexp Operator]]
** [[stringify 运算符|stringify Operator]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/ffcbcbfa82cb8f1044c57967117aeae0978579f0]] [[minlength 运算符|minlength Operator]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/9a386421414aacd23e21bc9cb1a116b905fb39ff]] [[order 运算符|order Operator]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/c65d08240b1f69078c8b3129cb9b00df56ada1d3]] 严格模式到[[标签运算符|tag Operator]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/a3dc3b4b98f424d12019550df52639224100316f]] ''tags'' 选项至 [[all 运算符|all Operator]]
* [[更改|https://github.com/Jermolene/TiddlyWiki5/commit/c460cc03a49be2c41157814f5a1fc25c4bc3fe41]] [[is 运算符|is Operator]] 直接传递参数,如果操作数为空
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/2066]] [[has Operator]] 的 "field" 尾码
* [[改进|https://github.com/Jermolene/TiddlyWiki5/pull/2193]] [[wikiparserrules Operator]] 以传返回所有可用的解析规则
!! 可编程性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/d9f301f7556ce899840dab0ebc31c040d9c7a72b]] "formattedtext" 输出类型的支持至 WikifyWidget
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/a20da9f5303fdd52a54d61b231450c2aa35d3804]] 点对点的 Beaker 浏览器的保存进程; 详见 [[TiddlyWiki on Beaker Browser]]
* [[重构|https://github.com/Jermolene/TiddlyWiki5/commit/f07e0f981a1cded691227146e0281f7c4f06d55c]] 标签范本和宏,使其更可重用
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/87fa7f972cae859c466dea8a531d50f060e7d910]] 模式和通知,以便全局宏可用
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/b35544bf4946596e60f7b0c7f0a55fa490ac2a24]] SetWidget 允许从筛选的结果清单中选择单一结果
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/2f590a365e5b6bfecc1170fdbeaaf398795a2feb]] `$:/info/url/*` [[信息条目|InfoMechanism]] 提供文档位置信息
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/3bceb98119c6f1fbbed76c977c601a930b0bcac9]] ''actions'' 属性的支持至 CheckboxWidget
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/pull/2104]] CheckboxWidget 支持数据条目,通过 `index` 属性
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b1a5afbf158fab9e224978c81a10aca15d30d91a]] 项目到高端搜索筛选的导出菜单,用于导出当前故事河
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/1b339e17bc0c67ff7eb3e8f7f299588ecf8848ee]] `tag` 属性于 KeyboardWidget
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/2614]] 覆写保护至 ~WebDAV 保存模块
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/202ffd9c51d71b469eff968ae63b56a985a3c6bf]] [[引言维基语法|Block Quotes in WikiText]]的"大型区块引言"样式
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/c25a44756b1a4a08a29fbe02a908ef57a6a193bf]] 可定制的新日志条目范本内文,可访问控制台
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/779e62a30fc5e61cee893eabc0f268e7fb959639]] 支持 `.json` 条目文件包含一个单一条目对象,而非一个条目数组
!! Node.js 改进
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commits/master/plugins/tiddlywiki/filesystem/filesystemadaptor.js]] 由文件系统配接器创建新条目文件的多个问题
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/0d0ece63777a22422ab2ddae7dee996b28f62c5e]] FetchCommand 透过 http/https 取得条目
* [[加强|https://github.com/Jermolene/TiddlyWiki5/commit/6f93ce6ea790427fe1e6e11a062d64f14449bfa3]] RenderTiddlerCommand 增加对于一个额外变量的支持
!! 修正错误
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/b1ecf81b0c0727db2245cfeba78cc46a33c3a814]] [[Highlight 插件|Highlight Plugin]] 的 Node.js 支持
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/2650]] [[Table-of-Contents Macros]] 的递归错误的问题
* [[防止|https://github.com/Jermolene/TiddlyWiki5/commit/f97c1226aac9f3a5b563fc8d95bfeff91b8ab810]] 电子邮件地址被误识别为 HTML 标记
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/2572]] `$tw.utils.strEndsWith()` 的问题
* [[部分修正|https://github.com/Jermolene/TiddlyWiki5/issues/2599]] 刷新周期的动作小工具被单独调用的问题
* [[修订|https://github.com/Jermolene/TiddlyWiki5/issues/2522]] `syncAdaptor.isReady()` 方法的处理,以提高与旧配接器的兼容性
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/2517]] `String.prototype.replace()` 的不安全使用的问题,,损坏包含货币符号的字段
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/8b60dbb81d3495aa8be1f160e4f31bcae995f400]] 不显示通过透明背景图像的页面背景颜色的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/2514]] 未加载精简条目的同步问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/06b7de415cd2cef3848f2ef2516200ee79afd130]] 在登录对话对话框中提交表单的 "取消" 按钮的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/2579]] 当删除一个字段时,created/creator 字段的错字影响
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/2595]] 未被识别的包含国际字符的系统链接的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/2076]] 单行宏定义行尾无分行符号的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/cf28eeb2a120fe3f263235c35fe5603013f88049]] 用空字符串和 CheckboxWidget 的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/b759d82f4ce2bf44da0bcce0c08550870f3216f8]] 周数计算的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/2312]] [[move Operator]] 不正确环绕的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/f0ff1f993e94d6928f0aa249b7f6f5e5624ebb69]] 防止自订 textarea 背景颜色的问题
!! 开发者错误修复和改进
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/25b2e846cea0f560b259296263a98e3287e5f311]] Stanford JavaScript 程序库至版本 v1.0.6
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/c16f96626e2ff9d849563eeba7d8ef5cf8e4ed4b]] Google Analytics 插件到最新版本的 Google 代码
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/3c715c5e0d1117ca32760d4da6578cd27af06172]] Common/JS 兼容性,通过增加支持隐含添加 `/index.js` 至要求目标
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/1b41b4468495bbe66f99345ee94a67346176deb7]] 支持通过 TiddlyWikiFolders 中的 [[tiddlywiki.files Files]] 批次加载条目文件
* [[重构|https://github.com/Jermolene/TiddlyWiki5/pull/2627]] 服务器机制,使其易于集成 TiddlyWiki 至 [[ExpressJS | HTTP://expressjs.com/]] 应用程序
* [[重构|https://github.com/Jermolene/TiddlyWiki5/pull/2626]] TiddlyFox 保存模块,使其更易于与其他保存机制并用
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/2397f0aa6f7af305807b61ccb1d435c2e6a789ab]] (和 [[此处|https://github.com/Jermolene/TiddlyWiki5/commit/daf703b67fae0dd029eeaa4317b721fa8c284648]]) 几个新的 UI hooks,和[[改进|https://github.com/Jermolene/TiddlyWiki5/commit/6b2ab9072111cb87508f83a385b0885fb196cbcf]] hook 机制; 详见 <a href="https://tiddlywiki.com/dev/index.html#:[search:title[hook]]" target="_blank">开发者文档</a>
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@beniquezsd|https://github.com/beniquezsd]]
* [[@BramChen|https://github.com/BramChen]]
* [[@crypdick|https://github.com/crypdick]]
* [[@danielo515|https://github.com/danielo515]]
* [[@dedioste|https://github.com/dedioste]]
* [[@DoronTzur|https://github.com/DoronTzur]]
* [[@duarteframos|https://github.com/duarteframos]]
* [[@FND|https://github.com/FND]]
* [[@gernert|https://github.com/gernert]]
* [[@hchaase|https://github.com/hchaase]]
* [[@ibnishak|https://github.com/ibnishak]]
* [[@jest|https://github.com/jest]]
* [[@jrgetsin|https://github.com/jrgetsin]]
* [[@nameanyone|https://github.com/nameanyone]]
* [[@Marxsal|https://github.com/Marxsal]]
* [[@mklauber|https://github.com/mklauber]]
* [[@nmota|https://github.com/nmota]]
* [[@pmario|https://github.com/pmario]]
* [[@roma0104|https://github.com/roma0104]]
* [[@Serj-Aleks|https://github.com/Serj-Aleks]]
* [[@stevesunypoly|https://github.com/stevesunypoly]]
* [[@sukima|https://github.com/sukima]]
* [[@sycom|https://github.com/sycom]]
* [[@tejjyid|https://github.com/tejjyid]]
* [[@telmiger|https://github.com/telmiger]]
* [[@tobibeer|https://github.com/tobibeer]]
* [[@twMat|https://github.com/twMat]]
* [[@xcazin|https://github.com/xcazin]]
* [[@zakrec|https://github.com/zakrec]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.14...v5.1.15]]//
!! 新的和改进的插件
* 新的 [[Amazon Web Services Plugin]],用于在云端运行 TiddlyWiki 简单的初始版本
* 新的 [[External Attachments Plugin]] 允许 TiddlyDesktop 的[[外部图像|ExternalImages]]自动创建
!! 翻译改进
新的和改进翻译:
* 添加波斯语翻译
* 更新华语和希腊语翻译
另一个有利于翻译用户的改进,是添加了大约 800 个新的//成对音译//。这些是在将条目名称转换为文件名时运行的替换,例如,用于单一字符 "œ" 的两个字符 "oe"。详细信息,请参阅[[提交|https://github.com/Jermolene/TiddlyWiki5/commit/5cdf86b3072604f8c556c84f266767be5b8e75c3]]。其结果是自动生成的文件名称更易于阅读。
!! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/1e9d214f67906e63758f8665091bc0ef6651f10d]] "探索" 页签至侧边拦的 "更多" 页签和底层的 [[tree 宏|tree Macro]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/cee7baa1831a8f236c46d8c438c2a4d9bda8a0e2]] 于[[主题调整|$:/themes/tiddlywiki/vanilla/themetweaks]]的编辑器字体的配置选项
!! 可编程性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/aa417fe899d0983ad8a3fe1fdfe9cac42364b2b6]] [[lookup 运算符|lookup Operator]],以简化查表的使用
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/5dd3d97760083f7c6ba9a6cd6186525edb3fb836]] SetWidget 添加 ''tiddler''、''field'' 和 ''index'' 属性
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/d966583854d7c7f4a7df25c0e2a8d6b9e217a12c]] 新的 ''whitespace'' [[编译指示|Pragma]],允许在维基文本中选择性地忽略空格
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/ef9efbc3995248d72148423bee10a1374c842926]] 用于 [[Beaker 浏览器|Beaker Browser]] 保存的支持
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/4db950cc450ef1ea87ce8f480fe882f2b108cdb4]] [[日期格式|DateFormat]],以支持毫秒和 UTC 日期
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/dc295b2536cdf411893e15b6dc0d62107f50a08d]] LinkCatcherWidget 以使动作字符串中的目标条目可用
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/596dfa1d5058e030a318e4a0f23d078500c3d154]] (与 [[此|https://github.com/Jermolene/TiddlyWiki5/commit/a4d919f45caae393f99018e0d797980b3667867f]]) DropzoneWidget 和 BrowseWidget 以允许手动指定解串器
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/523280362b529ee73229001a1bcd79272f483908]] `tc-btn-*` CSS 类别到工具栏按钮,允许更易于自定义样式
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/8293a77c6e6870960956dcf1501c687d2f88ea3c]] ''mode'' 属性到 ViewWidget,允许控制维基化输出格式的解析模式
!! Node.js 改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/35a7a66b019f2ea0532ba65cd5475f5cfe46a860]] SaveCommand 和 RenderCommand,旨在更灵活的替代 RenderTiddlerCommand、RenderTiddlersCommand、SaveTiddlerCommand 与 SaveTiddlersCommand
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/51b1ead5c9aa5a754e7fdc0bfbf241dd98db5f7c]] (和 [[这个|https://github.com/Jermolene/TiddlyWiki5/commit/1b7d9d65f42e77fdceb11b0b0b9ab9a63f6762e9]]) 更多颜色到命令行的输出
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/c179dc93cbd8947f92a8007d28c497b70efc4204]] FetchCommand 的新的 "raw" 选项
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/e951047461c3c2c273484a759ce5fc2c388fb684]] ImportCommand
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/2821]] "新增日志" 按钮清除 <<.field text>> 字段的问题
* [[删除|https://github.com/Jermolene/TiddlyWiki5/commit/c069d48a2a690b333c0733328f3574ae8a76e435]] PUT 保存模块里,多余的文件名 URI 编码
* [[复原|https://github.com/Jermolene/TiddlyWiki5/pull/2940]] 图像选择器宏使用子筛选器的能力
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/ccac0258af9b6d8c93d41b1f170e20dbf2efe3f3]] 下载保存进程,文件名包含空格、重音或其他需要 URL 编码的字符的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/2850]] 导入 JSON 条目的名称中带有前导或尾端空格的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/683285d44943db2d993bd574ed2d2f8a07dfc816]] 插件显示,即使没有提供其他页签,也会显示 "内容" 页签
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/2842]] 筛选器运算符 `allbefore:include` 的问题
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/e471bd54d42226d3b6d070b8561f8883f44df68a]] Stanford JavaScript Library 至 1.0.7 版
!! 开发者错误修复和改进
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/0bc325025a61c265dafe7ce8750ea8deed2be51b]] `$tw.boot.boot()` ,添加回调参数
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/d89010752a8b169a4917bde9a9028ddd871e743d]] 导航处理,传递原始事件数据
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/518f57f4bbc747c3675260eb3ffde1dc7468c805]] `th-importing-files` hook
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@0mp|https://github.com/0mp]]
* [[@Arlen22|https://github.com/Arlen22]]
* [[@BramChen|https://github.com/BramChen]]
* [[@cjhunt|https://github.com/cjhunt]]
* [[@danielo515|https://github.com/danielo515]]
* [[@hoelzro|https://github.com/hoelzro]]
* [[@Marxsal|https://github.com/Marxsal]]
* [[@maxthomax|https://github.com/maxthomax]]
* [[@morosanuae|https://github.com/morosanuae]]
* [[@pmario|https://github.com/pmario]]
* [[@rubaboo|https://github.com/rubaboo]]
* [[@saqimtiaz|https://github.com/saqimtiaz]]
* [[@telmiger|https://github.com/telmiger]]
* [[@twMat|https://github.com/twMat]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.15...v5.1.16]]//
!! 改进 ~CodeMirror 插件
~CodeMirror 插件经历大幅改写,并且有许多新的改进:
* 更新至 ~CodeMirror v5.37.0 版
* 现在模块化为:
** 基本插件:基本轻量级配置, 大约 240KB
** 附加插件
*** Search and Replace
*** Auto-completion
*** Fullscreen editing
*** Auto-close brackets
*** Auto-close tags
*** ~SublimeText keymap
*** Emacs keymap
*** Vim keymap
*** Highlighting modes:Javascript、Xml、Html (htmlmixed)、Html (htmlembedded)、Css、Markdown、X-Tiddlywiki
* 自动设定 (不再需要配置条目)
*** ~CodeMirror (engine.js) 使用已安装的 ~CodeMirror 插件里的信息组建配置
* 新建控制台配置页签:
** 行号
** 布景主题:
*** 编辑器字型 (与本机 TiddlyWiki 相同)
*** 光标设置
*** 换行
** 当前行列高亮显示
*** 自动完成启用/禁用(如果已安装)
** Keymap
!! 其他新的和改进的插件
* 新的 [[Dynaview 插件|Dynaview Plugin]] 可以构建动态响应滚动或缩放更改的用户接口
* 改进 [[Text-Slicer 插件|Text-Slicer Plugin]],可定制的 JSON 规则
* 更新 [[KaTeX 插件|KaTeX Plugin]] 至最新的 v0.9.0
!! 翻译改进
新的和改进翻译:
* 改进荷兰文翻译
* 新的斯洛文尼亚文翻译
* 新的葡萄牙文 (巴西) 翻译
* 改进法语翻译
* 改进德文翻译
* 改进正体和简体中文翻译
** 将最小查找长度重置为一个字符
!! 隐私改进
由[[一般数据保护条例(GDPR)|https://en.wikipedia.org/wiki/General_Data_Protection_Regulation]]驱使,我们已[[从 tiddlywiki.com 删除所有第三方 cookies|https://github.com/Jermolene/TiddlyWiki5/pull/3106]]。
!! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/9e03264ebe141a5dc4d37dcb62f3bbf2f740d983]] 对导入清单的可选预览类型
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3112]] 新的 DiffTextWidget,将其集成到导入列表中,且作为预览窗格
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3155]] 用于将所选内容包裹于双方括弧和大括弧的新编辑器工具栏按钮
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3134]] 新的 [[sortan 运算符|sortan Operator]] 用于对文数字的值进行排序,例如:"Apple 6", "Apple 7", "Apple 8", "Apple 9", "Apple 10", "Apple 20", "Apple 30", "Apple 100"
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/da0ffce2d66f16ad14587fbe58b8d7a5c8d36657]] 依据 [[GitHub|http://markdotto.com/2018/02/07/github-system-fonts/]] 建议的可读性的默认字型
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3131]] 一个用于 [[KaTeX 插件|KaTeX Plugin]] 的文本片段的编辑器工具栏按钮
* [[简化|https://github.com/Jermolene/TiddlyWiki5/commit/1c8170463c80a18c0753783aa0b32a0ff2f9028c]] 页面滚动行为:导航到条目,现在将条目的顶端滚动到检视画面的顶端
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/d2ff164c07788818ded9826c9e3811599272e69c]] [[WidgetMessage: tm-copy-to-clipboard]] [[还有|https://github.com/Jermolene/TiddlyWiki5/commit/1b6a06a4d79ad5c58593a7844e306c25848979ea]] [[copy-to-clipboard 宏|copy-to-clipboard Macro]] 用于将文本直接复制到剪贴板
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3040]] 字段下拉式清单的提示
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3135]] 一个 "更多" 边栏中默认页签的控制台设置
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3149]] 一个 "新条目名称" 的控制台设置
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/c0569849d22f99623423d349c0d96ecae11ffbe8]] "向左旋转" 按钮到位图编辑器工具栏
* [[改进|https://github.com/Jermolene/TiddlyWiki5/pull/3180]] 显示某些编辑器工具列按钮的条件
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3190]] 在显示下拉清单之前,支援新标签栏位的最小长度
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/02529a51d0be47477e62cd52dd5e4989a4993663]] 调色板、语言和主题切换的一致性和再使用性
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/ea763d0eaba7edf928ae247563deb95278504e9f]] 在 [[tabs 巨集|tabs 宏]]保留页签内容的支持
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/2703]] 支持通过 <kbd>Enter</kbd> 键来添加链接
!! 可编程性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/033feda02d7f5cdf27a9393b8229f22219cdab88]] 比较运算符的支持至 RevealWidget
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/1c6942402ee7b6d938f01bad23130ebe75b109f2]] 支持 StartupActions 在启动时运行操作小工具
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/f4fd5e76f8da8555bb9056725f11e0c0c91649f7]] ServerCommand 允许将端口号指定为环境变数
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/28e713caac1582e30b9ab8f7364ac8a564f4ffd7]] 萤幕宽度/高度于[[启动时显露的平台资讯|InfoMechanism]]
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/pull/3167]] DroppableWidget 在变量中传递功能键
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/pull/3203]] DraggableWidget 的用于拖动开始和拖动结束的操作
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/7cb54f32c6ee2d98f3f13ddda39f92281d419afd]] 一个[[可拖动的工作管理范例|TaskManagementExample (Draggable)]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/460a07ca03a501009530a57352d6bec0e3cf49cd]] 'Stylesheets' 页签至控制台
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b4c7c59d5d1bc5282fcfed58abbf087b9f65b86c]] 'emptyMessage' 参数至 [[list-links 宏|list-links Macro]] 与 [[list-tagged-draggable 宏|list-tagged-draggable Macro]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/de4eb5ca89132db136c8f5fb3103f289f25fe98a]] `th-page-refreshed` hook
* [[增进|https://github.com/Jermolene/TiddlyWiki5/pull/3063]] 通过将参数当作变量进行宏评估 - 参阅[[维基文本中的宏定义|Macro Definitions in WikiText]]里的 "参数当作变量"
* [[增进|https://github.com/Jermolene/TiddlyWiki5/pull/3052]] LinkWidget 允许更好地定制 CSS 类
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3124]] [[each 运算符|each Operator]]" 的 value" 尾码
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/0d354fe57f7424c1751a5c0cf5fbf1203803f3c8]] 新的 ''subtiddler'' 属性到 SetWidget
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/47cdf5513391742c3410bb80b36107ab17b0476d]] 新的 [[subtiddlerfields 运算符|subtiddlerfields Operator]] 用于从插件中的条目提取栏位
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3182]] 能够触发取消选定 CheckboxWidget 的操作
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/2182]] 已选的 class 至 RadioWidget 的支持
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/pull/2982]] [[is 运算符|is Operator]],允许指定多种类型
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3209]] 数据属性至 ViewTemplate (请参阅 [[自订数据样式|Custom data-styles]])
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/2988]] 新的 RangeWidget
!! 修正错误
* [[删除|https://github.com/Jermolene/TiddlyWiki5/pull/3043]] 于 list-links-draggable 宏结尾的多余列表项目
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/7e71fcfab80bed9aed4389eea386fb2036cc4a85]] 垂直页签的内容区域有时超出其右边界的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3079]] 添加日志的范本中的双引号问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3070]] 在 textarea 里拖动的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3099]] 当使用 "index" 属性时,SelectWidget 的 "default" 属性的用法
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3093]] 在某些浏览器上拖动 TiddlyWiki 时,发生崩溃的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3079]] "添加日志" 按钮的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3164]] SetWidget 的 ''filter'' 和 ''value'' 属性的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3190]] [[The Extended Listops Filters]] 中数值操作数的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/df1f7e9798b5f6c3d2c3fd82e438cbc9713ade04]] "put" 保存器和 412 返回码的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3048]] 编辑范本里的栏位值中变量引用的问题
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/pull/3219]] <<.field list-after>> 字段的行为,如果 <<.field list-after>> 字段存在但其值为空,则条目置于清单的末尾
!! 开发者错误修复和改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/1dc764764055243acd07d0c4f480e6e912be6870]] ''plugin-priority'' 字段到核心插件
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3113]] 插件排序的问题
* 有几个优化条目的存放:
** [[避免缓慢的 Object.keys 调用|https://github.com/Jermolene/TiddlyWiki5/commit/254e1ca7f7a5fe9d2deef72692ada2b7637f34ce]] - 在一些操作上节省 50%
** [[优化标签筛选器|https://github.com/Jermolene/TiddlyWiki5/commit/e4b10d42f9480c0505862a93f0b97d1c4270ed65]] - 在一些标签操作上节省 50%
** [[条目删除的小改进|https://github.com/Jermolene/TiddlyWiki5/commit/358d4165260311446f2b433591762dd667250975]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/2990]] 支援自订引导路径
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3206]] 新的导航挂钩:`th-cancelling-tiddler`、`th-new-tiddler` 和 `th-renaming-tiddler`
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3024]] HTTP 服务器启动时的新挂钩 `th-server-command-post-start`
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@alexhough|https://github.com/alexhough]]
* [[@anavarre|https://github.com/anavarre]]
* [[@BramChen|https://github.com/BramChen]]
* [[@BurningTreeC|https://github.com/BurningTreeC]]
* [[@diego898|https://github.com/diego898]]
* [[@furicle|https://github.com/furicle]]
* [[@gernert|https://github.com/gernert]]
* [[@ibnishak|https://github.com/ibnishak]]
* [[@inmysocks|https://github.com/inmysocks]]
* [[@Marxsal|https://github.com/Marxsal]]
* [[@metebalci|https://github.com/metebalci]]
* [[@mklauber|https://github.com/mklauber]]
* [[@pmario|https://github.com/pmario]]
* [[@Skeeve|https://github.com/Skeeve]]
* [[@TheDiveO|https://github.com/TheDiveO]]
* [[@tobibeer|https://github.com/tobibeer]]
* [[@twMat|https://github.com/twMat]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.16...v5.1.17]]//
!! 复原
遇到重大问题后,我们勉强决定[[删除支持|https://github.com/Jermolene/TiddlyWiki5/commit/737e9ae4cb136ca3f473624f64142bd83e532b9b]]在 v5.1.16 中添加的 [[is 运算符|is Operator]]的多个子运算符。
!! 可用性改进
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/7468ad7acf1ca2280ad89ee014484928e160f54b]] TiddlyWiki 的 "尴尬的红色屏幕" 的外观
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/e6466b2c320cdab46a74aa343b6c56c5783e3f94]] 添加日志名称中外来空白的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/b95aa6ec6ad51672e9ed26ab94d7fe799698782c]] 重复使用"添加日志"的内文集的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/f9be417204695d26d5f458fbc53870b2adb9a372]] (和 [[这里|https://github.com/Jermolene/TiddlyWiki5/commit/46e8e4343acba876b9540b9fc77a5c85faa10939]]) Etag 处理的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3240]] 5.1.16 添加的 [[is 运算符|is Operator]]的问题
* [[复原|https://github.com/Jermolene/TiddlyWiki5/commit/b2173d11ea550ba4a5f2fd89b1388b392e37dd51]] 为隐藏预览窗格的默认值
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/3245]] 不正确的插件库位置
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3226]] 动画定时的问题,使用 reveal 小工具,有时导致侧栏不显示
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3244]] 使用 non-Dat URI 格式保存的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/4c89bbabbe5f5665e92258b560ed7380ae06d9e8]] 于注销时,`$:/status/UserName` 的删除
!! Node.js Improvements
* [[停止|https://github.com/Jermolene/TiddlyWiki5/pull/2893]] 于注销时清除 [[$:/status/UserName]]
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/ab5e5795e88892b5687885c8ead8d6959082399b]] 尝试使用不符合同步条件的延迟加载条目的问题
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/2c7f467514cb75aefa87912620575deabde1a530]] 支持 `/*\` 样式中继数据注释在 `*.CSS` 文件的起始位置
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@BramChen|https://github.com/BramChen]]
* [[@BurningTreeC|https://github.com/BurningTreeC]]
* [[@danielo515|https://github.com/danielo515]]
* [[@icarito|https://github.com/icarito]]
* [[@ldorigo|https://github.com/ldorigo]]
* [[@mklauber|https://github.com/mklauber]]
* [[@sukima|https://github.com/sukima]]
* [[@tobibeer|https://github.com/tobibeer]]
* [[@twMat|https://github.com/twMat]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.17...v5.1.18]]//
!! 主要改进
!!! 全域快捷键
此版本引入了新的基础架构来处理全域快捷键。核心附带以下快捷键:
* <kbd>Alt</kbd>+<kbd>I</kbd>(Mac 为 <kbd>Ctrl</kbd>+<kbd>I</kbd>)- 新图像
* <kbd>Alt</kbd>+<kbd>J</kbd>(Mac 为 <kbd>Ctrl</kbd>+<kbd>J</kbd>)- 新日志
* <kbd>Alt</kbd>+<kbd>N</kbd>(Mac 为 <kbd>Ctrl</kbd>+<kbd>N</kbd>)- 新条目
请参阅[[如何创建快捷键|How to create keyboard shortcuts]]
!!! Node.js HTTP 服务器
HTTP 网页服务器功能已有显著改进:
* 增加为匿名用户提供唯读维基的功能(隐藏编辑 UI),但允许登录的用户编辑
* 增加对经由 HTTP 提供静态文件附件的支持
* 通过包含用户/密码的 CSV 文件的基本验证,增加了多个用户凭证的支持
* 当用户只具有对维基的唯读访问权限时,隐藏 UI 功能,如添加条目按钮和编辑按钮
* 增加对通过 HTTPS 提供服务的支持,如同 HTTP
* 通过受信任的功能变量,增加对身份验证的支持,使其更易于与企业单一登录(和 Windows 身份验证)集成
* 增加对更细细微性授权的支持(即授予/拒绝单个用户对资源的读/写权限)
* 更好的调试信息
* 针对每页视图的新的纯 HTML 的单个条目的实验性支持
* 增加 [[CSRF 保护|WebServer Parameter: csrf-disable]]的简单级别
* 弃用现有的 `-—server` 命令,以支持新的 `—-listen` 命令,使用新的 NamedCommandParameters 支持具名参数,可按任意顺序被指定
* 重构路由为单独的模块,使其更易于扩充服务器的新功能
详细信息请参阅[[网页服务器|WebServer]],或[[查看 GitHub 上的更改|https://github.com/Jermolene/TiddlyWiki5/pull/2679]]。
!!! 条目名称中的特殊字符
在 TiddlyWiki 先前的版本中,条目名称中有一些特殊的字符串行会破坏某些功能。例如,以双引号结尾的条目名称,会导致[[目录宏|Table-of-Contents Macros]]不正确地呈现。
从 5.1.18 开始,许多这些问题已经通过重构功能来修复,以使用维基文本的最新功能:
* [[Table-of-Contents Macros]]
* [[tree Macro]]
* [[tag Macro]]
* [[list-tagged-draggable Macro]]
* $:/TagManager
请注意,使用条目名称中的某些字符,仍然会阻止某些功能正确使用。例如,在双大括号的嵌入语法中,使用两个垂直条形字符来将条目名称与模板名称分开:`{{title||template}}`。然而,尽管使用该语法嵌入一个名为 `title||template` 的条目是不可能的,但仍然可以使用 `<$transclude tiddler="title||template"/>` 来转换。
!! 插件改进
* ''KaTeX 插件'' -- [[KaTeX 插件]]已[[更新到 KaTeX v0.10.0|https://github.com/Jermolene/TiddlyWiki5/pull/3600]]。此插件[[现在合并|https://github.com/Jermolene/TiddlyWiki5/pull/3601]]一个[[化学公式的扩充|https://github.com/mhchem/MathJax-mhchem]]。
* ''评论插件'' -- 此版本[[添加|https://github.com/Jermolene/TiddlyWiki5/commit/acaa07a964a004759ddb8fb755484918b3322815]] 一个评论插件 -- 见 $:/plugins/tiddlywiki/comments
* ''AWS 插件'' -- 支持将 TiddlyWiki 运行为 Lambda 函数的[[改进|https://github.com/Jermolene/TiddlyWiki5/commit/d6a0b06f024e14e9c0a57df5d2b80c8a1cdbd1c2]],支持 JSON 有效负载的 GZip 压缩。
!! 翻译改进
新的和改进翻译:
* 加泰隆文
* 简体中文和繁体中文
* 荷兰文
* 法文
* 德文
!! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/cfb2d7c9c8d899729b67864070d1958b35cc0ca2]] 支持在下载 TiddlyWiki 时,显示启动画面 -- 见[[创建启动画面|Creating a splash screen]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/88664f028611162730b898025a45d29568eb205a]] 重命名条目时,显示反向链接
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/3bfa9c6f100cfd7107f2c5bf4cfc5dd40a93d54d]] 窗口底部显示任何隐藏草稿的持久性指示
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/7dbe117bc55a9cda91ce7b480525a2b2a70b8229]] 当前用户名 (如果设置) 至草稿条目的名称,使其更易于在多用户方案中识别
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/6b14969cf60bdcad16ac5978030bf1d929a712c6]] 查看模式下二进位条目的一个警告
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/issues/3255]] 引用链接/固定链接,将网址复制到剪贴板,以及更新网址列。可以在[[控制台|$:/ControlPanel]]设置中,自定义此行为。
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/d96c84426484747ab19d92b1d9f49e01c9dad985]] 保存,使用 $:/SiteTitle 作为文件名称的基础
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/09112ed455e7c4be2e50e88c00f370d726d71f64]] 支持 [[webp|https://en.wikipedia.org/wiki/WebP]]、[[heic 和 heif|https://en.wikipedia.org/wiki/High_Efficiency_Image_File_Format]] 图像格式
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/97b098b059aa75e9c5965cafa5973ea6d98951d7]] 在创建新条目时的定位
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/55b5b6dd56d9146b39482fbd2ae0353adce037f1]] 在新窗口中平滑卷动
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/c82edbe6bc9dfe6166650e4300a860c6ee625c76]] 在新窗口中丢失弹出窗口的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3530]] 处理已禁用的佚失链接,以便核心用户接口功能不被破坏(另请参阅[[此处|https://github.com/Jermolene/TiddlyWiki5/commit/a83cd3f984c88a1ecf5861c2c25ffb483b08f0ac]])
!! 可编程性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3558]] 一个筛选器首码 `~` 允许在筛选器中使用 if-then-else 逻辑 -- 见 [[筛选表达式|Filter Expression]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/33dd367a6548824567995bb48e87eece755681e8]] [[subfilter Operator]]允许使用嵌套式筛选器
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/849844be12196781017b3a517839c4721771efd7]] ''stateTitle''、''stateField'' 和 ''stateIndex'' 属性至 ButtonWidget 与 RevealWidget,使其能够使用状态条目,其名称包含 `!!` 或 `##`
* [[增强|https://github.com/Jermolene/TiddlyWiki5/commit/d6a0b06f024e14e9c0a57df5d2b80c8a1cdbd1c2]] [[search Operator]],支持搜索任意字段清单、文本搜索、容许空格搜索和正规表达式搜索
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/763f8afaf2dc7dcaa2d4a492887a944d84c4fed2]] [[contains 运算符|contains Operator]],用于在清单字段中搜索
* [[添加|https://github.com/Jermolene/TiddlyWiki5/issues/3396]] 支持导航滚动偏移,以避免导航到条目,从而使其在 `position:fixed` 的顶部功能表列中被屏蔽 -- 见 [[Hidden Setting: Scroll Top Adjustment]]
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/3140ff9e490cc2e725c0d02edab8db93009d74b2]] [[WidgetMessage: tm-full-screen]] 小工具消息,支持强制状态,而非只是切换
* [[重构|https://github.com/Jermolene/TiddlyWiki5/pull/2758]] 侧边栏,使其可从标签 <<tag "$:/tags/SideBarSegment">> 动态构建
* [[重构|https://github.com/Jermolene/TiddlyWiki5/commit/19f7287a536e48225ec706589ffb307dfc991c9e]] 条目信息面板,使其可从标签 <<tag "$:/tags/TiddlerInfoSegment">> 动态构建
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3346]] 用于生成数字范围的 [[range 运算符|range Operator]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3360]] `<select>` 元素着色的调色板支持
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/bef3242075b6d962b7963b9c9c7042c39198fc8f]] 新的文本编辑器操作 ''save-selection'' -- 见 [[WidgetMessage: tm-edit-text-operation]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/f54a0a11bce9e47542df32610fae489f4a1dba8c]] 编辑器工具栏按钮,以运行操作小工具的支持
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/2e51f08bef8656fdca83fff6163dc67cbaefa2d4]] 在渲染时重订标题的支持 -- 见 [[tv-adjust-heading-level Variable]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3423]] 实验性的支持打包 TiddlyWiki 的 JavaScript 核心到外部脚本,[[用于新的网页服务器增强功能|Using the external JavaScript template]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/fe85845c3ce78ff102e411d01873912b3de8705e]] `\import` [[编译指示|Pragma]] 作为直接使用 ImportVariablesWidget 的更简洁的替代方法
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3530]] (和[[这个|https://github.com/Jermolene/TiddlyWiki5/commit/a83cd3f984c88a1ecf5861c2c25ffb483b08f0ac]]) 新的 [[tv-show-missing-links Variable]] 通过 LinkWidget 更严格地控制佚失炼接的渲染
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/3371]] 以 [[WidgetMessage: tm-new-tiddler]] 覆盖现有条目的添加字段
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/35cbb127a3c21b7047517f1eeeff571a420b82ae]] 不必要的变量替换,以 ''define'' 编译定义宏,通过限制变量替换的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/c72e4f01f1a3051e169593a217bffab8eec279f6]] 若条目类型为 "text/vnd.tiddlywiki",'excise' 编辑器工具栏按钮未显示的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/929b0c98330ad25aa4a32cd201274a6e89cd8902]] 生成无线网络 QR 码的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3495]] [[$tw.platform.isLinux]] 在最新版的 Firefox 上
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3334]] 在次要窗口中使用全屏幕的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/a3a4c28143138ca2bde1b8426c910b5e3d6a7110]] 当弹出窗口的状态改变时,RevealWidget 没有正确刷新的微妙错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/3373]] 格式错误的 HTML entities 的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/874318091e20293c6f141080cc4330eb7aa02273]] 将非法参数传递给[[decodeuri Operator]] 和 [[decodeuricomponent Operator]] 时,崩溃的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/457f03798c69f2053894d9971d4b187521c0d9ad]] 阻止快显窗口程序阻止打开新窗口时出错
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/3aae643e140044e440673772d90ebaf0be18ec1f]] 使用延迟加载的条目作为 RevealWidget 的状态条目的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/33ba69e852966d7c5449842a95636024857d7177]] 模态未出现在正确窗口中的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/19c49ae18a48a368ca24bb1493fc9876fa7c7570]] 在编辑模式下添加和删除标签的动画,以及一个用于"开启"侧边栏页签中的动画的[[类似修复|https://github.com/Jermolene/TiddlyWiki5/pull/3578]]
!! 开发者错误修复和改进
* [[重构|https://github.com/Jermolene/TiddlyWiki5/pull/2027]] `$tw.utils.parseStringArray()` 可选地允许非唯一项目
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@abesamma|https://github.com/abesamma]]
* [[@AnthonyMuscio|https://github.com/AnthonyMuscio]]
* [[@Arlen22|https://github.com/Arlen22]]
* [[@bimlas|https://github.com/bimlas]]
* [[@BramChen|https://github.com/BramChen]]
* [[@BurningTreeC|https://github.com/BurningTreeC]]
* [[@Drakor|https://github.com/Drakor]]
* [[@EvanBalster|https://github.com/EvanBalster]]
* [[@flibbles|https://github.com/flibbles]]
* [[@G0erman|https://github.com/G0erman]]
* [[@hchaase|https://github.com/hchaase]]
* [[@hoelzro|https://github.com/hoelzro]]
* [[@iblech|https://github.com/iblech]]
* [[@jho1965us|https://github.com/jho1965us]]
* [[@ldorigo|https://github.com/ldorigo]]
* [[@Lioric|https://github.com/Lioric]]
* [[@Marxsal|https://github.com/Marxsal]]
* [[@morosanuae|https://github.com/morosanuae]]
* [[@pmario|https://github.com/pmario]]
* [[@talha131|https://github.com/talha131]]
* [[@TechLifeWeb|https://github.com/TechLifeWeb]]
* [[@tobibeer|https://github.com/tobibeer]]
* [[@twMat|https://github.com/twMat]]
* [[@yrashk|https://github.com/yrashk]]
* [[@xcazin|https://github.com/xcazin]]
* [[@xcodinas|https://github.com/xcodinas]]
//[[此版的更新历史详见|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.18...v5.1.19]]//
此版本包含于 [[5.1.18 版|Release 5.1.18]]发现错误的修复。
!! 可编程性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/a8b8fb3b6f587ee8813cc0bafdc008bf12ecb7d1]] 隐藏的设置,用于[[保存时的文件名|Hidden Setting: Filename for Save Wiki Button]]
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/3630]] 用于保存的文件名结构的不兼容更改
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3640]] [[KaTeX 插件|KaTeX Plugin]]的字体问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/3647]] 强制[[网页服务器|WebServer]]的基本验证的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3650]] 当 `popupTitle` 属性改变时,ButtonWidget 没有刷新的问题
* [[修正|https://github.com/Jermolene/build.jermolene.github.io/issues/5]] `empty.html` 意外包含启动画面的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3641]] 在多个字段之间进行搜索匹配的回归
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@BurningTreeC|https://github.com/BurningTreeC]]
* [[@dlund4|https://github.com/dlund4]]
* [[@hoelzro|https://github.com/hoelzro]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.1...v5.1.2]]//
这是另一个小改版与文档更新和一些错误修复和改进。
!! 可用性改进
* [[改良|https://github.com/Jermolene/TiddlyWiki5/commit/b3df07ae3e190cfb6fc23dbe31c6229fe5e39087]] 使用 [[KaTeX Plugin]] 对于格式不正确或无法辨识的 ~LaTeX 内容的错误处理,
!! 可编程性改进
* [[改良|https://github.com/Jermolene/TiddlyWiki5/commit/42abef6fbf79342ccbd90b142d48f64ab5c1c38a]] 标签侧边栏中的未设标签项目之前的样式分隔符号
* [[改良|https://github.com/Jermolene/TiddlyWiki5/commit/23c2d90ee8e28f8c68f9ba58fcbc13a56f838d61]] 上载保存器的错误处理 (用于保存到 TiddlySpot)
* [[改良|https://github.com/Jermolene/TiddlyWiki5/commit/115245a632e80e9d033957327dfec909a3cd1fc8]] storyview 错误侦测
!! 修复错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/b1fb0a2a070a6abc78564e56fdb4244076ac44ac]] 格式不正确的插件造成的崩溃
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/eacb9e53ebf2a814d61bf005d68f449f7b9e63b5]] 在删除条之目后 syncer 未移除条目信息的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/e2046ce4ffb6b8232a4ad5e7f51c431798917787]] HTTP 处理回应码 201 为成功
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@Evolena|https://github.com/Evolena]]
* [[@pmario|https://github.com/pmario]]
* [[@simonbaird|https://github.com/simonbaird]]
* [[@TheDiveO|https://github.com/TheDiveO]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.19...v5.1.20]]//
!! 新的条件运算符
[[添加|https://github.com/Jermolene/TiddlyWiki5/commit/17711657b6028a177c8aef97f7a0a1c084d65436]] [[条件运算符|Conditional Operators]]:[[then 运算符|then Operator]] 和 [[else 运算符|else Operator]]
!! 新的数学运算符
添加一些新的[[数学运算符|Mathematics Operators]],用于处理数字:[[negate|negate Operator]]、[[abs|abs Operator]]、[[ceil|ceil Operator]]、[[floor|floor Operator]]、[[round|round Operator]]、[[trunc|trunc Operator]]、[[untrunc|untrunc Operator]]、[[sign|sign Operator]]、[[add|add Operator]]、[[subtract|subtract Operator]]、[[multiply|multiply Operator]]、[[divide|divide Operator]]、[[remainder|remainder Operator]]、[[max|max Operator]]、[[min|min Operator]]、[[fixed|fixed Operator]]、[[precision|precision Operator]]、[[exponential|exponential Operator]]、[[sum|sum Operator]]、[[product|product Operator]]、[[maxall|maxall Operator]] 和 [[minall|minall Operator]]。
!! 新的字符串运算符
添加一些新的字符串运算符: [[length|length Operator]]、[[match|match Operator]]、[[uppercase|uppercase Operator]]、[[lowercase|lowercase Operator]]、[[titlecase|titlecase Operator]]、[[sentencecase|sentencecase Operator]]、[[trim|trim Operator]]、[[split|split Operator]]、[[splitregexp|splitregexp Operator]] 和 [[join|join Operator]]。
!! 改进了筛选器中重复项的处理
现在可以更好地控制 TiddlyWiki,从筛选器结果中删除重复项的默认行为,从而更轻松地使用新的数学和字符串运算符:
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/37bb75f0cf446d62eb45d07b9f9b0aa14814a43f]] 支持新的 `=` 前缀,用于合并筛选器 runs ,而不删除重复项
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/18fe112da7d3ac210a5a0b9cf73fe9050717d4e3]] [[enlist 运算符|enlist Operator]]的选项,不删除重复项
!! 改进的键盘快捷键
借由以下新的全局快捷键,键盘快捷键处理已有显著改善
* <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>F</kbd> - 用于聚焦侧边栏搜索字段的快捷键
* <kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>S</kbd> - 用于切换侧边栏的可见度的快捷键
* <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>A</kbd> - 用于开启高级搜索条目的快捷键
!! 保存至 ~GitHub 和 ~GitLab
[[添加|https://github.com/Jermolene/TiddlyWiki5/commit/aa5eaa98fcb8658dbc2b93476c2e09c9207439d8]] 一个 [[Git 服务保存模块|Saving to a Git service]] 可直接保存至 ~GitHub 和 ~GitLab
!! 插件改进
新的和改进插件:
* 新的 [[BrowserStorage 插件|BrowserStorage Plugin]] 用于在浏览器本机存放区中保存条目
* 新的 [[Innerwiki 插件|Innerwiki Plugin]] 用于渲染 TiddlyWiki 屏幕截屏
* [[更新|https://github.com/Jermolene/TiddlyWiki5/pull/4133]] [[KaTeX 插件|KaTeX Plugin]] 至 ~KaTeX v0.10.2
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3131]] 一个 [[KaTeX 插件|KaTeX Plugin]]的编辑器工具栏按钮
* [[更新|https://github.com/Jermolene/TiddlyWiki5/pull/3635]] [[Highlight 插件|Highlight Plugin]] 使用 highlight.js v9.15.6
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3898]] 使用 [[Highlight 插件|Highlight Plugin]]支持语言别名
* 更新 [[CodeMirror 插件|CodeMirror Plugin]],包含[[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3810]] 支持智能缩进
* 更新 [[Dynaview 插件|Dynaview Plugin]],包含[[添加|https://github.com/Jermolene/TiddlyWiki5/commit/a9e595c3f633391003224e499440cdeb8560c055]] 支持启动时从本机存放区恢复滚动位置
* 更新 [[Amazon Web Services 插件|Amazon Web Services Plugin]],包含[[添加|https://github.com/Jermolene/TiddlyWiki5/commit/fffd0ee9e17d6b6a561648a42f0f200d4bb04046]] 支持指定凭证
!! 翻译改进
新的和改进翻译:
* 加泰罗尼亚语
* 简体中文和正体中文
* 法语
* 德语
* 美式英语
!! 性能改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3951]] 可插拔索引模块加速 [[field 运算符|field Operator]] 和 [[tag 运算符|tag Operator]] (在一个有 60K 条目的维基上测试,通过这些优化,启动时间减少了 25%,刷新时间减少了三倍。)
* [[优化|https://github.com/Jermolene/TiddlyWiki5/commit/fddc5d4ee627232441278284ed6bee2f50fe8b26]] 当动画持续时间设置为零时,"Classic" 的故事视图的运行速度要快得多 (在开启 8,000 个条目的故事视图的测试中,观察到大约 50% 的速度提升)
* [[优化|https://github.com/Jermolene/TiddlyWiki5/commit/7869546fef7b2ea5fd6fd72feacd565a7f177fb6]] RevealWidget 避免使用相对较慢的 `localeCompare()` 方法来比较字符串
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/e8d1fbba6c109ccbeaedc1b34e47677c0ada7529]] [[性能仪表板|Performance Instrumentation]]显示各个筛选的计时
* [[优化|https://github.com/Jermolene/TiddlyWiki5/pull/4102]] 渲染和刷新子小工具
!! 可用性改进
* [[改进|https://github.com/Jermolene/TiddlyWiki5/pull/3832]] [[配色盘管理器|$:/PaletteManager]] 能够删除项目,并直接编辑间接项目
* 一些新的调色板:"Nord"、"Solarized Light"、"Spartan Day"、"Spartan Night" 和 "Twilight"
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/5a37a84a54f2dc9ccf106309b739cfa693bae3e3]] 用于搜索所有插件字段的插件库
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/e5f3301c1c36e8add4ed89ab1bd53a9b68411d3f]] 通过导入,覆盖核心 JavaScript 模块时的警告
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3654]] 重命名条目时提示参考
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/0e6855eba8945e023cc5ef19809cfb6d6025627b]] 一个新的筛选器默认,用于高级搜索 "此工作阶段已修改的条目"
* 添加了一些动画(其中一些已经存在,但已被破坏多年)用于以下更改:
** [[查看模板中的标签|https://github.com/Jermolene/TiddlyWiki5/pull/4142]]
** [[页面控制项|https://github.com/Jermolene/TiddlyWiki5/pull/4145]]
** [[左上和右上栏|https://github.com/Jermolene/TiddlyWiki5/pull/4146]]
** [[页签|https://github.com/Jermolene/TiddlyWiki5/pull/4149]]
** [[编辑模板中的各字段|https://github.com/Jermolene/TiddlyWiki5/pull/4148]]
!! 可编程性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/4051]] [[可配置的查看和编辑模板|Hidden Setting: ViewTemplate and EditTemplate]]的支持
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/37ea659bf011b1d4a152f54171399d94f5bba3ef]] [[dumpvariables 宏|dumpvariables Macro]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/754c1251a9bdf45e8f64079a4bbdaed2d05be2b7]] [[variables 运算符|variables Operator]] 和 [[getvariable 运算符|getvariable Operator]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/ed67f4a88b29c5c81d4de31203dbf23d66955fb7]] [[小工具消息 tm-focus-selector|WidgetMessage: tm-focus-selector]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3546]] [[escapecss 运算符|escapecss Operator]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3880]] [[unusedtitle 宏|unusedtitle Macro]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/36e76429b1a1d4638374d513430393db5693b932]] [[is 运算符|is Operator]] 的 `[is[variable]]` 选项
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/90684f9f52809ff5df39629d3b161d7ff23002f4]] [[is 运算符|is Operator]] 的 `[is[blank]]` 选项
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/94f143bf643e36e817d1dd5b678515853eed6aca]] 用于 $:/AdvancedSearch (由与侧边栏搜索相同的[[隐藏设置: 搜索自动对焦|Hidden Setting: Search AutoFocus]]控制) 中文本输入的可选自动聚焦
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3756]] 可选的 ''tabindex'' 属性至简单、框架和 CodeMirror 文本编辑器引擎
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3758]] ''tabindex'' 属性至编辑模板
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3822]] button、textarea 和 input 的轮廓颜色
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/477c41f84304ed83245c87068dba3695a5053d62]] ''tooltip'' 属性至 SelectWidget
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/348a0bc8bcbf5c42d9b93e5e208696d28fc95cb7]] 插件在启动时禁用初始导航的选项
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/c036c228269fc30d0df770a7c7713fd9af829df7]] $:/info/browser/language 至 InfoMechanism
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/f047e7cbf50edcf4775b50bdebc3f704970b8cde]] 一个使用 StartupActions 设置默认语言的示例
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/edd3156430dd94b0ced630a1b70f2e2ef0ff6c36]] 导入 JSON 文件,验证它其是否为有效条目文件,如果不是,则将其当作普通 JSON 导入
* [[改进|https://github.com/Jermolene/TiddlyWiki5/issues/3974]] LinkWidget,如果没有内容,则使用目标条目名称作为默认值
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/2a4c60b23dc1436af6206fad5a56742550eac1a3]] [[tm-open-window 小工具消息|WidgetMessage: tm-open-window]],允许指定窗口标题
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/8e7c0907f8cce4708a02486fc93dcea1ab115196]] ''checkActions'' 属性到[[复选框小工具|CheckboxWidget]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/3afaa9de9aaae7654c1d03ddc22ee97724cbb159]] 支持定位到字段开头的搜索
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/8b04cfd4d5142a957f2e3da80c3f079e215b9e75]] 主要的 HTML 文件模板的长期问题,即使未通过保存筛选器选择,也会包含原始标记条目
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3572]] 启用粘性标题的重叠下拉清单
* [[删除|https://github.com/Jermolene/TiddlyWiki5/pull/3749]] 在文本编辑器中明显过时的选择包装限制
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3745]] 缺少 `stateTitle` 条目时,在 RevealWidget 中的错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/72f2a9425197b013ab3664e1679c6763d92d4382]] 动画持续时间为空的错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3806]] 在侧边栏的 "开启" 页签中的拖放占位符的 Firefox 问题
* [[改进|https://github.com/Jermolene/TiddlyWiki5/pull/3809]] 在拖放操作过程中,黏着占位符的 Firefox 问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3819]] [[CodeMirror Plugin]] 使用 ''tiddler-editor-border'' 颜色
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/8012a3508f209fbbe68484e30ed65832cf5146b9]] 使用 TiddlySpot 保存模块且禁用 cookie 的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3611]] 框架文本编辑器使用正确的背景颜色
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/f5b25994322e58de84cae70ab67a68b1413db27f]] 在侧边栏的两个不同区域使用类别 `tc-sidebar-lists` ,使其无法在 CSS 选取器中区分它们的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/7f78065992baf290ae221fb12c63e52e0f8da403]] 重命名条目时,创建不必要的 "list" 字段的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/394725f00cd8f38089d2840aa026d72c88627bff]] 修正 EditBitmapWidget 和佚失条目的崩溃
!! Node.js 错误修正和改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/373afd72c804b0ffa2779849ba0d278d53e65df4]] SaveWikiFolderCommand,将一个维基保存为[[维基文件夹|TiddlyWikiFolders]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/5b09881679200dc78e5962a0588c8f214ddedbbb]] DeleteTiddlersCommand
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/8c72a28f0c70e6a62387ccdd1431f9225a5fd2de]] (和 [[此处|https://github.com/Jermolene/TiddlyWiki5/commit/feab75a6d1723cd6db5912b2902f0ec33c550fb6]]) 在命令行上指定插件的功能 (详见[[使用 TiddlyWiki 于 Node.js|Using TiddlyWiki on Node.js]])
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/3677]] 支持对 WebServer ListenCommand 的紧缩和 gzip 压缩
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/12630d4a91b4cc7b1eb846c3afbeda16858df05a]] 一个 LoadCommand 的选项,忽略加载错误
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/7fcd2f132e91aa375a1fece501b14e991ba1bd4c]] 由文件系统配接器处理 JSON 文件:
** 对于其字段的值包含不能存放为 .tid 文件的任何条目,使用 `.json` 文件 (而不是 `.tid`)
** 保存 `application/json` 条目为 `.json` 文件
!! 开发者错误修复和改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/e52a616891977bde142334df2a72c7dd121efb82]] 小工具子类化的支持 -- 详见 https://tiddlywiki.com/prerelease/dev/#WidgetSubclassingMechanism
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@00SS|https://github.com/00SS]]
* [[@admls|https://github.com/admls]]
* [[@benwebber|https://github.com/benwebber]]
* [[@bimlas|https://github.com/bimlas]]
* [[@BramChen|https://github.com/BramChen]]
* [[@BurningTreeC|https://github.com/BurningTreeC]]
* [[@diego898|https://github.com/diego898]]
* [[@dnebauer|https://github.com/dnebauer]]
* [[@inmysocks|https://github.com/inmysocks]]
* [[@flibbles|https://github.com/flibbles]]
* [[@jdjdjdjdjdjd|https://github.com/jdjdjdjdjdjd]]
* [[@JesseWeinstein|https://github.com/JesseWeinstein]]
* [[@joshuafontany|https://github.com/joshuafontany]]
* [[@Kartiku|https://github.com/Kartiku]]
* [[@kyrias|https://github.com/kyrias]]
* [[@MarxSal|https://github.com/MarxSal]]
* [[@MidnightLightning|https://github.com/MidnightLightning]]
* [[@pmario|https://github.com/pmario]]
* [[@rmunn|https://github.com/rmunn]]
* [[@talha131|https://github.com/talha131]]
* [[@telmiger|https://github.com/telmiger]]
* [[@the-kenny|https://github.com/the-kenny]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.20...v5.1.21]]//
这是一个错误修复版本,解决最近 [[5.1.20 版|Release 5.1.20]]中引入的问题。
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/a170210069bbec265992b365a61e0722b480ab1d]] ActionDeleteFieldWidget 崩溃和一个缺少 ''tiddler'' 属性的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4087]] 边缘案例,当被解译为筛选器时,某些条目清单无效
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/471b73158a887d2f060194741739c1da8b5d44d8]] 升级包含被覆写的核心模块的维基时,警示过多的问题
* [[恢复|https://github.com/Jermolene/TiddlyWiki5/commit/83386f34b50a9d93171df133957d489b5de629ef]] 无意中启用性能检测
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/4218]] 字段名称中包含 WikiText 的错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/dd09266b467173e45d75c172b2e82fd542f682fe]] [[目录宏|Table-of-Contents Macros]]中的 CSS 类的问题。
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4203]] 具有 CSS 类 `tc-btn-invisible` 的按钮缺少前景颜色的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4227]] 字段输入编辑器周围的空白
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/bb036ced933ecb36f5d93693fb4f6e7aa2748df7]] [[翻译者应用版|Translate TiddlyWiki into your language]]的布局问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/996ee52cf9f5e15d95deaf0acf4206959d34432a]] 于 Windows 使用 [[External Attachments Plugin]] 崩溃的问题
* [[删除|https://github.com/Jermolene/TiddlyWiki5/pull/4245]] 不一致的侧边栏中标签丸的阴影
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/4247]] [[field 运算符|field Operator]]和空白操作数的递归
* [[恢复|https://github.com/Jermolene/TiddlyWiki5/pull/4249]] v5.1.20 中错误更改清单的字符串化方式
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4189]] 侧边栏的''开启''页签,使用 `tv-story-list` 变量
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4255]] [[保存到 GitLab|Saving to a Git service]] 的问题
!! Node.js 错误修正
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4174]] [[自定义条目文件命名|Customising Tiddler File Naming]]的错误
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@bimlas|https://github.com/bimlas]]
* [[@BurningTreeC|https://github.com/BurningTreeC]]
* [[@flibbles|https://github.com/flibbles]]
* [[@heronils|https://github.com/heronils]]
* [[@hoelzro|https://github.com/hoelzro]]
* [[@markstegeman|https://github.com/markstegeman]]
* [[@StefanSTFG|https://github.com/StefanSTFG]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.21...v5.1.22]]//
! 主要改进
!! 动态插件加载
插件[[现在可以|https://github.com/Jermolene/TiddlyWiki5/pull/4259]]动态加载或删除,而无需重新加载 -- 只要它们不包含任何 ~JavaScript 模块。需要重新加载的插件,将在[[控制台|$:/ControlPanel]]的插件选择器中标明。
控制台中的[[插件清单|$:/core/ui/ControlPanel/Plugins]]和[[插件选择器|$:/core/ui/ControlPanel/Modals/AddPlugins]] 一些功能改进:
* 一个新的''"更新" 页签'',列出了插件库中所有可用的升级,以及按一下即可更新所有升级的按钮
* 页签现在用于插件选择器中显示插件库
* 现在插件选择器可显示提供附加功能的插件,为另一个插件的嵌套''"子插件"'',使主清单更易于流览
* 插件现在可以声明相依性,可以无须使者介入的''自动安装''
* 所有插件现在显示更一致,包括具有简洁的、非正式名称(除了说明和标题)的功能
!! 主从式改进
此版本对主从式配置做了一些改进:
* 改进连接错误的恢复能力。浏览器遇到错误,将自动重试,当其成功时,自动删除关联的错误消息
* 系统条目的更改,现在从服务器同步到浏览器
* 服务器上的条目删除操作,现在可以同步到浏览器
* 新的 "云端" 页面控制按钮,下拉式功能表显示状态和其他操作:
** "从服务器刷新" 强制立即检查来自服务器的更改
** "注销"
** "保存快照以供脱机使用" 在没有主从式组件的情况下保存维基的副本
** "将同步器日志复制到剪贴板" 让向用户询问调试信息,变得更加容易
* 添加 "filter" 和 "exclude" 参数至 [[GET /recipes/default/tiddlers.json|WebServer API: Get All Tiddlers]] 端点,以允许筛选返回的条目和字段
* 增进延迟加载,在 HTML 文件中包含精简版条目,并避免来自服务器的不必要负载
* 当 tidlyweb 配接器处于激活时,现已禁用官方插件程序库
* 当一个文件请求失败时,内部文件系统详细信息不再向浏览器显露 (详见 https://github.com/Jermolene/TiddlyWiki5/issues/3724)
详细信息请参阅 [[GitHub 上的拉取请求|https://github.com/Jermolene/TiddlyWiki5/pull/4373]]。
!! 新的 [[compare 筛选器运算符|compare Operator]]
[[添加|https://github.com/Jermolene/TiddlyWiki5/issues/4554]] 一个用于比较数字、字符串、日期和版本号的新筛选器运算符。例如:
:`[[2]compare:number:eq[3]]`
; 没返回任何值
:`[[2]compare:number:lt[3]]`
; 返回 "2"
:`[[2]compare:number:eq[2]]`
; 返回 "2"
:`=1.2 =1.8 =2.3 =3.4 =7.2 +[compare:number:gt[1.5]compare:number:lt[2.5]]`
; 返回 "1.8" "2.3"
:`[[1]compare:number:gt[2]then[yes]else[no]]`
; 返回 "no"
!! 新的插件
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/ad2d4503e584ce9f931dbd1e98f95738b2841e51]] ''menubar'' 插件,创建一个功能表列,回应在行动设备上,并支持搜索、下拉清单和链接
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/447cd56da9db2ee169607f32923081ac47e78354]] ''freelinks'' 插件,自动创建自任何条目名称的链接
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/9b48a1c82955d1050c426fef559f42f4b8ec56e7]] ''dynannotate'' 插件,包含用于叠加注释或突出显示其他内容的基元
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/005c584d85505b9477169ef822752eed39dde66a]] ''share'' 插件,用于通过网址位置哈希分享条目
* [[切换|https://github.com/Jermolene/TiddlyWiki5/pull/3876]] ''markdown'' 插件到更新和改进的 [[remarkable|https://github.com/jonschlinkert/remarkable]] 程序库
! 翻译改进
* 改进华语翻译
* 改进荷兰语翻译
* 改进法语翻译
* 改进德语翻译
* 改进葡萄牙语翻译
! 性能改进
* [[优化|https://github.com/Jermolene/TiddlyWiki5/pull/4108]] ImportVariablesWidget,提高全域宏的性能
* [[优化|https://github.com/Jermolene/TiddlyWiki5/commit/18f5333e01eb62ece65a86c457bf8a398f156930]] 内核 SVG 图像,从内核插件节省大约 100KB
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/4421]] 用于反向链接的索引子模块
* [[优化|https://github.com/Jermolene/TiddlyWiki5/pull/4397]] [[sort Operator]]
! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/96eca32b1105416c317101aa91dd284f835a8ba8]] 二进位条目的下载按钮
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4293]] (和[[此处|https://github.com/Jermolene/TiddlyWiki5/pull/4296]]) 页面控制项按钮的间距
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/9395d7567179c436d0e8ac26fc976d717eae7f50]] 在文档中的图标的显示
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/4238]] 支持指定在编辑或创建条目时,应获得焦点的字段
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/4314]] 支持在控制台指定新条目和日志的标签
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/05a3e1ad36c2fb383dd4975a578f95e8a6c3f325]] HTML 标记的语言属性,以提高可访问性
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/3943]] 嵌入视频的缩放
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/4361]] $:/TagManager 的图标下拉清单中的 "无" 选项
* 修正了有关编辑模板和标签选择器的一些布局问题 (详见 [[18151cc1|https://github.com/Jermolene/TiddlyWiki5/commit/18151cc193e8c0d613663d3ecf6437c63e540c2d]]、[[793d84bc|https://github.com/Jermolene/TiddlyWiki5/commit/793d84bcb1bc52ee77c49090268dd242017cdaa9]]、[[1cf2d079|https://github.com/Jermolene/TiddlyWiki5/commit/1cf2d0799d7027d58f4bdca857bc342dd778a330]]、[[3c365a25|https://github.com/Jermolene/TiddlyWiki5/commit/3c365a2567ebfe12d78b0aed77a40969cd38563e]]、[[45def4de|https://github.com/Jermolene/TiddlyWiki5/commit/45def4def441554a06c3e17742adc29a17d2a13c]]、[[89728d8a|https://github.com/Jermolene/TiddlyWiki5/commit/89728d8a9a9fd9b888deb78f420dd5758ee63909]]、[[4cf96e73|https://github.com/Jermolene/TiddlyWiki5/commit/4cf96e7339b3b7d8e84a5b73d9871cdad50c5a84]]、[[bfa3ddd0|https://github.com/Jermolene/TiddlyWiki5/commit/bfa3ddd077404ad4627b9161bcadf3d5a539c1dc]] 和 [[74172b35|https://github.com/Jermolene/TiddlyWiki5/commit/74172b35ceae84f254e20d6d7ec4dff2cca692b1]])
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/4494]] ''Gruvbox Dark'' 调色板
* [[改进|https://github.com/Jermolene/TiddlyWiki5/pull/4515]] (和[[这里|https://github.com/Jermolene/TiddlyWiki5/pull/4517]]) Vanilla 和 Nord 调色板
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/152125f53b9979bfd5511973038b4358d1ef48c4]] Railroad 插件,使用标准调色板的色彩配置
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/16c1cbee292604b2b8be36a15d5828893d132b20]] Comment 插件,由每个评论到原始帖子的链接
! 可编程性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/4491]] 用于 https://gitea.io/ 的保存模块
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/24d2804799b09278c4bb83918d8b75dfa49dbed4]] 用于触发快显窗口的 ActionPopupWidget
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/4442]] ''tabindex'' 属性到 ButtonWidget
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/bfbd886a8bbf2f6ce147ea526eec2098357d3ae7]] ''index'' 属性到 RangeWidget,使其用于[[数据条目|DataTiddlers]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/6089c4de2921df0f76f605f1830fb2c04548f73c]] 由 `throttle.refresh` 字段,支持[[刷新节流|RefreshThrottling]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/1150c87edb7478af6cc943eb0ef52fdf3051c121]] (和 [[此处|https://github.com/Jermolene/TiddlyWiki5/commit/8c894612914e21cf941a1daa953538c28ce91d8e]]) 新的 [[is 运算符|is Operator]]的 `[is[binary]]` 操作数
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/68163684a2e57108e160295e445c194268b873c5]] 在保存模板中 `publishFilter` 的用法 -- 请参阅[[保存机制|SavingMechanism]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/89716bb81d68b9c68d3c0fd2f2de96afad1b086a]] CSS 类标识条目正文编辑器
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/e9211b0eee8e0b081f9f1597bde6673bf4c55d5c]] 用于标识侧边栏页签集的 CSS 类
* [[更新|https://github.com/Jermolene/TiddlyWiki5/pull/4208]] normalize.css,从 v3.0.0 到 v8.0.1
* [[更新|https://github.com/Jermolene/TiddlyWiki5/pull/4502]] Highlight plugin to use highlight.js v9.18.1
* [[更新|https://github.com/Jermolene/TiddlyWiki5/pull/4226]] Jasmine 到 v3
* [[重构|https://github.com/Jermolene/TiddlyWiki5/commit/7b66df688ae745537929a25799ef4a72d4437fcd]] AndTidWiki 保存模块
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/5a5c967a3943beb6a4fa513cb34d231e46304452]] [[系统标签: $:/tags/Macro/View|SystemTag: $:/tags/Macro/View]],用于创建仅在视图模板中可用的宏
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/4404]] 支持嵌入的 `.webm` 和 `.ogg` 视频文件
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/c7d8492842844d7de12b7a327f978ff114708d84]] 支持嵌入 `.woff2` 字库案
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/3df1f9c9d0cc92b596262c0220ecf529c7fbb858]] ''spaces'' 参数到 [[jsontiddlers Macro]],用于控制输出的格式
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/4afde5a722afc91c826305800ba536c5fe8ef2e5]] [[colour 宏|colour Macro]],添加对不在当前调色板中的颜色,指定一个后备的支持
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/6091b013864af3d9918df69894f4aa05d1b8ffeb]] [[隐藏设置: 默认条目图标|Hidden Setting: Default Tiddler Icon]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/bc687e57834efa312cca126af222613ef241c585]] [[隐藏设置: 禁用拖放|Hidden Setting: Disable Drag and Drop]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/ae9ce4f01c6048aeb5604a93b57c2f3e4f959162]] ''tc-tiddler-overridden-shadow'' 类别到覆盖影子条目的条目框架
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/4490]] 支持自定义类到模态包装器
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/091bcfce7d1a9c09140992e649f41ae17d27f307]] [[datauri Macro]] 可用于有 ''_canonical_uri'' 字段的条目
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4332]] 在区块引号清单中以 ">" 格式生成的无效的 HTML
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/4540]] "index" 选项至 [[has Operator]] 侦测数据条目的项目是否存在
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/pull/4433]] FieldsWidget 具有 "include" 属性和更多排序选项的,并且具有新的 "exclude" 和 "exclude" 后缀的[[fields 筛选器运算符|fields Operator]]
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/pull/4436]] ActionCreateTiddlerWidget,其属性用于指定模板,并控制覆盖现有的条目
! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/4291]] 在 Node.js 下使用延迟加载时,删除失败的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4243]] [[GitLab 保存模块|Saving to a Git service]]的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/4237]] 当固定链接按钮放置于搜索框上方时的错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/a054d100e73db95071299e92c4321c2aa8e42382]] [[WidgetMessage: tm-edit-text-operation]] 的 ''count'' 参数的用法
* [[修正|https://github.com/Jermolene/TiddlyWiki5/issues/4284]] 即使排除了的条目,toc-selective-expandable 宏仍显示披露箭头的错误
* [[删除|https://github.com/Jermolene/TiddlyWiki5/commit/81f1e6af4e5920c6ff41e7f08171bfddc1b26dfc]] (和[[这里|https://github.com/Jermolene/TiddlyWiki5/commit/46c90af308015242fa0314d85f1524727e2aa7e5]]) 垂直页签的错误换行设置
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/d30eacc6520971c95bdabf24f4c4122534d9414a]] 在多重选择模式下,以编程方式,取消选择 [[select 小工具|SelectWidget]]中的项目的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4333]] 在颜色选择器跨度的使用
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/e84c422e5091c02f55db4027faa9ba840e2aee6c]] 当底层的值发生变化时,刷新 RangeWidget
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/e4eaae14faa1bf867c0f8168e221cf30ac6e2e0d]] 当禁用 JavaScript 时,显示初始画面的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/8f3da69f818940eb5f517da850fb3766b72c7d7d]] 毫秒 0XXX [[日期格式|DateFormat]]的问题
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/174a36cda63127d19230bcfbe9a5fdde46e5b0ea]] 单一条目窗口与主窗口的兼容性
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/015306dfc9099f4d5d9415b64266d328a154b119]] IE 浏览器中某些内核图标的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/3eacdc19fdb4ed7ce864a04dd87a5e1c6492daac]] GitHub 和 GitLab 保存模块,若未指定路径,则使用默认的 `/`
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4432]] 在某些环境中嵌入 ZIP 文件的支持
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/665b63ec38b75dfe62009d2f5514682de60e953f]] 当 ButtonWidget ''actions'' 属性更改时,缺少刷新
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4534]] RangeWidget 可运作于浏览器 IE 10/11
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/bdc5ac592f17b5ed3bb5ae782e56ced62406d653]] CountWidget 显示空筛选器为 "0",而非 "undefined"
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4559]] 使 MakeLibraryCommand 尊重环境变量
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4396]] 使空清单不返回的 "null"
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4551]] 用于 CodeMirror 自动完成下拉列表的 z-index
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/4552]] 侧边栏链接中不需要的空格
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@activescott|https://github.com/activescott]]
* [[@Arlen22|https://github.com/Arlen22]]
* [[@BramChen|https://github.com/BramChen]]
* [[@BurningTreeC|https://github.com/BurningTreeC]]
* [[@donmor|https://github.com/donmor]]
* [[@ento|https://github.com/ento]]
* [[@flibbles|https://github.com/flibbles]]
* [[@gernert|https://github.com/gernert]]
* [[@heronils|https://github.com/heronils]]
* [[@hoelzro|https://github.com/hoelzro]]
* [[@Janno|https://github.com/Janno]]
* [[@joshuafontany|https://github.com/joshuafontany]]
* [[@inmysocks|https://github.com/inmysocks]]
* [[@kookma|https://github.com/kookma]]
* [[@linonetwo|https://github.com/linonetwo]]
* [[@m42e|https://github.com/m42e]]
* [[@MidnightLightning|https://github.com/MidnightLightning]]
* [[@mklauber|https://github.com/mklauber]]
* [[@pmario|https://github.com/pmario]]
* [[@s-l-lee|https://github.com/s-l-lee]]
* [[@s-light|https://github.com/s-light]]
* [[@saqimtiaz|https://github.com/saqimtiaz]]
* [[@xcazin|https://github.com/xcazin]]
\define contributor(username)
<a href="https://github.com/$username$" style="text-decoration:none;font-size:24px;" class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer"><img src="https://github.com/$username$.png?size=32" width="32" height="32"/> @<$text text=<<__username__>>/></a>
\end
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.22...v5.1.23]]//
! 性能改进
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/5206">> 筛选器运行,中间结果使用更有效的链接列表结构
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/5205">> 筛选机制,暂存分析宏的结果,而不使用文本替换
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/4659">> 模板使用单个 VarsWidget,而不是多个 [[SetVariableWidgets|SetVariableWidget]],提高性能且更易于调试
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/4954">> ListWidget 不为空白的 `emptyMessage` 属性初始化解析器
! 可用性改进
* <<.link-badge-renamed "https://github.com/Jermolene/TiddlyWiki5/pull/5143]] 在条目信息面板中的 "参考" 为 "反向链接"
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/1546a4a1895b93a47b79c9d37b94be039604443a">> 有关主从式配置使用在线插件程序库的警示消息
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/commit/9cd5415dfe54b47819920aa3cf6ac2d5e3a9188e">> 预览版的网站图标
* <<.link-badge-removed "https://github.com/Jermolene/TiddlyWiki5/commit/22e25c05eb5e5cc5b670a362d1eead1d62dedbb9">> normalize.css 的搜索输入字段的样式,并<<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/commit/9003c810393d90ee20db083fda35b6469acc592a">>到 normalize.css 的现代分支
* <<.link-badge-removed "https://github.com/Jermolene/TiddlyWiki5/commit/bb6fee4e1c79a2b1cbf75cd0326ecb8fb1ccb86b">> 编辑 SVG 条目时,不必要的编辑器工具栏按钮
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5089]] 用于切换版面的全域快捷键
* <<.link-badge-hide "https://github.com/Jermolene/TiddlyWiki5/commit/1d7091e637462dcda8c28d660ca42c073f647043">> `.tid` 的导出选项,当要导出一个以上的条目时。
! 导入机制改进
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/4937">> 导入的用户界面,允许重命名条目,并警示已存在的条目
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5067">> 将覆盖现有条目的进口项目的颜色编码,以及其他警告的颜色编码
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/commit/527638d5e60114653385ed39dc55c736a67e58d2">> 导入清单中的状态消息
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/cc3462999b80461fe30b8f4b4f272ccfbbb78b35">> 导入的 `.tid` 文件没有 `type` 字段的内容类型
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4711">> 导入期间创建无关的系统条目
! 调色板改进
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/484c9e986fc6f323e30460a88f134da3a4e8a89e">> $:/PaletteManager 显示 "间接" 颜色(亦即,由另一个 `<<colour>>` 宏定义的颜色)
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5092">> "Desert Sand" 调色板
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5100">> "Cupertino Dark" 调色板
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/8cf458d3b3f1e38c14a2819529e08dca4a7e297c">> "Solarized Dark" 调色板
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/4590">> (和<<.link-badge-here "https://github.com/Jermolene/TiddlyWiki5/commit/274a07b4fd2ca2d1b95c8ddf52fe055c44260d9b">>),使 Vanilla 主题可选用[[浏览器选择大纲|https://developer.mozilla.org/en-US/docs/Web/CSS/::selection]]的调色板颜色
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/4585]] "Gruvbox" 调色板的工具栏按钮的可读性
! 键盘处理改进
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4725">> 支持通过键盘导航搜索和新的标签下拉清单。[[keyboard-driven-input 宏|keyboard-driven-input Macro]] 可用于将此功能添加到其他下拉清单
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4791>> 一个 'tabIndex' 属性到条目输入区域,使其更易于使用定位键,在编辑控制项之间移动
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4909">> 键盘支持在[[高级搜索|$:/AdvancedSearch]]中的选项卡之间循环
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4921">> 键盘支持导航编辑模板中的字段名称下拉清单
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4989">> 键盘支持导航编辑模板中的 `type` 字段输入
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4919">> 键盘支持使用编辑模板中的''插入维基链接''工具栏下拉清单
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4927">> 用于保存维基的键盘快捷键
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4978">> 删除编辑模板中字段的键盘快捷键
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4952">> 用于更改侧边栏版面的键盘快捷键
! 小工具改进
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5086">> 用于低级事件处理的 EventCatcherWidget
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/1b31c25ea77ee4dce86a9aac4375337423ebd3a6">> LogWidget 和 ActionLogWidget 帮助调试
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5037">> ActionConfirmWidget 提示用户简单的 "是/否" 问题
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/5091">> ButtonWidget 和 DroppableWidget,使更改类属性时,不会触发刷新。这让使用类触发 CSS 动画,更加容易
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/5087">> 当状态条目更改时, RevealWidget 可以选择性地动态刷新弹出窗口位置
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5014">> 对 EditWidget、EditTextWidget、CheckboxWidget、RadioWidget 和 RangeWidget 的 ''disabled'' 属性的支持
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5010">> 对 ButtonWidget 的 ''disabled'' 属性的支持
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/ae13a0fee118c50169b7835c950df1dade33788f">> MacroCallWidget,使其能选择性地呈现宏的原始文本 (以前总是输出维基化的结果维琪)
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/commit/e71a27ac2d71f2e48f9e4e9156b59bb3ecc2a105">> [[link 小工具|LinkWidget]]在 SVG 元素中工作
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/c86a621d5d205e1ae0ce999b90ebe09addc45a9f">> ''accept'' 属性到 [[browse 小工具|BrowseWidget]]
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/77a929faa3a33768e52cf2a34ecbef9c554a6a7b">> [[action-popup 小工具|ActionPopupWidget]]允许弹出窗口被消除
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/4740>> EditWidget,将所有属性传递到子小工具
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/95e30138f0b34135031d50c1606e8b0059ca6653">> [[linkcatcher|LinkCatcherWidget]] 小工具,将键盘修改器状态传递给操作
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/5154">> RadioWidget 支持操作
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/5158">> RangeWidget 支持操作
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/3406b98af62def252bcb0f7df8a72ed4b74818eb">> ''autocomplete'' 属性到 EditTextWidget 和 EditWidget
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5088">> [[lookup 操作符|lookup Operator]]的默认值的行为
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/6570561d4ec31d9e64c3021bb69c20daec8c9eac">> [[has 筛选器操作符|has Operator]] 用于 ''tags'' 字段时的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5222">> 在浏览器中使用 [[edition 操作符|edition Operator]]时崩溃的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4647">> [[droppable 小工具|DroppableWidget]] 的 ''class'' 属性
! 筛选器改进
新的功能:
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4964">> 支持筛选器操作符的多个操作数
新的筛选器 run 前置码:
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4915">> 支持命名筛选器 run 前置码
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4918">> [[:filter 筛选器 run 前置码|Filter Expression]] 与新的 [[filter 操作符|filter Operator]] 相似,但适用于筛选器 run
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4959">> [[:intersection 筛选器 run 前置码|Filter Expression]] 获取两个筛选器 run 的交集
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5196">> [[:reduce 筛选器 run 前置码|Filter Expression]]
新的操作符:
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/14a28b77796461c9167898793ab9851e029e0354">> [[filter|filter Operator]] 和 [[reduce|reduce Operator]]筛选器操作符,用于处理项目清单
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5080">> [[power 操作符|power Operator]] 和 [[log 操作符|log Operator]]
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4991">> [[draft 操作符|is Operator]],检查一个条目是否是另一个条目的草稿
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4973">> [[search-replace 操作符|search-replace Operator]],字符串搜索和替换
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4948">> [[enlist-input 操作符|enlist-input Operator]],将输入标题解析为标题清单
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/4966f6ab625c8ce2c9f0812a726ba928d68ea00b">> [[slugify 操作符|slugify Operator]] 和 [[duplicateslugs 操作符|duplicateslugs Operator]],用于生成人类可读的文件名/网址
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/619c0752bd3c6e71d1fcdb74daa03cfe8257afe4">> [[sortsub 操作符|sortsub Operator]],用于依用户定义的子筛选器排序
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4785">> [[format 操作符|format Operator]] 用于格式化日期
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/14a28b77796461c9167898793ab9851e029e0354">> [[reduce 操作符|reduce Operator]] 将子筛选器应用于每个输入标题,累积一个值
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/14a28b77796461c9167898793ab9851e029e0354">> [[filter 操作符|filter Operator]] 将子筛选器应用于每个输入标题,并返回从子筛选器返回非空结果的标题
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4990">> [[toggle 操作符|toggle Operator]],切换列表中的标题
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5021">> [[cycle 操作符|cycle Operator]]
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5146">> [[pad 操作符|pad Operator]]
其他改进:
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/4811">> [[trim 操作符|trim Operator]],可选择修剪给定字符串而不是空格,从输入条目的前、后或两侧修剪
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/5191">> [[jsonstringify 操作符|jsonstringify Operator]] 和 [[stringify 操作符|stringify Operator]] 支持 "rawunicode" 尾码
! 条目文件命名改进
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/5113">> [[自定义条目文件命名|Customising Tiddler File Naming]]的机制为:
* 将草稿保存到每个用户的特殊文件夹
* 允许 $:/config/FileSystemPaths 中的筛选器更改磁盘上的条目文件的路径
* 允许 $:/config/FileSystemExtensions 中的筛选器更改磁盘上的条目文件的扩展名
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/c1a1e272cc9b823f97f8f1bde6a24dfa5fe973e8">> `th-make-tiddler-path` hook,用于条目路径构造的低级控制
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/4914">> [[tiddlywiki.files Files]] 具有 `isEditableFile`属性的规范,允许将文件保存回其原始位置
! 可编程性改进
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4979">> 支持切换页面模板
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/1446a1e44cd084b0905f3fdcd8b339f23edf2384">> [[tm-scroll|WidgetMessage: tm-scroll]] 小工具消息,允许由 CSS 选择器指定目标元素,从而可以滚动到条目中的位置
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5027">> 包含 NavigatorWidget 的模块,使链接按预期工作
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/5af76c5ea10db2b59cc20f963a836c6a9faa8b10">> [[目录宏|Table-of-Contents Macros]],使其支持自定义链接目标
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4777">> Hyperdrive 保存模块,用于 Beaker 浏览器 v1.0
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/2a8f7a9c503c9a6e4ea1bcd116be31ab6e90cf52">> [[网站图标机制|Setting a favicon]]支持 ''_canonical_uri'' 图片
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/48dfadd85b8ebd788b44ed2c46108720742546df">> 支持以 $:/info/startup-timestamp 记录时间戳 (详见[[信息机制|InfoMechanism]])
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/bf6735420d2f8191f658c556910e7d73c681d5fe">> 支持 SVG 网站图标
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/f760a2fa796d57e61307a5ea5274d6cd0b6484c7">> `th-saving-tiddler` hook,以包含有关草稿条目的信息 (详见[[开发者相关文档|https://tiddlywiki.com/dev/#Hook%3A%20th-saving-tiddler]])
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/4723">> [[tm-rename-tiddler]] 小工具消息,控制是否发生重新链接
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/4741">> [[tm-import-tiddlers]] 小工具消息,覆写条目名称 $:/Import,且更好地控制导入条目是否自动打开
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/bd2cf5c46498222a32ebda92da3ae50bde33decb">> 内部的 `<$element>` 小工具,添加一个挂钩,使插件可以拦截 DOM 节点的创建
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4724">> 原始事件到 `tm-navigate` 事件
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/651fb777abd11c88e58b4bdfbced01d6db508852">> 密码提示,使其可以自定义
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/69c12618d963c711edd72a60427bd15ec4fa0e6e">> 同步器,使同步配接器可以自定义登录提示
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/a1b486436e9278078c524c6aa11f7f4de6cbc877">> [[tabs 宏|tabs Macro]],支持 `actions` 和 `explicitState` 属性
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/4906">> (和 <<.link-badge-here "https://github.com/Jermolene/TiddlyWiki5/pull/4907">>) 用于在 node.js 上同步和保存单一文件版本的筛选器,以基于其前缀排除多个故事清单和历史记录清单,及可用于导入过程的多个条目
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/5cc1600072f5aa50c8ff5f5d2e748d81a7067420">> 渲染后启动操作
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/f7f55e8eff8b172d8fd04f095781efa2420b1be6">> 支持 `tm-login` 小工具消息的用户名/密码参数
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/4c6de2271124fc3a4b01e4324a0d5e401500cca2">> 支持内容类型 ''image/jpg''(正确的类型为 ''image/jpeg'',但拼字错误很常见,所以现在大多数的浏览器都支持它)
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4908">> 支持重写保存模块
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4923">> 实用程序 CSS 类,以取代使用 ` ` 呈现视觉分隔
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4983">> 选项,配置菜单栏中用于[[目录|TableOfContents]]的标签
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/4971">> KeyboardWidget,如果没有要调用的操作,则不会拦截按键
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4975">> 按钮到编辑模板工具栏的编辑器高度,以及 ''application/javascript''、''application/json'' 和 ''application/x-tiddler-dictionary'' 类型条目的戳章工具
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/4985">> 内核中 [[tabs 宏|tabs Macro]]的所有实例都使用显式状态属性
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5000">> 支持 <kbd>meta</kbd> 键作为操作中的辅助建
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/c854e518faa2d2661b7b7278634b10607ab0a5f5">> $:/info/darkmode 的信息机制,反映浏览器的深色模式与浅色模式设置的支持
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/4200">> `story.js`,删除故事启动和导航器对 `wiki.js` 的依赖
! 插件改进
!! [[JSZip 插件|JSZip Plugin]]
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/6a0ff7db1807f45b73061ced82f5a85f1a529bbf">> [[JSZip 插件|JSZip Plugin]],可动态创建 Zip 文件的功能,从而方便地在浏览器中建构多文件静态网站
!! [[同意横幅插件|Consent Banner Plugin]]
<<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/4a84ed0018df7fd67000404bb5ef8a7ca50509c1">> 新的[[同意横幅插件|Consent Banner Plugin]]通过显示同意横幅,帮助使网站符合 "cookies 规范",例如 [[欧盟一般数据保护法规|https://gdpr.eu/cookies/]]。
它呈现一个横幅,邀请用户接受或拒绝 cookies,在本地存储中追踪他们的同意,以便横幅可以在后续访问中隐藏。
默认情况下,包含 <iframe>、<embed> 和 <object> 嵌入的内容将被阻止,除非用户同意接受 cookies。
同意状态可通过配置条目提供,以便根据是否已获得同意,可以构造行为不同的内容。例如,提供用于嵌入的 ~YouTube 视频的宏,除非用户已接受 cookies,否则自动使用 youtube-nocookie.com 该视频的变体网址。
请注意,使用此插件并不能保证符合任何特定法规。您需要了解特定于您情况的技术问题,如有必要,请寻求法律建议。
!! [[Freelinks 插件|Freelinks Plugin]]
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/1f354a972e0217e034d1f59d31577c1fd6b186f3">> (和 <<.link-badge-here "https://github.com/Jermolene/TiddlyWiki5/commit/c9692d7a508cfdb0446e67061201961dca64d8dd">>) 支持在匹配标题时忽略大小写
* <<.link-badge-fixed "修正|https://github.com/Jermolene/TiddlyWiki5/commit/05e6c1bf62cd51df6aa025d0ad07f7959cde6fa0">> 在 HTML `<a>` 元素中自动链接的错误
!! [[Twitter 插件|Twitter Plugin]]
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/3a20fb1e3a41a032574d227a8c770a11ae0a5d58">> 是否需要保存并重新加载维基的警示
!! [[Dynaview 插件|Dynaview Plugin]]
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/b0e40e86413c1769c8be8a84652b66ef6ac8b997">> 示例 (和<<.link-badge-here "https://github.com/Jermolene/TiddlyWiki5/commit/f7fe47914e19ba7198b7768ca832ee03c289a2bc">>)
* [[CodeMirror 插件|CodeMirror Plugin]]
** <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4662">> CodeMirror Sublime keymap 未定义 `e.toggleComment` 的问题
** <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/4950">> CodeMirror 插件至版本 5.58.3
!! [[Markdown 插件|Markdown Plugin]]
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4680">> Markdown 图片文件的编码
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/e01b354f7d9e137cb355f7090f5e68661a4ead41">> 空白和分行的问题
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4862">> ''tc-tiddlylink-external'' 类到外部链接
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4771">> 将 `rel="noopener noreferrer"` 加入至外部链接
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/5128">> [[CodeMirror 插件|CodeMirror Plugin]] 使用调色板颜色
!! [[Amazon 网页服务插件|Amazon Web Services Plugin]]
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/0338f0fee23d176a94de9009492d2e43a916fbfa">> 一个新的 ''aws-encodeuricomponent'' 筛选器,也编码单引号
!! ~BibTeX 插件
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/commit/f863acf8ac716dbf892f2d63efa0a130aadfec6a">> 底层的第三方 ~BibTeX 解析库到更高版本
!! Menubar 插件
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/4974">> 使侧栏的上边距会调整到菜单的高度
!! Dynannotate 插件
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/4394b8e723f78b3d2562a95155aeb91a3d6bbd5f">> 视图模板中的用法示例
!! External Attachments 插件
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/4549">> 外部附件插件中的相对路径的错误
!! [[Highlight 插件|Highlight Plugin]]
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/5128">> 使用调色板颜色
! 翻译改进
* 新的阿拉伯语(巴勒斯坦)翻译
* 改进加泰隆语翻译
* 改进华语翻译
* 改进荷兰语翻译
* 改进法语翻译
* 改进德语翻译
! 其他修正错误
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/fe8606759ebf1db50c57a2e779b086a6d7df2ae6">> 从 0 到 100CE 的日期解析
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/6a91dbfe2f6e52512d7f063b6d5e3742ff77126d">> 负数日期的处理 (见 [[日期字段|Date Fields]] 和 [[日期格式|DateFormat]])
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5126">> 使用 ~GitHub 保存模块,在上次保存后 60 秒内保存时,出现 "409 conflict" 的错误
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4987">> 与主从式配置同步的系统条目的行为。默认情况下,对系统条目的更改不会从服务器同步到用户端,从 v5.1.21 及更早版本还原行为。可以使用配置条目 $:/config/SyncSystemTiddlersFromServer,激活系统条目的双向同步
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4632">> 搜索下拉项目的悬停效果
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4584">> 将丢失的参数还原至同步配接器的 `saveTiddler()` 方法
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/678e25f510786fbc38f505f8b594f57f39e33a04">> [[makelibrary 命令|MakeLibraryCommand]]跳过非目录
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4601">> `$tw.wiki` 的错误使用
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4634">> 于 v5.1.22 中引入的动画同步图标的高 CPU 使用率的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/4591>> $:/config/NewJournal/Tags 显示在标签下拉清单中
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4658">> 在文本编辑器中点击时,未取消弹出窗口
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4676">> [[timeline 宏|timeline Macro]] 与不合法日期值的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4682">> 侧边栏中标签下拉清单的悬停颜色
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4683">> 标签丸图标的对齐
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4696">> 可拖放小工具崩溃的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4674">> 在 $:/Manager 中添加标签的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4686">> 编辑模板 "类型" 的下拉清单的位置
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4687">> 编辑样本字段下拉清单的位置
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4704">> (在 [[scrollable|ScrollableWidget]]小工具 <<link-badge-addendum "https://github.com/Jermolene/TiddlyWiki5/pull/4705">>) 的语法错误
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4780">> HTTP 的消息标头不区分大小写的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/a2796d89ab3dbf4a15b63b0f4623387fdc6acd5b">> HTTP 标头的 `Content-Type` 发送为 `Content-type` 的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4776">> [[entity|EntityWidget]] 小工具未正确刷新
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4774">> [[Markdown Plugin]] 遵守对齐指令
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/f74c49f393da3213abadaa52dd09940d708ea635">> 与外部 JS 模板的同步问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4813">> 不正确的星芒层 Unicode 文本的 base64 编码
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4770">> 当保存一个通过跟随条目链接创建的新条目时,出现服务器错误
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/4751">> 一个 `plugin-priority` 字段到 TiddlyWeb 插件,使语言插件可覆盖其语言字符串
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4853">> 加入一个空清单不会返回一个空清单的错误
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/59f233cd46616646fa8889f65aa9cc7d704d8c9a>"> 导出带有双引号名称的条目的错误
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/4900>> 同步插件条目的错误
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/4877891980f077c6c31e99cc6a9eb45b5d1230e1">> 没有图标的情况下,条目标题位置的错误
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/3153c588ecddfdc97cc8289720d36b1fb15ef236">> 在升级向导中自动保存
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4938">> 在单档维基中条目 `$:/temp` 的保存
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4839">> `sortan` 筛选器操作符用于日期字段时的错误
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/4947">> 包含 `#` 字符的位置散列的错误
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5055">> 保存到 ~GitHub 的默认分支到 ''main''
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/7327a3fb92fa2ae17d7264c66ab0409d43b18fdc">> 当插件被删除或修改时,影子条目未刷新
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5129">> `tc-dirty` 类,未显示在外部窗口中
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5148">> `static.tiddler.html` 模板,使渲染条目全宽
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* <<contributor adithya-badidey>>
* <<contributor Arlen22>>
* <<contributor bimlas>>
* <<contributor BramChen>>
* <<contributor BurningTreeC>>
* <<contributor danielo515>>
* <<contributor default-kramer>>
* <<contributor ento>>
* <<contributor favadi>>
* <<contributor fkohrt>>
* <<contributor flibbles>>
* <<contributor gera2ld>>
* <<contributor ibnishak>>
* <<contributor idotobi>>
* <<contributor jdangerx>>
* <<contributor jjduhamel>>
* <<contributor joshuafontany>>
* <<contributor kookma>>
* <<contributor Kamal-Habash>>
* <<contributor Marxsal>>
* <<contributor mocsa>>
* <<contributor NicolasPetton>>
* <<contributor OmbraDiFenice>>
* <<contributor passuf>>
* <<contributor pmario>>
* <<contributor rmunn>>
* <<contributor SmilyOrg>>
* <<contributor saqimtiaz>>
* <<contributor twMat>>
* <<contributor xcazin>>
\define contributor(username)
<a href="https://github.com/$username$" style="text-decoration:none;font-size:24px;" class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer"><img src="https://github.com/$username$.png?size=32" width="32" height="32"/> @<$text text=<<__username__>>/></a>
\end
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.23...master]]//
! 性能改进
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/5380">> (和[[此处|https://github.com/Jermolene/TiddlyWiki5/pull/5488]]) 链接清单实现的效率
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/5362">> [[all Operator]] 使用新的链接清单实现
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/5369">> [[links Operator]] 使用新的链接清单实现
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5383">> 在单一文件维基内 Tiddler Divs 中的双引号的不必要的脱逸编码 (节省 empty.html 约 10% 的大小)
! 可用性改进
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/a360adbba924d222c5b55709133c18890c04398d">> 故事河为空时,拖放区的大小
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5326">> "删除标签"按钮的填充颜色
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5370">> 页面标题,仅于存在网站副标题时,使用分离的 em-dash
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5397">> $:/PaletteManager 中毁损的 aria-label
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/5451">> 使用与用于小工具属性相同的解析器的宏调用
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/89546b3357b0696a7047e6915bd6cd137b589de6">> 控制类型为 `text/html` 的条目的沙箱的隐藏设置
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/commit/caec6bc3fea9155eb2b0aae64d577c565dd7b088">> SVG 优化脚本
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/c325380231a8c592a6e51d4498c1e6c3a241b539">> plus/minus SVG 图标: <<.icon $:/core/images/plus-button>> 和 <<.icon $:/core/images/minus-button>>
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5294">> 支持[[动态工具栏按钮|How to create dynamic editor toolbar buttons]]
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5612">> [[average Operator]]、[[median Operator]]、[[variance Operator]] 和 [[standard-deviation Operator]] 用于计算数字清单的算术平均值
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/cf56a17f28f1e44dcb62c5e161be4ac29e27c3f2">> unusedtitle 宏使用前置码参数
! 可编程性改进
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/9eda02868f21e9dd1733ffe26352bd7ac96285b4">> 新的 MessageCatcherWidget
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/d25e540dd2f0decf61c52fdc665a28a5dfeda93f">> 支持 `image/vnd.microsoft.icon` 内容类型
! 小工具改进
* <<.link-badge-modified "https://github.com/Jermolene/TiddlyWiki5/commit/b9647b2c48152dac069a1099a0822b32375a66cf">> [[FieldManglerWidget]] 确保其不会删除其捕获的事件
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/5597">> [[DropzoneWidget]] 可选地在发送 `tm-import-tiddlers` 消息后,调用操作,并指定可选的 `contentTypesFilter`,该选项决定哪些内容类型被拖放区接受。
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/5611">> [[ListWidget]] 具有 `index` 属性 (和 [[此处|https://github.com/Jermolene/TiddlyWiki5/commit/4a99e0cc7d4a6b9e7071c0b2a9a0f63c3c7d2492]])
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5635">> [[SelectWidget]] 刷新
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5252">> 支持后缀至筛选器 run 前置码
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5653">> :sort 筛选器 run 前置码
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5644">> [[ActionListopsWidget]] 错误,通过避免将原始清单值的筛选器表达式拼接在一起
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/07caa16e8714afe9a64eb202375e4a2f95da1508">> [[DropzoneWidget]] 也使用指定的反串行化字符串或剪贴到拖放区
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/44df6fe52f79bee88357afb4fc3d6f4800aa6dde">> 小工具无法用于筛选器操作符的问题
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/3f986861538a3cc5c3c6da578b45d0d9138a6b2b">> [[ActionPopupWidget]] 创建必须手动清除的浮动弹出窗口
! 主从改进
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/e96a54c7531a2d9e07745e27d2015d8d7d09588f">> 当缺少 'etag' header 时,在主从式配置中崩溃运行
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5423">> 使用延迟加载图像时的空白网站图标
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/4461">> 网页服务器的自定义路径首码和基本身份验证的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/5366">> 当类型字段被赋予值于新条目的创建时,在 Node.js 使用 ActionSetFieldWidget 会崩溃的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5329">> 条目名称已以附文件名结尾的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5465">> filesystem 插件的几个一致性问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/5483">> 维基文件夹外 $:/config/OriginalTiddlerPaths 的编码问题
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/5628">> ~TiddlySpot 保存模块设置格式
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5638">> PUT 保存模块的 401 和 403 错误消息
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/d8ac00a10856b1b64311b8e0496344d5b0c1b987">> 崩溃,如果浏览器不支持服务器发送事件
! 插件改进
!! [[XLSX Utilities 插件|[XLSX Utilities Plugin]]
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/5400">>使用 XLSX Utils 插件崩溃
!! [[KaTeX 插件|KaTeX Plugin]]
* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/commit/f2aba29d94cddcff6d7c188c4aa0b668995d8002">> 至 KaTeX v0.12.0
!! [[Freelinks 插件|Freelinks Plugin]]
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/0ed32fded996826a59832d7a7555bb16c4a57864">> Freelinks 插件用筛选器,以决定哪些条目可成为自由链接的目标
!! [[Menubar 插件|Menubar Plugin]]
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/discussions/5533">> Menu 插件支持可选的 ''dropdown-position'' 字段
!! [[BibTeX 插件|BibTeX Plugin]]
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/5581">> BibTeX 插件更明智地报告错误
* <<.link-badge-modified "https://github.com/Jermolene/TiddlyWiki5/commit/953fb9f237ad78e409c03d4b29b9854d8abf6cdf">> BibTex 插件,强制字段名称为小写
! 开发人员体验改进
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/5279">> 支持[[服务器发送的事件|https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events]]
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/5382">> 小工具子分类机制,可与在其构造函数中添加事件侦听器的小工具运作
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/5377">> Jasmine 测试套件的输出
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/9f9ce6595b08032a602981f82940ca113cff8211">> 带有子分类机制的维基文本解析器
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/ef76349c37662e9706acfffc2c2edb51a920183d">> 支持 ''utils-browser'' 模块
! 翻译改进
* <<.link-badge-improved>> 中文翻译
! 其他错误修复
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5376">> 在某些情况下,[[lookup 操作符|lookup Operator]] 返回 "undefined" 的问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/5396">> 具有未结束的维基文本注释的崩溃问题
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5453">> 条目信息区的内容渗色于关闭动画
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5452">> inline/block 小工具解析故障
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5401">> 当解析筛选器时,失控的正则表达式
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5440">> 标签 wrapper 外,使用标签药丸的右边距
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/5455">> 上传保存模块,选择性的工作,而无需用户名或密码
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/5e4430dbf9ff66d9a18fbdf3005abcd716efc07d">> RadioWidget 选择性地刷新,并正确使用 ''checked'' 属性
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5542">> `wiki.search()` 方法的 "invert" 选项
* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/e157d16b724172f752da0ff714847e0c0ca9664d">> ''data-tag-title'' 属性至标签丸
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/7b1a0c6e6a8bd2d3badf8766af0cd3f5f7ac5ec8">> ES5 兼容性问题
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/commit/a38dc1730010c6a2b6a011aff4818bbc67c04055">> RenderCommand 允许传递多个变量
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/226df2ad7d2978d3d7400d94767a0503e495cf98">> 导出以双引号开始和结束的条目名称
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/commit/d56e8764a1f02a214df5da1cc95191be2da2491b">> 控制弹出窗口时,按钮小工具的可访问性
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/d6ea369f5ef9d3092a360a4286a99902df37782b">> EditTextWidget 为缺少的字段使用默认文本
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/5552">> css-escape-polyfill 在 Node.js 下运作
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* <<contributor Arlen22>>
* <<contributor BlueGreenMagick>>
* <<contributor BramChen>>
* <<contributor BurningTreeC>>
* <<contributor cdruan>>
* <<contributor clutterstack>>
* <<contributor CodaCodr>>
* <<contributor dixonge>>
* <<contributor donmor>>
* <<contributor FlashSystems>>
* <<contributor flibbles>>
* <<contributor hoelzro>>
* <<contributor jeremyredhead>>
* <<contributor joebordes>>
* <<contributor joshuafontany>>
* <<contributor kookma>>
* <<contributor laomaiweng>>
* <<contributor leehawk787>>
* <<contributor morosanuae>>
* <<contributor neumark>>
* <<contributor NicolasPetton>>
* <<contributor OdinJorna>>
* <<contributor pmario>>
* <<contributor saqimtiaz>>
* <<contributor simonbaird>>
* <<contributor slaymaker1907>>
* <<contributor twMat>>
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.2...v5.1.3]]//
!! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/e872f17842809e33eae177980e9ea0650b6a4c03]] "添加日志" 按钮;请参阅 [[Creating journal tiddlers]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/70984aa39f8a4061162d4e404bfd158e515c7e6e]] "添加子条目" 按钮;请参阅 [[Creating and editing tiddlers]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/00cdd04edd49c2bf0e461071c0c7c50f8aab4e42]] "添加子日志" 按钮;请参阅 [[Creating journal tiddlers]]
* [[制作|https://github.com/Jermolene/TiddlyWiki5/commit/c6951ee912d1f2717a8c208cbb920e54edf9e5d9]] 日期格式字符串可被翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/tree/master/languages/ru-RU]] 俄语翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/ef1d5310918dae088ce9361c1682ce0f99cf568a]] 清除密码时确认
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b7bbcfa05659808c1e51a4f2f5f1d6afbc2ed3a1]] 设置密码时,额外的提示
* [[放大|https://github.com/Jermolene/TiddlyWiki5/commit/dc9981322aeb508d5ebac0b691b0d703f8c1995e]] 清除搜索按钮
* [[升级|https://github.com/Jermolene/TiddlyWiki5/commit/564457de1c991df15263040d2d5526fa8ae879bb]] 至 [[KaTeX v0.1.1|https://github.com/Khan/KaTeX/releases/tag/v0.1.1]]
!! 可编程性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/2ffe53f1916e4b746cc6d7e74e8f4ac75c72e38a]] 处理[[音频|Audio]]内容的音频"解析器"
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/0dcf54c3b59ed04645928f0ec4ced647e5a0da7f]] 对 ActionWidgets 的支持
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/65504d5d41e45326ab1b1b6c0c21eea4c9772797]] <<.olink addprefix>> 与 <<.olink addsuffix>>
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/0c8e5380778303cdd3308bed4a15290214841f8b]] 支持自订密码提示
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/c26bd4c5a872f56c47e9f5cfc3fada468c53ddde]] <<.mlink list-links>> 宏使其显示 <<.field caption>> 字段,如果存在
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/12e26009eef5e29140ba1a880ff033428d673630]] ImageWidget 允许指定百分比宽度和高度
!! 修复错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/cc576b052e2b05fd93fcb4f3eb8d9ee5278abf3e]] <<.olink each>> 可用于佚失条目
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/5dd6ebff05a3380db2901294b2cfc89c1a0e71bf]] 于 zoomin 模式下且侧边栏隐藏时条目宽度的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/09b6540998fec6bf1fb14842be8e8c53dbd5c46a]] 由此 `tm-home` 消息并没有导航到条目,在 zoomin 查看模式造成的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/3ca8d7b6cca46ffa424bcf9bdc134da464fc84f4]] 于 Firefox 跳转工具列图标的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/f85b07e70b71d0622a9459e4b04e2027540abda8]] 未设标签的标题颜色不正确的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/b3dcd7d625ec83701ef3a77f3fb8101af57c154f]] "Sticky Titles" 布景主题的条目名称背景颜色的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/5211f9c40c874a167174e8c0d439db34189d3329]] <<.mlink timeline>> 宏的子筛选器参数的问题
* [[排除|https://groups.google.com/d/topic/tiddlywiki/YPACpXhH9PY/discussion]] 从搜索结果搜索字符串条目
!! Node.js 更改
//这些更动只与在 Node.js 下使用 TiddlyWiki 的人有关//
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/63c174d7ed56284e80ad6cd6ae966b81f9181cc9]] ~Katex 插件,使其能运作于 Node.js 生成静态的 HTML
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/49dc5694a391a391264a4473e4f4422e2472a3b3]] "includeWikis" 以合并建构目标
* [[重构|https://github.com/Jermolene/TiddlyWiki5/issues/969]] tiddlywiki.com 的建构脚本至分离的代码库 https://github.com/Jermolene/build.jermolene.github.io
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/744245ea3249446fd15f504190efb1d828935d01]] 启动核心,如果在命令行上指定不存在的维基文件夹时,会引发错误
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@andrey013|https://github.com/andrey013]]
* [[@BramChen|https://github.com/BramChen]]
* [[@buggyj|https://github.com/buggyj]]
* [[@Eucaly|https://github.com/Eucaly]]
* [[@fghhfg|https://github.com/fghhfg]]
* [[@Marxsal|https://github.com/Marxsal]]
* [[@pmario|https://github.com/pmario]]
* [[@simonbaird|https://github.com/simonbaird]]
* [[@TheDiveO|https://github.com/TheDiveO]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.3...v5.1.4]]//
这是一个文档改进和 [[Release 5.1.3]] 的一些重要的错误修复的小改版。
!! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/6681a8e1f2fd3f39d92a1480b5b573a6c831515d]] 高端搜索的工具列按钮
* [[更改|https://github.com/Jermolene/TiddlyWiki5/commit/53d834c86be2f97599a9486c0eae4777c51d9093]] 拖动行为,这样可以将条目名称拖到要插入此条目名称的编辑方块中,让创建链接更容易些。(此更动不会影响 TiddlyWiki 窗口之间拖动条目链接的行为)
!! 可编程性改进
* [[添加//|https://github.com/Jermolene/TiddlyWiki5/commit/26e50b81e579b7f2d190ca3662cadcf82764c8a7]] 正文文本大小和行高度的额外主题调整
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/1b620387dda2d16bf387a89071188762455890c4]] ViewWidget 使其可用于附属条目
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/ddc74955427f8a7291ee964c42a771a112007789]] 搜索计数的问题
!! Node.js 更改
//这些更动只与在 Node.js 下使用 TiddlyWiki 的人有关//
* 修正佚失维基文件夹警示的问题,经由[[移除|https://github.com/Jermolene/TiddlyWiki5/commit/9fedf3865778fd3aa50c2f049c2b81061c8cd778]] 与 [[重新实现|https://github.com/Jermolene/TiddlyWiki5/commit/e62e38d66c6eb447bbd8f16b5beec0fe0276ea0d]] 自 [[Release 5.1.3]] 之后的修正
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/5d600ce31b1d1162529ae8043bb342e2165c4b13]] 在 Node.js 下的彩色的警示和错误
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@danielo515|https://github.com/danielo515]]
* [[@gernert|https://github.com/gernert]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.4...v5.1.5]]//
!! 翻译改进
* 添加翻译专用版,使其更易于创建和维护 TiddlyWiki 的翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/615425cf0634233d27f4f1ea430589b2a618feb6]] 改进的日语翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/8ba1a9b72ac5a4f50a4f670a24393d564c137c0c]] 丹麦文翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/14a64ef3effc1e4cf1098b35af6d6cb864d77ac2]] 希腊文翻译
!! 可用性改进
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/09a3f94d79fc6eacbfd46c86594748e996191eb2]] 提示提升亲和性
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/6fc5c70ace43219710983f6d9640f4b01d620908]] 导出按钮至条目工具列、页面控制与[[高端搜索|$:/AdvancedSearch]]的"筛选"页签
* 改善[[标签管理|$:/TagManager]]的布局
* [[简化|https://github.com/Jermolene/TiddlyWiki5/commit/0a986ccd995266bf3a47182fa584d79f9dd3e153]] 缺省的条目工具列按钮
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/63b00fd0f80ce0c9917e233287d4a0138e8c385f]] 高端搜索按钮至侧边栏的搜索结果
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/4d061d0fee959fdc5ab470dc8f8379bedfa946d9]] 由匹配顶端清单标题的搜索结果
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/da1f9f7d2233eb2aacc027bc1fc1053fa8b7bc2e]] 在编辑范本中指定新的字段值的输入框
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/0bb8e08edca61f415aa084327b6751c278e45108]] 标签丸呈现,得以动态选择前景颜色与背景颜色的最大对比度
* 改进许多[[核心图标|ImageGallery Example]]
* [[移除|https://github.com/Jermolene/TiddlyWiki5/commit/1dfa6f369bddd8dedba2e47dc4707eba28ccf4e1]] (及[[此处|https://github.com/Jermolene/TiddlyWiki5/commit/145713e7668a41320981ed87b448542cd30d13dc]]、[[此处|https://github.com/Jermolene/TiddlyWiki5/commit/3035badf144abb85f5d42b2b1d395cf0f65fb03e]]还有[[此处|https://github.com/Jermolene/TiddlyWiki5/commit/e69e2c1c91002c296e1789532ca74286fae8d5a4]]) 无需确认放弃或删除未修改的条目
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/a5c7089bcfe3d2439eb082535527a7cc767891cc]] 微妙的圆角到条目和页签
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/6f0d581d720e611fade3b3f346ad0409ef5e291b]] 新创建的条目名称的自动聚焦
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/81481588e07ed3cb1e378a6c6f21d26dcbaa8345]] 在 [[$:/ControlPanel]] 上的条目计数的高端搜索链接
!! 可编程性改进
* 引进新的 ActionSetFieldWidget、ActionDeleteFieldWidget 和 ActionDeleteTiddlerWidget 用于操作条目的字段和值
* [[增强|https://github.com/Jermolene/TiddlyWiki5/commit/c7971d3da3bbef4bbc81d4462ee93590adc248f8]] [[WidgetMessage: tm-new-tiddler]] 允许用附加字段指定样板
* [[增强|https://github.com/Jermolene/TiddlyWiki5/commit/4a172125768e3b33c30e725e8550454a9d26c5c4]] EditTextWidget 允许更好的 textarea 编辑器大小的控制
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/13726ef73157d9e9d65ae4027d9c32aaa7cdcc90]] 于 [[$:/AdvancedSearch]] 里的最近修改的系统条目的新预制筛选器
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/c20c935faabbb63f679bc4720b52162c56b6af64]] 新的影片的系统图片:[[$:/core/images/video]]
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/c13cf94413c94ee56bebc60fab2d9231d1824d88]] 可自订的可视化的搜索结果 - 参阅[[自订搜索|Customising search results]]
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/a3a50dbf6d96e7441e5e8ec183e40134bc4eb618]] <<.mlink timeline>> 宏可以使用不同的日期字段
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/8260d000be1cf1caf35a557f6cd54a0fb8ccf4f0]] <<.olink search>> 允许指定字段
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/73491f14dd63612d527632210d2c3873eb81188f]] 高亮插件显示定位字符为空白字符
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/91a7c397911726e391ca368f96b50fbe1687d56a]] 模态的处理,以允许变量传递给模态 (参阅 [[WidgetMessage: tm-modal]])
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/853f5fd06402b16e271e8f119ef380de485aeff2]] 简单的记录来帮助追踪放置/粘贴问题 (参阅 https://tiddlywiki.com/dev/#ImportLogging)
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/b520efdeb83f6ac7536a69cf5af2bab3f94cf77f]] [[WidgetMessage: tm-download-file]] 与 [[WidgetMessage: tm-save-wiki]] 为呈现允许指定变量
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/f5055c0205d24102a36b9cf3a9dd9306e148a1f0]] [[分页式目录示例|Example Table of Contents: Tabbed Internal]]
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/79e428757b5562bd4a925b9b0428ea4ba70ad05a]] RevealWidget 使其可以使用而无需指定状态条目
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/90caf5bf42523cfb6cd603b979aadb719ddcede4]] "hook" 机制,以便插件可以修改缺省的条目清单
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b882a0dff12dc2660426de53e64d8c018f3a9d84]] 支持嵌套式的快显窗口
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/90096cbd367a7a685fb5dc5b2cbaa69a00d8199f]] CodeMirror 编辑器和佚失条目的问题
* [[排除|https://github.com/Jermolene/TiddlyWiki5/commit/5093cdc86047209f23b9ead5ee0f216d0414e4f2]] 草稿条目,从[[目录宏|Table-of-Contents Macros]]
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/5599f9f9338a5f96080143b2192214a78b961509]] HTML 条目的编码问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/835e3a945244dd8a07f4c7fd570eb890e9fdcc2c]] sticky titles 被垂直标签覆盖的问题
* [[移除|https://github.com/Jermolene/TiddlyWiki5/commit/d1bbe7253c135ceed138fd02c82b0f861d5dda6b]] 自动调整文本大小时的闪烁
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/4bf6fe7fe9416f4e304036302ab5727148ae5222]] JSON 解串器,使所有字段皆可导入
!! Node.js 更改
//这些更动只与在 Node.js 下使用 TiddlyWiki 的人有关//
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/8e685e5150e636aed6655c6caa09c7b6cffdcea2]] ''includeWikis'' 的 TiddlyWikiFolders 机制,允许唯读的引入维基
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/cea963420ca2800b86989e29d42d06ccb7ea2a00]] Node.js 下的错误处理
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/17a594a97ad5655142c834dfd5fa68855a61d201]] UnpackPluginCommand
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/04d26e6fae20671a6d455e113f7b0afedabc7122]] EditionsCommand 以列出可用的版本
!! 影响插件的作者的更动
* [[停用|https://github.com/Jermolene/TiddlyWiki5/commit/f7a2849d27bb082e4bbf6b056a800a1edb30f510]] 影子条目的维基变更事件
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/d93c19daaa126f0938048009a83796cb52690541]] 小工具消息的结构有一个 hashmap 参数
* 支持嵌套 popups,其设计的方法上要有所改变,这会影响 popups 触发与 EditTextWidget 的 focusPopup 属性:现在必需给予小工具类别 `tc-popup-handle`。
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@andrey013|https://github.com/andrey013]]
* Birthe C
* [[@Braincoke|https://github.com/Braincoke]]
* [[@BramChen|https://github.com/BramChen]]
* [[@danielo515|https://github.com/danielo515]]
* [[@erwanm|https://github.com/erwanm]]
* [[@Evolena|https://github.com/Evolena]]
* [[@giffmex|https://github.com/giffmex]]
* [[@inmysocks|https://github.com/inmysocks]]
* Makoto Hirohashi
* [[@pmario|https://github.com/pmario]]
* [[@Skeeve|https://github.com/Skeeve]]
* [[@tobibeer|https://github.com/tobibeer]]
* [[@welford|https://github.com/welford]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.5...v5.1.6]]//
!! 翻译改进
* 添加荷兰文翻译
* 更新的丹麦文和日语翻译
!! 可编程性改进
* [[允许|https://github.com/Jermolene/TiddlyWiki5/commit/b29973312d7c16292cabb493e5914668f7c3f127]] 按钮的样式看起来像内部链接
* [[停用|https://github.com/Jermolene/TiddlyWiki5/commit/5b38c21a417d2e5e2b85aed8010c88af32420e24]] 于[[目录宏|Table-of-Contents Macros]]的嵌入 ''caption'' 字段里的链接在
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b220c19fb7b789eb6d00c9d1a71414676d87130e]] 页签式[[目录宏|Table-of-Contents Macros]]的范本支持
* [[允许|https://github.com/Jermolene/TiddlyWiki5/commit/31b5eb1578640fabe8712f0cd4edd49708bc4493]] 影子条目出现在[[目录宏|Table-of-Contents Macros]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/5154a25ab95f0cc08eb079a624be4fd3353e6dbd]] 提示至 BrowseWidget
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/42dba113ccdb18d7e76ac7a773c7dca532207007]] 由 <<.olink has>> 和 <<.olink field>> 的佚失条目处理
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/182c2428ca7b38d00d36d2d6650e761026470e63]] 使用不正确的文件名下载保存问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/d031a93c6d607d5b10d025149608f10977181e26]] 处理日期格式范本的[[问题|https://github.com/Jermolene/TiddlyWiki5/issues/1010]]
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/a0c13a0856cb6b4a2592acdd46975e44eb7c53a8]] 有限的回应设计未顾及 ''storytop'' 主题调整的问题
!! Node.js 更改
//这些更动只与在 Node.js 下使用 TiddlyWiki 的人有关//
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/bb74be7ac1a24eeaee10a3cb3d3633e3aa318632]] "所有条目" 的静态 HTML 的导出问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/51db48acc901d8fb298d9b0f7f10b47ffe90df05]] InitCommand 对于空文件夹的不正确检查
!! 影响插件作者的更动
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/1e47a62c2af392f30a492da732b33b89f23a2e4c]] `$tw.utils.each` 使循环可以中断
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@anavarre|https://github.com/anavarre]]
* [[@Drakor|https://github.com/Drakor]]
* [[@dullroar|https://github.com/dullroar]]
* [[@erwanm|https://github.com/erwanm]]
* [[@malgam|https://github.com/malgam]]
* [[@nameanyone|https://github.com/nameanyone]]
* [[@pekopeko1|https://github.com/pekopeko1]]
* [[@Spangenhelm|https://github.com/Spangenhelm]]
* [[@tobibeer|https://github.com/tobibeer]]
* [[@xcazin|https://github.com/xcazin]]
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.6...v5.1.7]]//
此为 [[Release 5.1.6]] 之后更动的一个修补版本:
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/a31aa25d0c00187ff829d74108f018e44b5cb3c5]] 在 GettingStarted 中的错字
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.7...v5.1.8]]//
此版包括许多对于 TiddlyWiki 文档的改进。非常感谢所有协助的人,但尤其是对于令我们惊讶的新参与者 Astrid Elocson。
!! 翻译改进
* 改善法语、丹麦文、汉语和日语翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/cb8caf6a01aeeac480bf28661888961657b0dbd8]] 捷克文翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/d6918d737f5d1b663346ad9a35421a5ae0ffb9a7]] [[国际语|https://en.wikipedia.org/wiki/Interlingua]]翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/6721a5eb1b77935226ccc8559008af3a0a05d0cb]] 葡萄牙文翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b845751d3c549366adb2f6e5c58b0114fa95ba30]] 旁遮普文和印度文翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/49a9a2c44ca3a71fff3062709f06940aaca4a574]] 斯洛伐克文翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/5d947ed582fb9d68c01d82a334ab75498a8724ef]] 西班牙文翻译
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/2c367c5476da70ce9c2b37838febcdf437b9aca4]] 本地化加密提示
!! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/987bfcfd5b49b992e5fd45f3428497f6f55cae53]] [[设置页面背景图像|Setting a page background image]]的用户界面
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/3df341621d30b205775288e324cef137c48e9f6e]] 在启动时的不必要卷动的问题
* [[升级|https://github.com/Jermolene/TiddlyWiki5/commit/ae001a19e5b3e43cf5388fd4e8d99788085649fe]] [[KaTeX Plugin]] 使用 [[KaTeX v0.2.0|https://github.com/Khan/KaTeX/releases/tag/v0.2.0]],具有更好的符号支持
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/70e419824fab107aab58f87780dbb5a1de70c248]] [[说明插件|Help Plugin]]提供浮动的说明皮肤
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/8643278a452d1a300cec8d3425c1b18699a17dca]] 支持线插件程序库
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/ea6e60e66983ee1184f09c5796ef6c8bceae703a]] 在启动时,自动聚焦于搜索框中
* [[介绍|https://github.com/Jermolene/TiddlyWiki5/commit/4f3cb8b9aebfc4f65f40c96ef99730887d746b41]] Astrid Elocson 的[[铁道图插件|Railroad Plugin]] (可于新的[[筛选器语法|Filter Syntax]]文档看到它)
* [[迁移|https://github.com/Jermolene/TiddlyWiki5/commit/230066eeae9ace8336612e02c78f8cdaa3f717e4]] "Sticky Titles" 布景主题的功能于一个可选的 "Vanilla"/"Snow White" 布景主题调整。这意味着支持 `position: sticky` 的浏览器 (例如: Safari 与 Firefox) 在卷动期间,条目名称将固定于窗口顶端。
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/8cb7090c40489c81e8c5dfb8cbbdee2c60998c3e]] 图标至 [[$:/AdvancedSearch]]、[[$:/ControlPanel]] 和 [[$:/TagManager]]
* [[改变|https://github.com/Jermolene/TiddlyWiki5/commit/21b6ce71ffc617f61d4da0065a3ee695be535e2a]] 条目的 "save" 按钮的用语为 "confirm"
* [[添加|https://github.com/Jermolene/TiddlyWiki5/issues/1103]] 自动链接系统条目,例如 $:/ControlPanel
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/9c7936413a8c50817044eb409661a575f7f97563]] 新的标签下拉式功能表到只列出匹配的条目名称
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/aae56f20af35e7be6f3839a8c727e3f43174efe9]] 通知用户的警示横幅,当修改插件后需要刷新页面
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/0bd2ec50e1514ef247182816f9f9e421f52f67bb]] 初步的 "stacked" 查看模式
* [[改变|https://github.com/Jermolene/TiddlyWiki5/commit/421ac16389cf07e8c00611ef5a858da0b89f7584]] 默认解析模态的页眉和页脚为 inline 模式 (避免不必要的 `<p>` 标记)
!! 可编程性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/d340277cb219ffebd212fbf409e8ea804121d105]] [[resolvepath 宏|resolvepath Macro]]
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/718ce3e4aa04f7af5e9310f90d3415c0d82bee6f]] `class` 属性至 CheckboxWidget
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/bb10e2b02900ece4701c44c3a7e7c03304e813b7]] 当主要故事河为空时,显示特殊消息的支持
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/6e0c7d90221771ae384d620984f08a2090c500dc]] 在 Mac OS X 下的字体渲染
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/a2493f80a973b24ad3d3affda945c437b98c2d2e]] 对嵌入 ZIP 档的支持
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/1808b1597e5a61379e4e5381d6d78bb73fa3a523]] 支持 RevealWidget 带有自定义的元素
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/bd6472c1d10bc86eaf1b317c35b86f84086ee3c8]] ''style'' attribute to RevealWidget
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/commit/0b4ed3c72de16148ffe62abf1c5c06f2d2ce47f1]] text inputs to use palette colours
* 几个新的[[内核图标|ImageGallery Example]]: <span style="fill:#aaa;"><span title="$:/core/images/github">{{$:/core/images/github}}</span> <span title="$:/core/images/help">{{$:/core/images/help}}</span> <span title="$:/core/images/mail">{{$:/core/images/mail}}</span> <span title="$:/core/images/tip">{{$:/core/images/tip}}</span> <span title="$:/core/images/warning">{{$:/core/images/warning}}</span> <span title="$:/core/images/twitter">{{$:/core/images/twitter}}</span> <span title="$:/core/images/video">{{$:/core/images/video}}</span> <span title="$:/core/images/up-arrow">{{$:/core/images/up-arrow}}</span> <span title="$:/core/images/left-arrow">{{$:/core/images/left-arrow}}</span></span>
!! 修正错误
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/pull/1520]] the [[sameday Operator]] and [[eachday Operator]] to accept TW5 date strings
* [[修正|https://github.com/Jermolene/TiddlyWiki5/pull/1249]] 插件的版本编号兼容性检查
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/1adfe20508116da0ee4b5c9e72ea9742f24b60c9]] 重复取消草稿的问题
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/050b643948e24d1d93a83766a23a0d693616d01e]] 生成 `<iframe>` 元素的沙箱
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/b166632bbb76a7a033cd8fc3af14e5dadddfc631]] 在 Firefox 上的模态背景的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/1b87d9134bd0b45be671eebfdcac1d7acadcecf4]] 在其原始的窗口内非预期拖动条目的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/c9ab873ba393753647f2b0b3b3aa1a8bcf6b1c28]] 拖动某些插件与 Safari 的问题
* [[部分修正|https://github.com/Jermolene/TiddlyWiki5/commit/2f8837a44508687223c4d78e718cf82a9b35c97b]] SVG 图标右侧和底部裁切了 1 个像素的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/f3ed9bf7e4936dd9bbe3e237673828bbe89326f9]] 一个新的字段值中的双引号的问题
!! Node.js 更改
//这些更动只与在 Node.js 下使用 TiddlyWiki 的人有关//
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/cc85368fd48f1e5878018a4e00b6c17d436e67a9]] [[Highlight Plugin]] 运作于 Node.js 生成的静态文件
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/c296f14210545374124df5d4ae9ffb402ed73561]] 不区分大小写的文件系统的问题(如 Windows)
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/1354]] 手机的中继数据到静态页面模板
* [[添加|https://github.com/Jermolene/TiddlyWiki5/pull/1352]] "noclean" 参数到 RenderTiddlersCommand
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/b768dc332b2d5d7ac1f731953cafb5fd1b30dad9]] <<.olink editions>> 与 <<.olink editiondescription>> 筛选器运算符,枚举可用的版本
!! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@aelocson|https://github.com/aelocson]]
* [[@andreasabeck|https://github.com/andreasabeck]]
* [[@alexhough|https://github.com/alexhough]]
* [[@Arlen22|https://github.com/Arlen22]]
* [[@BramChen|https://github.com/BramChen]]
* [[@danielo515|https://github.com/danielo515]]
* [[@dpdannemiller|https://github.com/dpdannemiller]]
* [[@Drakor|https://github.com/Drakor]]
* [[@evgeniy-gryaznov|https://github.com/evgeniy-gryaznov]]
* [[@felixhayashi|https://github.com/felixhayashi]]
* [[@gernert|https://github.com/gernert]]
* [[@Infurnoape|https://github.com/Infurnoape]]
* [[@Jc-L|https://github.com/Jc-L]]
* [[@le-pako|https://github.com/le-pako]]
* [[@Mathobal|https://github.com/Mathobal]]
* [[@ng110|https://github.com/ng110]]
* [[@pmario|https://github.com/pmario]]
* [[@reflectionist|https://github.com/reflectionist]]
* [[@roma0104|https://github.com/roma0104]]
* [[@simonbaird|https://github.com/simonbaird]]
* [[@Spangenhelm|https://github.com/Spangenhelm]]
* [[@sukima|https://github.com/sukima]]
* [[@tobibeer|https://github.com/tobibeer]]
* [[@twMat|https://github.com/twMat]]
* [[@welford|https://github.com/welford]]
* [[@xcazin|https://github.com/xcazin]]
\define custom-colour-picker(tiddler,colour)
<$edit-text tiddler="""$tiddler$""" index="""$colour$""" type="color" tag="input"/>
\end
//[[此版的更新历史详见 GitHub|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.8...v5.1.9]]//
! 主要改进
!! 新的 "Powered by ~TiddlyWiki" 插件
一个实验性的插件添加一个简单的 <a href="https://tiddlywiki.com" target="_blank">[img width="160px" [$:/plugins/tiddlywiki/powered-by-tiddlywiki/powered-by-tiddlywiki.svg]]</a> 横幅到您的网站。
!! 新的 "Fluid story, fixed sidebar" 模式
现在可编排主窗口布局,以便侧栏为固定的宽度,且故事河展开以填充剩余的空间。
欲启用该功能,请至[[控制台|$:/ControlPanel]]的''视觉外观''的''Theme Tweeks''页签,然后使用以下选项:
* Sidebar layout:
** ''Fixed story, fluid sidebar'' (缺省) - 故事河为固定的宽度,且侧边栏填充剩余的空间。
** ''Fluid story, fixed sidebar'' - 侧栏为固定的宽度,且故事河展开以填充剩余的空间。
* Sidebar width:
** 侧边栏的宽度可指定以像素为单位(例如 ''350px'')、百分比(例如 ''25%'') 或其他 [[CSS 单位|https://developer.mozilla.org/en/docs/Web/CSS/length]]。
!! 工具列按钮样式的设置
在[[控制台|$:/ControlPanel]]的''设置''页签中的新设置,可从以下选项中选择工具列按钮样式:
* <$button set="$:/config/Toolbar/ButtonClass" setTo="tc-btn-invisible">borderless</$button> 现有的样式
* <$button set="$:/config/Toolbar/ButtonClass" setTo="tc-btn-boxed">boxed</$button> 于按钮周围增加细边框
* <$button set="$:/config/Toolbar/ButtonClass" setTo="tc-btn-rounded">rounded</$button> 圆形按钮且反转其颜色
插件可以增加新的样式选项。
!! 新的条目工具列按钮:"开启于新窗口"
实验性的新的条目工具列按钮,在单独的弹出浏览器窗口中开启单一条目。主窗口里的该条目一样会动态更新。有一些用途:
* 在主窗口中编辑时,便于安排访问参考条目
* 好好地利用多屏幕布局
* 打印单一条目的内容
* 运行演示於单独的窗口中,同时笔记保持在主窗口
!! 为视障者的改善
* 改进单色调色板:
** <$button>
<$action-setfield $tiddler="$:/theme" text="$:/themes/tiddlywiki/vanilla"/>
<$action-setfield $tiddler="$:/palette" text="$:/palettes/ContrastDark"/>
黑色的调色板
</$button> - 前景颜色:<<custom-colour-picker "$:/palettes/ContrastDark" "foreground">>,背景颜色:<<custom-colour-picker "$:/palettes/ContrastDark" "background">>
** <$button>
<$action-setfield $tiddler="$:/theme" text="$:/themes/tiddlywiki/vanilla"/>
<$action-setfield $tiddler="$:/palette" text="$:/palettes/ContrastLight"/>
明亮的调色板
</$button> - 前景颜色:<<custom-colour-picker "$:/palettes/ContrastLight" "foreground">>,背景颜色:<<custom-colour-picker "$:/palettes/ContrastLight" "background">>
** <$button>
<$action-setfield $tiddler="$:/theme" text="$:/themes/tiddlywiki/snowwhite"/>
<$action-setfield $tiddler="$:/palette" text="$:/palettes/Vanilla"/>
还原
</$button>
!! 新的 "Solar Flare" 调色板
还有一个新的核心调色板 "Solar Flare",由 Rustem Akbulatov(@nameanyone)提供。
<$button>
<$action-setfield $tiddler="$:/theme" text="$:/themes/tiddlywiki/snowwhite"/>
<$action-setfield $tiddler="$:/palette" text="$:/palettes/SolarFlare"/>
试试看
</$button> <$button>
<$action-setfield $tiddler="$:/theme" text="$:/themes/tiddlywiki/snowwhite"/>
<$action-setfield $tiddler="$:/palette" text="$:/palettes/Vanilla"/>
还原
</$button>
!! 故事控制选项
新的选项用于控制在故事河中,新开启条目的位置。请至[[控制台|$:/ControlPanel]]的''设置''页签,并找到"条目开启行为"。
!! 新的隐藏设置
两个新的高端配置的[[隐藏设置|Hidden Settings]]:
* [[Hidden Setting: Search AutoFocus]]
* [[Hidden Setting: Typing Refresh Delay]]
!! 新的 Vars 小工具
[[添加|https://github.com/Jermolene/TiddlyWiki5/pull/1678]] VarsWidget,可在一个操作中设置多个变量:
```
<$vars greeting="Hi" me={{!!title}} sentence=<<helloworld>>>
<<greeting>>! I am <<me>> and I say: <<sentence>>
</$vars>
```
! 其他改进
!! 翻译改进
* 对荷兰语、华语、意大利文和德语的翻译的更新。
* 添加 Catalan (西班牙) 翻译
!! 可用性改进
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/789069bb6b9ca1bd9da75e035b18728e83eb232c]] 设置调色板的页面控制项图标:<$set name="tv-config-toolbar-class" value="btn">
<$set name="tv-config-toolbar-icons" value="yes">
<$set name="tv-config-toolbar-text" value="yes">
{{$:/core/ui/Buttons/palette}}
</$set>
</$set>
</$set>
* 添加图标 <span style="fill:#aaa;">
"调色板" <span title="$:/core/images/palette">{{$:/core/images/palette}}</span>
与 "开启于新窗口" <span title="$:/core/images/open-window">{{$:/core/images/open-window}}</span>
</span>
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/648f670bcbba088780bc76f0c33cbe378d283bbd]] 布景主题图标,使更加匹配新的调色板图标:<span style="fill:#aaa;">
<span title="$:/core/images/theme-button">{{$:/core/images/theme-button}}</span>
<span title="$:/core/images/plugin-generic-theme">{{$:/core/images/plugin-generic-theme}}</span>
</span>
* [[避免|https://github.com/Jermolene/TiddlyWiki5/commit/7b4153f87f8b4793fa055ec287a659ece3150d99]]插件程序库中的搜索框的自动聚焦故障
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/9f92c086c31a528a2ffb6bc9fed53d4cc016480f]] TiddlyDesktop 的相关信息至[[版本信息|Releases]]
* [[停止|https://github.com/Jermolene/TiddlyWiki5/commit/4a3a5bf1f06c4efb8449c860e90c214f707954f6]] 取消编辑后的自动保存
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/]] 允许现有字段名称可被选择的下拉式清单至编辑范本
!! 可编程性改进
* [[更新|https://github.com/Jermolene/TiddlyWiki5/commit/5f3587c38c2968ff63780552ef50b52d87ada3ca]] 之前与 TiddlyWiki 5.1.8 一起发布的 0.2.0 版至 ~KaTeX 0.4.3 版:
** 添加支持一些 `\begin`/`\end` 环境,包括支持 `array`、`matrix`、`pmatrix`、`bmatrix`、`vmatrix` 和 `Vmatrix`
** 添加支持可选的 `\sqrt` 参数,例如 `\sqrt[3]{x}`
** 添加支持 `\phantom`
** 添加 `\#`, `\&`
** 完整的详细信息请参阅 [[KaTeX GitHub 网页|https://github.com/Khan/KaTeX/releases]]
* [[扩充|https://github.com/Jermolene/TiddlyWiki5/commit/9b4b9d4d8878b8646112de7b5a7b282f50a4d1cb]] ActionSendMessageWidget 通过新的 `$name` 和 `$value` 属性,更灵活传递具名参数
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/6942efa6289c9f1d99ea9f63972aa314ac06a8b1]] `<kbd>` 元素的样式如 <kbd>Esc</kbd> 与 <kbd>Enter</kbd>
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/637aaca2fc3563cc695ab5603fc0cde222a770da]] 微妙的新页面背景 "pin stripe" 版型 - <$button>
<$action-setfield $tiddler="$:/themes/tiddlywiki/vanilla/settings/backgroundimage" text="Pinstripe.gif"/>
<$action-setfield $tiddler="$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment" text="fixed"/>
<$action-setfield $tiddler="$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize" text="auto"/>
试试看
</$button>
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/139496209f92d229feadf5c2883edec9090c0a0a]] 支持自订元素至 ButtonWidget。
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/d8366cc45f25d16c9085e05ee18965e626e218ff]] [[CodeMirror 插件|CodeMirror Plugin]],于条目类型更改时自动刷新
* [[添加|https://github.com/Jermolene/TiddlyWiki5/commit/0d5033e2a00e34a7665c2cff58c0d15da224dd2b]] 于 $:/ControlPanel 新的设置,显示条目名称链接以便拖放
* [[简化|https://github.com/Jermolene/TiddlyWiki5/commit/f42842f80104e8e892545c758ea0b997cacbdd31]] 检测预览皮肤用 [[tv-tiddler-preview Variable]]
* [[改进|https://github.com/Jermolene/TiddlyWiki5/commit/50c6ce8b73aef692920d7a03b1c9c46c35f972d6]] 自动链接系统条目名称,通过限制其为字母和字符 `/.-`
!! 修正错误
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/5a6249894d5e79ee4e472c72be8956ce59558797]] 字段名称中的特殊字符的问题
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/230f40c3bd71177eb7b1f7e8252a5164e99a12c5]] 在行动设备上的静态横幅版面配置
* [[修正|https://github.com/Jermolene/TiddlyWiki5/commit/df84e932833b3643ce600499ddd5fef497bec908]] 可卷动小工具内的快显窗口,通过增加 `position: relative;` 到示例可卷动小工具样式
!! Node.js 更改
//这些更动只与在 Node.js 下使用 TiddlyWiki 的人有关//
*
! 贡献者
[[@Jermolene|https://github.com/Jermolene]] 感谢此版本贡献者,慷慨地付出他们时间协助改进 TiddlyWiki:
* [[@BramChen|https://github.com/BramChen]]
* [[@buggyj|https://github.com/buggyj]]
* [[@cehmke|https://github.com/cehmke]]
* [[@danielo515|https://github.com/danielo515]]
* [[@Drakor|https://github.com/Drakor]]
* [[@ericshulman|https://github.com/ericshulman]]
* [[@felixhayashi|https://github.com/felixhayashi]]
* [[@gernert|https://github.com/gernert]]
* [[@heroboy|https://github.com/heroboy]]
* [[@idoine|https://github.com/idoine]]
* [[@infurnoape|https://github.com/infurnoape]]
* [[@inmysocks|https://github.com/inmysocks]]
* [[@kixam|https://github.com/kixam]]
* [[@lolole13|https://github.com/lolole13]]
* [[@marcor|https://github.com/marcor]]
* [[@Marxsal|https://github.com/Marxsal]]
* [[@nameanyone|https://github.com/nameanyone]]
* [[@pmario|https://github.com/pmario]]
* [[@r1chard5mith|https://github.com/r1chard5mith]]
* [[@roma0104|https://github.com/roma0104]]
* [[@silvyn|https://github.com/silvyn]]
* [[@slovuj|https://github.com/slovuj]]
* [[@StevenMcD|https://github.com/StevenMcD]]
* [[@sukima|https://github.com/sukima]]
* [[@vouko|https://github.com/vouko]]
* [[@welford|https://github.com/welford]]
* [[@xcazin|https://github.com/xcazin]]
<<tabs "[[TiddlyWiki Releases]] [[TiddlyDesktop Releases]]" "TiddlyWiki Releases" "$:/state/tab">>
<h2><$link to=<<currentTab>>><$view tiddler=<<currentTab>> field="title"/></$link></h2>
^^发布时间: <$view tiddler=<<currentTab>> field="released" format="date" template="YYYY年0MM月0DD日, 0hh:0mm">即将发布</$view>^^
<$transclude tiddler=<<currentTab>> />
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "remainder">>
<<.operator-example 1 "[[23]remainder[3]]">>
<<.operator-example 2 "=1 =2 =3 =4 +[remainder[2]]">>
<<.operator-examples "remove">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]] +[remove[Tuesday Wednesday Thursday]]">>
<<.operator-example 2 "[list[Days of the Week]] +[remove:3[Monday Wednesday Friday Saturday]]">>
<<.operator-example 3 "[list[Days of the Week]] +[!remove:2{Days of the Week!!list}]">>
<<.s-matching-is-case-sensitive>>
<<.tip "这将筛选出不以 S 开始的输入标题。有关删除 S 而不过滤掉不以 S 开始的输入标题,详见 [[trim|trim Operator]]。">>
<<.operator-examples "removeprefix">>
<<.operator-example 1 "[[My Cat]] [[Your Garden]] [[My Favourite Armchair]] +[removeprefix[My ]]">>
<<.s-matching-is-case-sensitive>>
<<.tip "这将筛选出不以 S 结束的输入标题。有关删除 S 而不过滤掉不以 S 结束的输入标题,详见 [[trim|trim Operator]]。">>
<<.operator-examples "removesuffix">>
<<.operator-example 1 "SIMPLEX Googolplex Complex +[removesuffix[plex]]">>
{{$:/language/Help/render}}
<$button class="tc-btn-invisible" style="text-decoration:underline">
显示可用的呈现模板条目
<$action-setfield $tiddler="$:/temp/advancedsearch" text="[all[shadows]prefix[$:/core/templates/]]"/>
<$action-setfield $tiddler="$:/state/tab--1498284803" text="$:/core/ui/AdvancedSearch/Filter"/>
<$action-navigate $to="$:/AdvancedSearch"/>
</$button>
{{$:/language/Help/rendertiddler}}
{{$:/language/Help/rendertiddlers}}
<<.operator-examples "replace">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]] Last +[replace[Wednesday]]">>
<<.operator-example 2 "[list[Days of the Week]] Last +[replace:2[Tuesday]]">>
<<.operator-example 3 "[list[Days of the Week]] [[Yesterday]] [[Today]] [[Tomorrow]] +[replace:3[Tuesday]]">>
<<.def resolvepath>> [[宏|Macros]]需要相对路径和绝对路径。其解译相对于后者的相对路径,并传回前者的绝对路径。
路径中的文件夹由 `/` 分隔。
特殊文件夹 `.` 表示当前文件夹,`..` 表示上层文件夹。
如果绝对路径为一个文件夹,则需以 `/` 结束。在最后的 `/` 后面的任何字符串皆被视为该路径内的一个任意文件名且被丢弃。
如果没有提供绝对路径,则相对路径传回不变,除了最后的 `/` 其余将被丢弃。
传回值是一个路径,但<<.em 不>>以 `/` 结尾。
!! 参数
;source
: 相对路径
;root
: 绝对路径
<<.macro-examples "resolvepath">>
<$macrocall $name=".example" n="1" eg="""<<resolvepath "./backup" "http://example.com/store.php">>"""/>
<$macrocall $name=".example" n="2" eg="""<<resolvepath "backup" "http://example.com/store.php">>"""/>
<$macrocall $name=".example" n="3" eg="""<<resolvepath "../backup" "http://example.com/store.php">>"""/>
<$macrocall $name=".example" n="4" eg="""<<resolvepath "../jpg/Motovun_Jack.jpg" "http://example.com/resources/images/png/">>"""/>
<$macrocall $name=".example" n="5" eg="""<<resolvepath "../jpg/../png/Motovun_Jack.png">>"""/>
<$macrocall $name=".example" n="6" eg="""<<resolvepath "jpg/Motovun_Jack.jpg">>"""/>
这些都是由 [[TiddlyWiki 社区|Community]]创建的资源网站,帮助您获得最佳的 ~TiddlyWiki:插件、宏和其他资源。经由 GitHub、Twitter 提交新的项目,或发布于 [[TiddlyWiki 论坛|Forums]]。
<div class="tc-link-info">
<$list filter='[tag[Resources]!sort[modified]]'>
<div class="tc-link-info-item">
! <$link to={{!!title}}><<toc-caption>></$link>
!!! <a href={{!!url}} target="_blank"><$text text={{!!url}}/></a>
<div class="tc-subtitle">发布于 <$view field="modified" format="relativedate"/></div>
<$transclude/>
</div>
</$list>
</div>
<<.olink butfirst>> 与 <<.olink bf>> 为 <<.op rest>> 的同义运算符。
<<.operator-examples "rest">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]rest[]]">>
<<.operator-example 2 "[list[Days of the Week]rest[3]]">>
<<.operator-example 3 "Z Y X W V U T S R Q P O +[rest[5]]">>
TiddlyWiki 的''简历生成器''应用版,让您使用一个简单的方法来创建一个专业的简历,您可以保存于网络或打印。
https://tiddlywiki.com/editions/resumebuilder/index.html
! 简介
`<$reveal>` 小工具隐藏或显示它的内容取决于[[状态条目|StateMechanism]]的内容。该小工具的类型为要显示的内容的决定条件:
* type=''match'': 若状态条目符合 <<.attr text>> 属性的值,则显示内容
* type=''nomatch'': 若状态条目不符合 <<.attr text>> 属性的值,则显示内容
* type=''popup'': 如 PopupMechanism 所述,内容以弹出式窗口显示之
* type=''lt'': 若状态条目包含一整数值''小于'' <<.attr text>> 属性的值,则显示内容
* type=''gt'': 若状态条目包含一整数值''大于'' <<.attr text>> 属性的值,则显示内容
* type=''lteq'': 若状态条目包含一整数值''小于或等于'' <<.attr text>> 属性的值,则显示内容
* type=''gteq'': 若状态条目包含一整数值''大于或等于'' <<.attr text>> 属性的值,则显示内容
! 内容与属性
`<$reveal>` 小工具的内容的显示,系依据上面给定的规则。
|!属性 |!说明 |
|state |包含状态的[[文本参考|TextReference]] |
|stateTitle |包含状态的标题,''没有''[[文本参考|TextReference]]。首选为 <<.attr state>> |
|stateField |用于查找状态的''字段名称'',如果属性 <<.attr stateTitle>> 存在 |
|stateIndex |用于查找状态的''索引'',如果属性 <<.attr stateTitle>> 存在 |
|tag |覆写默认的 HTML 元素标记 (`<div>` 于 block 模式 或 `<span>` 于 inline 模式) |
|type |运行匹配的类型:''match''、''nomatch''、''popup''、''lt''、''gt''、''lteq'' 或 ''gteq'' |
|text |要匹配类型时的文本 ''match''、''nomatch''、''lt''、''gt''、''lteq'' 或 ''gteq'' |
|class |指定到 HTML 元素的可选 CSS 类别名称 |
|style |指定到 HTML 元素的可选 CSS 样式属性 |
|position |用于类型是 ''popup'' 的位置,其值可为 ''left''、''above''、''aboveleft''、''aboveright''、''right''、''belowleft''、''belowright'' 或 ''below'' |
|positionAllowNegative |设置为 "yes",以防止计算的弹出位置被夹紧要大于零 |
|default |状态条目佚失时使用的默认值 |
|animate |设为 "yes" 进行动画处理的开始和结束 (默认为 "no"; 需将 "retain" 设为 "yes") |
|retain |设为 "yes" 强制予以保留,即使是隐藏的内容 (默认为 "no") |
|updatePopupPosition|<<.from-version "5.1.23">> 设为 "yes",更新状态条目时,更新弹出位置 (默认为 "no")|
<<.tip """<$macrocall $name=".from-version" version="5.1.18"/> <$macrocall $name=".attr" _="stateTitle"/>、<$macrocall $name=".attr" _="stateField"/> 和 <$macrocall $name=".attr" _="stateIndex"/> 属性允许''直接''指定条目状态,而不将其解释为[[文本参考|TextReference]]。
这对于标题可能包含用于表示条目字段,或索引 (`!!`, `##`) 的字符的边缘案例非常有用""">>
<<.tip """保留内容隐藏时运行性能较差,因为隐藏的内容需要刷新处理,即使它不会显示。另一方面,可以更快地显示内容。请注意该设置 ''animate="yes"'' 也需设置 ''retain="yes"''。""">>
! 示例
!! 显示简单内容
下面是一个简单的显示和隐藏内容的按钮示例:
<<wikitext-example-without-html '<$button set="$:/state/SampleReveal1" setTo="show">显示</$button>
<$button set="$:/state/SampleReveal1" setTo="hide">隐藏</$button>
<$reveal type="match" state="$:/state/SampleReveal1" text="show">
! 这是显示的内容
And this is some text
</$reveal>'>>
!! 手风琴或滑动式显示
"手风琴" 或 "滑动" 式显示为一个按钮,可以用来切换关联内容的显示。
<<wikitext-example-without-html '<$reveal type="nomatch" state="$:/state/SampleReveal2" text="show">
<$button set="$:/state/SampleReveal2" setTo="show">显示</$button>
</$reveal>
<$reveal type="match" state="$:/state/SampleReveal2" text="show">
<$button set="$:/state/SampleReveal2" setTo="hide">隐藏</$button>
! 这是显示的内容
And this is some text
</$reveal>'>>
!! 弹出式显示
这是一个用 RevealWidget 生成一个简单的弹出式窗口示例:
<<wikitext-example-without-html '<$button popup="$:/state/SamplePopupState">弹出显示!</$button>
<$reveal type="popup" state="$:/state/SamplePopupState">
<div class="tc-drop-down">
! This is the popup
And this is some text
</div>
</$reveal>'>>
!! 如何使用字段内容的文本参考
这是一个简单的例子,如何使用字段内容的文本参考文献来控制 RevealWidget。如果 ``jeremy`` 字段内容为 ``tiddlywiki``,则显示一个消息。
<<wikitext-example-without-html '<$reveal type="match" state="!!jeremy" text="tiddlywiki">
~TiddlyWiki!
</$reveal>'>>
<<.operator-examples "reverse">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]reverse[]]">>
\define searchResults()
<$set name="resultCount" value="""<$count filter="[!is[system]search{$(searchTiddler)$}]"/>""">
{{$:/language/Search/Matches}}
</$set>
<$macrocall $name="timeline" format={{$:/language/RecentChanges/DateFormat}} subfilter="!is[system]search{$(searchTiddler)$}"/>
\end
<<searchResults>>
//这是[[购物清单示例|Shopping List Example]]的一个购物清单项目样本//
TidlyWiki 5 现在是一个许多人所依赖的,成熟、稳定的项目。同时,由于开发人员和用户的广泛社群,它正在许多方面迅速发展。这种自相矛盾的情况是可能的,因为项目严格保持向后兼容性,在现有功能旁边添加新功能。
没有正式的路线图,但仍有相当多的领域尚未完全实现,如搜索和替换以及富文本编辑。当前的工作可以在 ~GitHub 找到,网址为 https://github.com/Jermolene/TiddlyWiki5/
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "round">>
<<.operator-example 1 "[[1.6]round[]]">>
<<.operator-example 2 "[[-1.6]round[]]">>
<<.operator-example 3 "=-1.2 =-2.4 =3.6 =4.8 =5.1 +[round[]]">>
! 简介
安全模式提供了一种方法来禁用 TiddlyWiki 大部分的客制功能。这是很有用的,因为如果是客制功能错误,TiddlyWiki 可能变得不能工作。一个特殊的问题是,当升级到 TiddlyWiki 较新的核心版本(尤其是在试用版)导致一些客制功能失效。
<<.warning "安全模式应仅用于 TiddlyWiki 的单档配置,且仅用于不自动保存的保存模块。在主从式配置中使用安全模式,可能会导致数据丢失。">>
! 启用安全模式
在浏览器中启用安全模式,开启 TiddlyWiki 的 URL 哈希值设置为字符串 `#:safe` 。例如:
https://tiddlywiki.com/#:safe
! 安全模式如何工作的原理
安全模式触发两个变化︰
* 所有的插件都暂时禁用。您可以使用 <<.icon $:/core/images/options-button>> [[控制台|$:/ControlPanel]]禁用单个插件
* 在安全模式下,任何覆写默认条目的条目将被改名为加上前缀 `SAFE: `,并撤销原始的默认条目。
* 某些配置选项会被忽略,并使用默认设置:
** [[维基解析规则配置|WikiParserRuleConfiguration]]
将显示一个报告条目,让您可以检查被重命名的条目。
如果 <<.place D>> 不是一个有效的日期,则输出是空的。
<<.place D>> 可能包括日期的时间,但这将被忽略。
<<.operator-examples "sameday">>
<<.operator-example 1 "[sameday[20140410]]" "修改于 2014年04月10日的条目">>
<<.operator-example 2 "[sameday:created[20140410]]" "创建于 2014年04月10日的条目">>
! 这是一个 1 级标题
这是一个段落。
<$vars tv-adjust-heading-level="-2">
{{Sample Headings 3,4,5}}
</$vars>
!! 这是一个 2 级标题
<$vars tv-adjust-heading-level="-1">
{{Sample Headings 4,5,6}}
</$vars>
!!! 这被写为 3 级标题
!!!! 这被写为 4 级标题
!!!!! 这被写为 5 级标题
!!!! 这被写为 4 级标题
!!!!! 这被写为 5 级标题
!!!!!! 这被写为 6 级标题
这是一个示范的警示。
请注意垃圾箱图标删除包含此警示条目。您还可以透过开启 SampleAlert 条目,编辑它以删除该标签 [[$:/tags/Alert]] 来删除它。
! 您好,<<yourName>>
这是一个包含以下消息的交互窗口示例:
<<yourMessage>>
{{$:/images/done-button.svg}} 这是一个通知消息
这是一个交互窗口导引对话匡,保存在 SampleWizard 条目。
{{Motovun Jack.jpg}}
您可以 <$button message="tm-modal" param="SampleWizard2">嵌套导引</$button>.
这是另一个交互窗口导引对话匡,保存在 SampleWizard2 条目。
您可以 <$button message="tm-modal" param="SampleWizard">嵌套导引</$button>.
<<.this-is-operator-example>>
{{$:/language/Help/save}}
{{$:/language/Help/savetiddler}}
{{$:/language/Help/savetiddlers}}
此插件会导致 TiddlyWiki 不断下载(为 JSON 文件)通过以下几种方式手动更改的任何条目的内容:
* 确认编辑
* 删除条目
* 导入
* 重命名/重新链接
* (可选)输入草稿条目会触发下载
在适当的情况下,文件变动 '前' 和 '后' 分别被下载。若正确配置,浏览器将在背景静默下载文件,并且可以将其用作备份,以防意外丢失数据。
{{$:/language/Help/savewikifolder}}
\define alltagsfilter()
<$vars tag1="tag[" tag2="]" lb="[" rb="tag[Saving]sort[delivery]]">
<$set filter="[list[]addprefix<tag1>addsuffix<tag2>]+[join[]addprefix<lb>addsuffix<rb>]" name="alltags" select=0>
<$text text=<<alltags>>/>
</$set>
</$vars>
\end
\define saverssidebaritem(item:"Linux")
<$checkbox tiddler=<<qualify $:/temp/$item$>> field="status" checked="selected" checkactions=<<checkactions "$item$">> uncheckactions=<<uncheckactions "$item$">> default="closed"> $item$</$checkbox><br/>
\end
\define saverssidebaritemlist(fieldname:"os")
<$list filter="[enlist{!!$fieldname$}]" variable="currentItem">
<$macrocall $name="saverssidebaritem" item=<<currentItem>>/>
</$list>
\end
\define uncheckactions(item:"Linux")
<$action-listops $subfilter="-[[$item$]]"/>
\end
\define checkactions(item:"Linux")
<$action-listops $subfilter="[[$item$]]"/>
\end
\define uncheckactions(item:"Linux")
<$action-listops $subfilter="-[[$item$]]"/>
\end
Available methods for saving changes with TiddlyWiki:
<div class="tc-wrapper-flex">
<div class="tc-saving-sidebar">
<div class="tc-saving-sidebar-category">
<div class="tc-saving-sidebar-category-title">OS</div>
<div class="tc-saving-sidebar-category-item">
<<saverssidebaritemlist "saving-os">>
</div>
</div>
<div class="tc-saving-sidebar-category">
<div class="tc-saving-sidebar-category-title">Browser</div>
<div class="tc-saving-sidebar-category-item">
<<saverssidebaritemlist "saving-browser">>
</div>
</div>
</div>
<!-- Page content -->
<div class="content">
<$wikify text=<<alltagsfilter>> name="alltagsfilterwikified">
<$list filter=<<alltagsfilterwikified>>>
{{||$:/_tw5.com-card-template}}
</$list>
</$wikify>
</div>
</div>
内置的 TiddlySpot 保存模块,也可使用于保存变更至一个可以运行于大多数托管服务的简单 PHP 脚本。
//这些都是需要核查的初步说明//
# 从 https://code.google.com/archive/p/bidix/downloads 下载 `TiddlyHome_0.1.2.zip`
# 解压缩
# 从解压缩子目录 `_th\lib` 下的副本提取 `store.php`
# 编辑您的 ''store.php'',加入您的帐号与密码。找到此行 `$USERS = array( 'UserName1'=>'Password1', etc)` 然后替换 Username1 及 Password1 为您的帐号与密码
#* 请确保所有的标点符号和代码完整,例如单引号。
# 保存文件
# 使用 FTP 或 web 界面,将 ''store.php'' 上传到您的服务器。请确保文件名是正确
#* 若您已正确上传文件,应该能在您的浏览器查看之 (例如,http://example.com/store.php)
# 在 TiddlyWiki <<.icon $:/core/images/options-button>>''控制台''的''保存''页签,输入以下信息:
#* 您的用户名为维基名称
#* 您的密码
#* ''store.php'' 文件的网址 (//''不是''维基的网址,必须是 ''store.php'' 文件的完整的 URL//)
控制台的''保存''页签包括以下配置选项:
|!名称 |!描述 |
|Server URL |到您的服务器上的 ''store.php'' 文件的完整的 URL |
|Upload filename |用于保存 TiddlyWiki 的文件名 (默认为 ''index.html'') |
|Upload directory |从 ''store.php'' 到用于保存文件的文件夹的相对路径 |
|Backup directory |从 ''store.php'' 到用于备份文件的文件夹的相对路径 |
!!! 注意文件的最大限制
当您的 TW 文件大小添加,可能需要修改您的 `.htaccess` 或 `htaccess` 文件(取决于系统),添加的最大上传值且/或 post 大小。请与您的网页主机供应商确认您的特定设置。务必在实验之前做好备份。在某些系统上,设置可能看起来像︰
```
php_value upload_max_filesize 10M
php_value post_max_size 12M
```
!!! 请注意可能的错误消息
如果您收到有关 `split()` 的错误消息,您可能需要将 ''store.php'' 对 `split` 的引用改为 `explode` 函数。
Tiddloid 和 Tiddloid Lite 是 Android 应用程序,能够编辑和保存变更至 TiddlyWiki5 HTML 文件。
* 有关详细信息:[[Tiddloid|https://github.com/donmor/Tiddloid]]、[[Tiddloid Lite|https://github.com/donmor/TiddloidLite]]。
* 下载 apks:[[Tiddloid|https://github.com/donmor/Tiddloid/releases]]、[[TiddloidLite|https://github.com/donmor/TiddloidLite/releases]]
!!! 功能
* 从互联网导入最新版本,创建新的 ~TiddlyWiki
* 导入存放在设备/内部存储中的现有 ~TiddlyWikis。([[TiddloidLite|https://github.com/donmor/TiddloidLite/releases]] 也支持外部 SD 卡)
* 从互联网拷贝感兴趣的 ~Tiddlywikis (仅支持 TW5)
* TiddlyWiki 侦测
* 本地存放的 ~Tiddlywikis,在导入至 app 的 ~TiddlyWikis 保存变更时,同时更新
* 备份系统与 ~TidlyDesktop 兼容,TD 为桌面 ~TidlyWiki 保存程序
* 在 Android 首页上创建现有 ~TiddlyWiki 的捷径
* [[TiddloidLite|https://github.com/donmor/TiddloidLite/releases]] 还支持云端的保存,如 GDrive 和 ~OneDrive
!!! 请注意
* Tiddloid Lite 对运行 Android Q 或更新版本的新设备的支持更好。它还支持云端的保存,如 GDrive 和 ~OneDrive,而 Tiddloid 则保留与 TiddlyWikiClassic 的兼容性。有关 Tiddloid 和 Tiddloid Lite 的更多区别,请参阅 [[Tiddloid 的首页|https://github.com/donmor/Tiddloid]]。
* 应保留要导入文件的 `.html` 或 `.htm` 扩展名。
即使您没有点击 <<.icon $:/core/images/done-button>> ''确定''按钮完成编辑条目,也可以通过点击边栏中的 <<.icon $:/core/images/save-button>> ''保存变更''按钮来保存更改。
<<.from-version "5.1.14">> TiddlyWiki 包含一个保存模块,允许从 [[Beaker 浏览器|Beaker Browser]]直接保存变更,Beaker 是一个实验性的点对点浏览器。
! 说明
# 从 https://beakerbrowser.com/ 下载并安装 Beaker 浏览器
# 运行 Beaker,且如果需要,则打开一个分页到 `beaker://start/`
# 点击页面左上方的 "New site" 按钮
# 输入您的网站的详细信息
# 点击链接 "Add files",并上传您的 TiddlyWiki index.html 文件
# 点击指向 index.html 的链接来查看网站。它应该在新的分页中打开
# 试试添加条目,并保存变更
此时,维基完全是私有的,其他用户即使有 URL 也看不到内容。若欲与其他用户共用维基:
# 发布您所做的变更
## 通过系统功能表访问 Beaker 浏览器中的 "Library" 页面
## 在清单中选择您的网站
## 寻找一个提及 "n unpublished changes" 的框。如果不存在,请跳到下一步
## 点击 "Review changes" 按钮
## 点击 "Publish" 按钮
# 分享数据:网址
## 从地址栏拷贝您的网站的网址,并与其他用户分享
## 其他用户应该可以造访您的网站,但除非拷贝他们自己的副本,否则将无法进行更改
iPad/iPhone 应用程序 ''Quine 2'' 可于 iOS 上查看、编辑与保存对 TiddlyWiki5 的更改。[[在此下载|https://apps.apple.com/us/app/quine-2/id1450128957]].
使用说明:
# 打开 Quine 2
# 点击 + 工具栏按钮以创建并打开新的 TiddlyWiki
# 从文件清单中点击现有的 TiddlyWiki 文件以打开之
# 一如往常编辑 TidlyWiki,并使用自动保存或 TidlyWiki 的保存按钮 <<.icon $:/core/images/save-button>> 照常保存。
# 点击左方的 "文档" 工具栏按钮,关闭一个已打开的 TiddlyWiki
* Quine 2 在 iOS 本地端与本机文件系统和 iCloud 文件系统一起运作
* Quine 2 允许您打开、编辑及保存与存放于云端文件提供者的 TiddlyWiki 文件
* Quine 2 允许您关注嵌入式的 WikiText 链接和指向支持「文件夹级共用」的类云端文件提供者的外部文件的规范链接。
** 这包括应用程序 "Secure Shellfish" 和 "Working Copy"。但是,大多数提供者不允许像 Quine 2 这样的应用以这种方式访问链接文件。
** 如果您希望为 "表现良好" 的文件提供者激活此类链接,请在 Quine 2 的 iOS 设置中,将 "Enable folder selection for out-of-sandbox links" 设置切换为 "on"
//请注意 Quine 2 是单独发布的,与 TiddlyWiki 不相关//
见 [[Introducing TiddlyDesktop Video]]
# 从 https://github.com/Jermolene/TiddlyDesktop/releases 安装最新版本的 TiddlyDesktop
# 运行 TiddlyDesktop
# 使用浏览按钮可以打开 TiddlyWiki 文件
# 于 TiddlyWiki 以平常方式保存变更
[img width=140 [https://github.com/simonbaird/tiddlyhost/raw/main/rails/app/assets/images/logo-800.png]]
[[TiddlyHost.com|https://tiddlyhost.com/]] 是 Simon Baird 创建的 ~TiddlyWiki 的托管服务。注册并确认您的电子邮件后,您可以创建 "网站",(即 ~TiddlyWikis),支持在线保存。网站可以是私人的或公开的,您可以选择性地将其列于可标签和可搜索的 [[TiddlyHost Hub|https://tiddlyhost.com/hub]],在那里他们会被其他人发现。
不像 [[TiddlySpot|Saving on TiddlySpot]],[[TiddlyHost|https://tiddlyhost.com]] 是安全的、开源,且对 ~TiddlyWiki5 提供适当的支持。且允许上传现有的 ~TiddlyWiki 文件,支持 ~TiddlyWikiclassic,并允许申请您的 ~TiddlySpot 网站的拥有权。详见 [[FAQ|https://github.com/simonbaird/tiddlyhost/wiki/FAQ]] 和 [[About|https://tiddlyhost.com/about]] 页面。
----
<<.warning "''请注意: ~TiddlySpot 处于维护模式,不再允许创建新网站。取代 ~TiddlySpot,您现在可以使用 [[TiddlyHost|Saving on TiddlyHost]],来自 ~TiddlySpot 创建者的新服务。''">>
----
[img[https://raw.githubusercontent.com/simonbaird/tiddlyhost/main/rails/app/assets/images/tiddlyspot-banner-logo.png]]
[[TiddlySpot.com|http://tiddlyspot.com]] 是 2006 年由 Simon Baird 和 Daniel Baird 创建的 ~TiddlyWiki 托管服务。
在 2021 年初,它被 [[TiddlyHost|Saving on TiddlyHost]] 取代,一个新的、安全的、现代的、重新塑造的 ~TiddlySpot。不再支持在 ~TiddlySpot 上创建新网站,(尽管在 2020 年或更早创建的网站仍然有效)。
!! ~TiddlySpot 的安全警告
请注意,当使用 ~TiddlySpot 时,系以明码发送您的密码。以下说明来自 [[FAQ|http://faq.tiddlyspot.com/]] :
<<<
''Is Tiddlyspot secure?''
No. Tiddlyspot does not use SSL/https, so all ~TiddlySpot web traffic is vulnerable to packet sniffing. This means your password and site data could be intercepted by a malicious third party. For this reason, please don't keep sensitive information in your ~TiddlySpot site, and don't use a password that you use for other web sites.
<<<
!! 在 ~TiddlySpot 上保存的问题
当您将一个刚刚升级的本机 ~TiddlyWiki 上传到 ~TiddlySpot 时,若遇到此错误:
<<<
Error: NS_ERROR_DOM_BAD_URI: Access to restricted URI denied
<<<
此为升级操作违反 Firefox 的安全限制。在这问题被解决之前,我们建议您使用 Google 浏览器。
* 使用 Google 浏览器,打开您想要上传到 ~TiddlySpot 的地 ~TiddlyWiki 文件,并按照 [[Upgrading]] 所述的步骤 1 至 5
* 一旦你已经检查过托管于 ~TiddlySpot 的 ~TiddlyWiki 在 Chrome 中正确加载,您应该能够再访问、编辑和[[使用 TiddlyFox 保存|Saving with TiddlyFox]]
* 在您上传本地文件档之后,托管于 ~TiddlySpot 的在线版本的进一步编辑和保存,应该可用于您所选择的任何现代的浏览器。(别忘了填写 ~TiddlySpot 上的密码于您的 ~TiddlySpot ~TiddlyWiki 控制台中,用于您想要用以保存变更的任何新的浏览器。)
//另请参阅:[[Upgrading]]//
TiddlyWiki 可以在单个文件配置中,直接保存变更到 GitHub 存储库。
保存到 Git 服务配置在[[控制台|$:/ControlPanel]]的 "保存" 选项卡下的 ''Git 服务保存模块'' 选项卡中。支持以下设置:
* ''Type'' - (必要) 服务的类型 (例如 GitHub、GitLab)
* ''Username'' - (必要) 用于保存变更的 Git 服务帐户的用户名
* ''Password'' - (必要) 指定帐户的密码、OAUTH 令牌或个人访问的令牌。请注意,GitHub 已弃用密码身份验证,允许的身份验证方法显示在 [[API 文档|https://developer.github.com/v3/#authentication]]
* ''Repository'' - (必要) Git 存储库的名称。必须同时指定拥有者名称和存储库名称。例如, `Jermolene/TiddlyWiki5`
* ''Branch'' - (可选) 要在 Git 存储库中使用的分支名称。默认值为 `main` (~GitHub) 或 `master` (~GitLab)
* ''Path'' - (可选) 目标文件的路径。默认值为 `/`
* ''Filename'' - (必要) 目标文件的文件名称
注意事项
* Git 服务的令牌或密码持续存放于浏览器本机保存区中。如果使用共用计算机,请务必清除密码。使用个人访问的令牌进行身份验证,提供了额外的安全层:如果意外公开访问的令牌,则可以在不需要重置帐户密码的情况下撤销该令牌
这是使用 Ruby Webrick 的最小服务器。它只是提供来自同一个文件夹的文件并处理保存。
运行后,只需将浏览器指向 http://localhost:8000 即可查看文件夹列表,然后点击您的维基 html 文件。
请参阅以下脚本:
https://gist.github.com/jimfoltz/ee791c1bdd30ce137bc23cce826096da
如果服务器支持,TiddlyWiki 将使用 [[WebDAV|https://en.wikipedia.org/wiki/WebDAV]] 保存变更。这种方法的主要困难在于设置服务器。
!! 服务器
[[dav-server|https://github.com/edrex/dav-server]] 是提供 HTML ~TiddlyWikis 文件夹的快速方法。
Android 版的 [[webdav 服务器|https://play.google.com/store/apps/details?id=com.theolivetree.webdavserver&hl=en]] 让您在口袋里放置维基。也可以与本地网络上的其他设备分享。
!! 现有的维基
自 2016 年 02 月 16 日始添加 ~WebDAV 支持,在此之前创建的维基需要[[升级|Upgrading]]以激活 ~WebDAV 。
!! 教学视频
[[Mario Pietsch|"Wikilabs" by PMario]] [[制作了几个视频|https://www.youtube.com/watch?v=tpkQhKyqPzc&list=PLuiC_HFhI4OwoVDb-B-VK0ydj-mBPNn-1]],展示如何准备以微软的网络信息服务 (IIS),使用 ~WebDav 来托管本机的 TiddlyWiki。
!! 免费托管
几个通过测试的 ~WebDAV 托管服务(~~ box.com ~~,~~ swissdisk.com ~~)不支持通过网页浏览器访问 HTML 文件,所以他们不能与 ~TiddlyWiki 一起运作。据报告,GMX 媒体中心 (www.gmx.net) 可与 WebDAV 一起运作,且提供免费帐户。
此保存变更的方法是笨拙的,因为每次保存,它都需要手动介入。它的好处是几乎能用于所有桌面浏览器和许多行动版浏览器。
# 点击下列按钮[[下载|Download]]一个空白的 TiddlyWiki:
#> {{$:/editions/zh-Hant/snippets/download-empty-button}} {{$:/editions/zh-Hans/snippets/download-empty-button}}
#> 若此按钮无效,请另存此链接:https://tiddlywiki.com/empty.html
#> 在运行下载前,您的浏览器可能会要您允许此下载
# 找到你刚才下载的文件
#* 你可以重命名该文件,但其扩展名必须是 `.html` 或 `.htm`
# 于您的浏览器中打开该文件
# 点击侧边栏的<<.icon $:/core/images/new-button>>''添加''按钮,尝试创建新条目。为此条目输入一些内容,然后点击<<.icon $:/core/images/done-button>>''确定''按钮
# 点击侧边栏的<<.icon $:/core/images/save-button>>''保存变更''按钮保存您的更改
# 您的浏览器将下载一份结合您更动的维基副本
# 找到你刚才下载的文件,并于您的浏览器中打开该文件
# 检测确认您的更改已正确保存
''提示'': 大部分的浏览器会有可设置的''每次都问我要下载到何处''的选项,这允许您选择已存在的文件版本并取代覆写之。
若您使用的是 [[Android 版的 Firefox|Firefox for Android]],请参阅[[在 Android 用 TiddlyFox 进行保存|Saving with TiddlyFox on Android]]的说明。
# ~TiddlyFox 将不适用于 Firefox 57 和其后的版本,确认您用是的 57 版以前的 Firefox。Firefox 57 和其后的版本,请考虑使用以下替代方案: <<list-links filter:"[tag[Firefox]delivery[Browser Extension]] -[[Saving with TiddlyFox]]">>
# 更改 Firefox ''选项''中之''个人隐私''设置为''保留所有浏览纪录'',再''清除所有浏览纪录''
# 从下列网址安装最新版的 TiddlyFox 附加组件:
#* https://addons.mozilla.org/zh-TW/firefox/addon/tiddlyfox/
# 重新启动 [[Firefox]]
# 点击下列按钮,下载一个空白的 TiddlyWiki:
#> {{$:/editions/zh-Hant/snippets/download-empty-button}} {{$:/editions/zh-Hans/snippets/download-empty-button}}
# 找到你刚才下载的文件
#* 您可以重命名该文件,但其扩展名必须是 `.html` 或 `.htm`
#* 文件名与存放的路径''勿''包含半角英文本母、数字、"-"、"_"、"." 以外的字符
# 于 [[Firefox]] 打开该文件
#* 如果您使用 TiddlyFox v1.x.x,您将需要点击 ''OK'',以回应 TiddlyFox 询问是否激活保存此文件的提示。
#* 如果您使用 TiddlyFox v2.x.x,您将需要点击站在蓝色地球上的小猫的图标,再点击 <span class="tc-btn-big-green">Enable Saving</span> 以激活保存支持。
#** 对于 TiddlyFox v2.0.1,您不能使用隐私浏览模式,也不能使用 "不保留历史记录"。
# 点击侧边栏的<<.icon $:/core/images/new-button>>''添加''按钮尝,试创建新条目。为此条目输入一些内容,然后点击<<.icon $:/core/images/done-button>>''确定''按钮
# 点击侧边栏的<<.icon $:/core/images/save-button>>''保存变更''按钮,保存您的更改
#* 在窗口的右上角可看到''已保存 wiki'' 的黄色消息
# 刷新浏览器窗口,以确认您的更改已正确保存
(另外,请参阅[[教学视频|TiddlyWiki on Firefox for Android Video]])
# 确保您用的是最新版的 [[Firefox for Android]]
#* http://getfirefox.com
# 从下列网址安装最新版的 TiddlyFox 附加组件:
#* https://addons.mozilla.org/zh-TW/firefox/addon/tiddlyfox/
# 安装此附加组件可使于本机保存 TiddlyWiki 文件:
#* https://addons.mozilla.org/zh-TW/android/addon/save-link-menus/
# 保存下列链接,下载一个空白的下载一个空白的 TiddlyWiki:
#* https://tiddlywiki.com/empty.html
#> (保存此链接,确定您已安装 "save-link-menus" 附加组件,然后长按该链接并选择 "Save link")
# 下载该文件后,在通知消息列或下载管理器应用程序中点击它
# 于 [[Firefox]] 开启该文件 (而非于默认的 Android 查看器)
# 点击 ''OK'' 回应从 TiddlyFox 询问是否启用保存此文件的提示
# 点击侧边栏的<<.icon $:/core/images/new-button>>''添加''按钮,尝试创建新条目。为此条目输入一些内容,然后点击 <<.icon $:/core/images/done-button>>''确定''按钮
# 点击侧边栏的<<.icon $:/core/images/save-button>>''保存变更''按钮,保存您的更改
#* 在窗口的右上角可看到''已保存 wiki'' 的黄色消息
# 刷新浏览器窗口,以确认您的更改已正确保存
# 安装 TiddlyIE 附加组件,从:
#* https://github.com/davidjade/TiddlyIE/releases
# 重新启动 Internet Explorer。IE 会提示您激活 TiddlyIE 附加组件。
#> 您也会看到提示激活 //Microsoft Script Runtime//
# 保存下列链接,下载一个空白的 TiddlyWiki。
#> https://tiddlywiki.com/empty.html
#> 在运行下载前,您的浏览器可能会要您允许此下载
# 找到你刚才下载的文件
#* 你可以重命名该文件,但其扩展名必须是 `.html` 或 `.htm`
# 于 Internet Explorer 打开该文件
# 点击侧边栏的<<.icon $:/core/images/new-button>>''添加''按钮,尝试创建新条目。为此条目输入一些内容,然后点击<<.icon $:/core/images/done-button>>''确定''按钮
# 点击侧边栏的<<.icon $:/core/images/save-button>>''保存变更''按钮,保存您的更改。Internet Explorer 会跳出另存新档的对话匡请求您的同意于本机保存该文件。
# 刷新浏览器窗口,检测确认您的更改已正确保存
是一个 ~TiddlyWiki 插件和 PHP 脚本,用于保存到基于 PHP 的服务器。
其功能包括简单的自动备份、实例覆盖保护、询问摘要身份验证 (增强的安全性),和数据完整性签名 (增强的安全性)。
* 相关的详细信息、插件和代码,请参访 [[TW-Receiver|https://github.com/sendwheel/tw-receiver]]。
[[保存机制|SavingMechanism]]是 TiddlyWiki 生成一个新的 HTML 文件并将其保存的机制,其不同于[[同步机制|SyncMechanism]]之对个别条目的更动同步回服务器。(详见 https://tiddlywiki.com/dev/#SyncAdaptorModules)。
涉及以下步骤:
# 保存机制使用定义于 $:/config/SaverFilter 的筛选器,指定更动的条目触发维基的已更动而未保存状态。(未保存状态反映在侧栏中变红色的 "保存变更" 按钮)。
# ButtonWidget 用于生成一个 [[tm-save-wiki|WidgetMessage: tm-save-wiki]] 小工具消息以触发保存操作
# 该小工具消息的可选参数指定一范本,用于生成 HTML 文件,缺省为 $:/core/save/all
#* 在主从式配置的插件 $:/plugins/tiddlywiki/tiddlyweb 以 $:/plugins/tiddlywiki/tiddlyweb/save/offline 替换缺省的范本
# 该范本包含一个变量赋值,其指定一个筛选器选择条目应该包含于被保存的文件。然后引用主页面范本 `$:/core/templates/tiddlywiki5.html`
#* 该范本包含对 `$(publishFilter)$` 的引用,允许筛选器经由一个全域变量客制化
# [[tm-save-wiki|WidgetMessage: tm-save-wiki]] 处理常式呈现范本以生成 HTML 文件
# 该小工具消息处理常式,选择可处理保存文件的最优先级的 "保存器" 模块
#* 详见 https://tiddlywiki.com/dev/#Saver
你可能会预期因为 TiddlyWiki 的[[单页式应用程序|SinglePageApplication]]架构会使它不适合大量的数据。事实上,TiddlyWiki 用户正规工作于 20 或 30 MB 的文件是没有问题,且已于成功实验中达到 GBs。
! 指令文件
TidlyWiki5 源码库包含 `bin` 文件夹中的几个指令档,可用于自动运行常见任务,或者当作您自己指令档的有用起点。有关用于构建和发布 https://tiddlywiki.com/ 的指令档的详细信息,请参阅[[用于构建 tiddlywiki.com 的指令档|Scripts for building tiddlywiki.com]]。
所有指令档都预期从源码库的根文件夹运行。
!! `serve`: 提供 tw5.com 服务
```
./bin/serve.sh -h
./bin/serve.sh [edition dir] [username] [password] [host] [port]
```
或:
```
./bin/serve.cmd -h
./bin/serve.cmd [edition dir] [username] [password] [host] [port]
```
此指令档启动 TiddlyWiki5,运行为一个 HTTP 服务器,默认为 `tw5.com-server` 版本的内容。默认情况下,Node.js 在端口 8080 上提供服务。如果提供了可选的 `username` 参数,则其用于对编辑署名。如果提供 `password` ,则使用 HTTP 基本验证。使用 `-h` 参数运行指令档,可查看在线说明。
要试验此配置,可以运行指令档,然后在浏览器中访问 `http://127.0.0.1:8080` 。
在浏览器中所做的更改通过 HTTP 传播到服务器(使用浏览器开发人员主控台查看这些请求)。然后,服务器将更改同步到文件系统(并将每个更改记录输出到屏幕)。
!! `test`: 建构并运行测试
此指令档在服务器上运行 TiddlyWiki 的 `test` 版本,以运行服务器端测试,并构建在浏览器中运行测试的 `test.html`。
!! `lazy`: 提供 tw5.com 以延迟加载图像
```
./bin/lazy.sh <username> [<password>]
```
或:
```
./bin/lazy.cmd <username> [<password>]
```
此指令档提供 `tw5.com-server` 版本,将延迟加载的内容应用于图像。
! 简介
可卷动小工具包裹其内容于一个可卷动匡中。用户可用鼠标或触摸手势卷动内容。代码可以使用 [[WidgetMessage: tm-scroll]] 的编程方式滚动特定的 DOM 节点进入视野。
! 内容与属性
`<$scrollable>` 小工具的内容显示于一个成对的 DIVs 之内。若内部 DIV 大于其卷动于其内的外部的的那个 DIV,CSS 用于指定外部 DIV 的大小。
|!属性 |!说明 |
|class |要应用于外边的 DIV 元素的 CSS 类别 |
|fallthrough |见下文 |
若可卷动小工具无法处理 `tm-scroll` 消息,是因为内部 DIV 适合于外部的 DIV 之内,则缺省该消息落于父小工具。设置 ''fallthrough'' 属性为 `no` 以防止这种行为。
! 示例
此示例需要下列来自 [[$:/_tw5.com-styles]] 的 CSS 定义 :
```
.tc-scrollable-demo {
border: 1px solid <<colour message-border>>;
background-color: <<colour message-background>>;
padding: 1em;
height: 400px;
position: relative;
}
```
此维基文本显示如何显示在可卷动小工具内的列表:
<<wikitext-example-without-html "<$scrollable class='tc-scrollable-demo'>
<$list filter='[!is[system]]'>
<$view field='title'/>: <$list filter='[all[current]links[]sort[title]]' storyview='pop'>
<$link><$view field='title'/></$link>
</$list>
</$list>
</$scrollable>
">>
<<.from-version "5.1.18">> 在 5.1.18 中,搜索筛选器运算符显著增强。 早期版本不支持扩充语法,因此不允许搜索多个字段,或 ''literal''、''casesensitive'' 选项。
<<.op search>> 运算符使用允许传递多个字段和标志的扩充语法:
```
[search:<field list>:<flag list>[<operand>]]
```
* ''field list'': 用于限制搜索的字段名称的以逗号分隔的清单
** 若空白,其默认值为 <<.field tags>>、<<.field text>> 和 <<.field title>>
** 一个星号 `*` 而非字段清单,在每个条目上可用的所有字段中运行搜索
** 在清单前面加上减号 `-`,则反转顺序,在列出的字段之外的所有字段上运行搜索
* ''flag list'': a以逗号分隔的标志清单 (若空白,其默认值为 `words`)
* ''operand'': 筛选器操作数
本示例在字段 <<.field title>> 和 <<.field caption>> 中,搜索符合区分大小写的文本字符串 <<.op-word "The first">>:
```
[search:title,caption:literal,casesensitive[The first]]
```
可用的标志有:
* Search mode - 首先要设置的以下标志,决定运行的搜索类型:
** ''literal'': 将搜索字符串视为文本字符串,并且需要完全符合
** ''whitespace'': 将搜索字符串视为文本字符串,但将所有空白的 runs 视为等同於单个空格。因此 `A B` 匹配 `A B`
** ''regexp'': 将搜索字符串视为正则表达式。请注意,''regexp'' 选项省却对较旧的 <<.olink regexp>> 运算符的需求。
** ''words'': (默认值) 将搜索字符串视为以空格分隔的权杖清单,如果所有权杖都出现在字符串中, 则匹配 (无论顺序如何,且两者之间是否有其他文本)
* ''casesensitive'': 此标志强制区分大小写匹配,其中大写和小写字母被视为不同。默认情况下,大写和小写字母被认为是相同的匹配目的。
* ''anchored'': <<.from-version "5.1.20">> 将搜索定位到字符串的开头 (适用于 ''whitespace''、''literal'' 和 ''words'' 模式)
<<.operator-examples "search">>
<$macrocall $name=".operator-example" n="1" eg="[!is[system]search[table]]" ie="包含单字 <<.word table>> 的非系统条目"/>
<$macrocall $name=".operator-example" n="2" eg="[all[shadows]search[table]]" ie="包含单字 <<.word table>> 的影子条目"/>
<$macrocall $name=".operator-example" n="3" eg="[search:caption[arch]]" ie="其 <<.field caption>> 字段包含 `arch` 的条目"/>
<$macrocall $name=".operator-example" n="4" eg="[search:*[arch]]" ie="任何字段包含 `arch` 的条目"/>
<$macrocall $name=".operator-example" n="5" eg="[search:-title,caption[arch]]" ie="除了 <<.field title>> 和 <<.field caption>> 以外,其他任何字段包含 `arch` 的条目"/>
<$macrocall $name=".operator-example" n="6" eg="[!is[system]search[the first]]" ie="包含大小写符合 <<.word 'the'>> 和 <<.word 'first'>> 两者的非系统条目"/>
<$macrocall $name=".operator-example" n="7" eg="[!is[system]search::literal[the first]]" ie="包含大小写符合文本短语 <<.word 'the first'>> 的非系统条目"/>
<$macrocall $name=".operator-example" n="8" eg="[!is[system]search::literal,casesensitive[The first]]" ie="包含大小写符合文本短语 <<.word 'The first'>> 的非系统条目 "/>
<$macrocall $name=".operator-example" n="9" eg="[search:caption,description:casesensitive,words[arch]]" ie="其 <<.field caption>> 或 <<.field description>> 字段包含大小写符合字词 `arch` 的条目"/>
<<.from-version "5.1.23">>
<<.op search-replace>> 操作符使用允许传递多个尾码和参数的延伸语法:
```
[search-replace:<flag list>:<regexp-mode>[<search-term>],[<replacement>]]
```
* ''flag-list'': ''g'' 用于全域模式以替换所有匹配项,''i'' 用于不区分大小写模式,"gi" 两者皆是。(选择性的)
* ''regexp-mode'': ''regexp'' 将第一个参数视为正则表达式 (可选)。
* ''search-term'': 应被替换的字符串或正则表达式
* ''replacement'': 应替换搜索词的字符串
<<.tip "[[参数|Filter Parameter]] 可以是字符串、文本引用或变量">>
<<.operator-examples "search-replace">>
\define myregexp() e|o
\define names() (\w+)\s(\w+)
将一个字符串取代为另一个字符串:
<<.operator-example 1 """[[The quick brown fox jumps over the lazy dog]search-replace[dog],[cat]]""">>
取代一个正则表达式的所有符合项目:
`\define myregexp() e|o`
<<.operator-example 2 """[[Hello There]search-replace:g:regexp<myregexp>,[]]""">>
取代字符串的所有符合项,无论大小写:
<<.operator-example 3 """[[Hello There]search-replace:gi[H],[]]""">>
可使用正则表达式,捕捉在取代字符串中的群组:
`\define names() (\w+)\s(\w+)`
<<.operator-example 4 """[[John Smith]search-replace::regexp<names>,[$2,$1]]""" >>
{{How to remove stop words}}
~TiddlyWiki 里的搜索是快速和灵活的。
!! 标准搜索
在侧边栏中的搜索框中键入的文本,将会出现包含该文本的所有条目清单。
:://(请注意,侧边栏的页签会被搜索结果隐蔽,直到你点击搜索框右侧的 'x' 移除搜索结果)//
!! 高级搜索
按一下搜索框右侧的 <<.icon $:/core/images/advanced-search-button>> 放大镜图标将开启[[高级搜索|$:/AdvancedSearch]]。此条目包含四个页签:
* ''标准'' 页签包含在侧边栏的搜索框的另一个实例
* ''系统'' 页签允许您将搜索限制为系统条目
* ''默认'' 页签允许您将搜索限制为默认条目
* ''筛选'' 页签本身并不是一个搜索框,而是通过该[[筛选器|Filters]]的描述,取得所有条目中满足特定条件的清单一种方式,例如,"除系统标签以外的所有标签"。
Searchwikis 插件使用索引(数据条目)搜索多个外部 Tiddlywikis 。
{{!!url}}
它有两个部分
# 一个索引器,在外部维基中构建所有条目的索引
# 用于搜索索引,并显示指向外部维基中,找到的条目的链接的搜索工具
然后,一个主维基可以承载许多索引索引器,并允许通过索引的条目搜索多个外部维基。
Searchwikis 能够拥有一个中央维基,并在一个地方搜索所有其他维基。
一个[[筛选器 Step|Filter Step]] 的输出取决于其 [[运算符|Filter Operators]]:
* 大多数运算符的输出来自其输入。例如,其中许多其输出为其输入的子集,如此才能真正符合<<.word 筛选器>>的名称、缩小包含 [[run|Filter Run]] 的整体输出。这些运算符称为<<.def "选择修饰子">>。
* 一些运算符忽略其输入,并生成独立的输出。这些被称为<<.def "建构子">>:他们构建全新的[[选择|Title Selection]]。
<<.olink title>> 是建构子的一个好例子。`[title[A]title[B]]` 的输出是只是 <<.tid B>>。但 <<.olink field>> 运算符是一个修饰子,因此 `[title[A]field:title[B]` 无任何输出。
! 简介
此选择小工具显示一个基于 [[HTML 选择元素|https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select]] 的弹出式菜单。该弹出式(或下拉式)菜单包含一个定义于 `<option>` 和 `<optgroup>` 元素的项目清单。
每次用户在菜单中选择一个新值,则选定的值被写入指定条目字段或索引的本文,且 `actions` 属性内的所有 ActionWidgets 被触发。反之,如果单独更改条目值,select 小工具会自动更新以反映新值。
在多重选取模式下,所选值的清单是绑定到指定条目字段或索引。浏览器通常使用 <kbd>Ctrl</kbd> 或 <kbd>cmd</kbd> 键做多重选取。
例如,此选择小工具显示在此 wiki 中的标签的清单:
<$macrocall $name="wikitext-example-without-html" src="<$select tiddler=<<qualify 'select-demo'>> default='HelloThere'>
<$list filter='[all[shadows+tiddlers]tags[]sort[title]]'>
<option value=<<currentTiddler>>><$view field='title'/></option>
</$list>
</$select>"/>
该<$link to=<<qualify "select-demo">>>状态条目</$link>目前包含:
<$edit-text tiddler=<<qualify "select-demo">> tag="input" default=""/>。
当您切换该选择小工具所选项目,可看到输入匡的内文随之改变。尝试改变此状态条目的值,也可看到选择小工具也跟着改变。请注意,若有与条目内文精确匹配选择小工具如何只显示一个条目。
! 内容与属性
该 `<$select>` 小工具的内容应该是一个或多个提供了可用的值的 HTML `<option>` 或 `<optiongroup>` 元素。
|!属性 |!说明 |
|tiddler |条目名称包含要在选择小工具中显示/修改的值 (默认为当前条目) |
|field |当前条目字段名称 (默认为 "text") |
|index |[[数据条目|DataTiddlers]] 中的一个属性的索引 (优先级高于字段属性) |
|class |指定至该 HTML 选择元素的 CSS 类别|
|tooltip |可选的提示文本 |
|default |若条目、 字段或索引指定一个缺失值,则使用的默认值 |
|multiple |如果存在,将切换到多重选取模式 |
|size |在多重选取模式中显示的行数 |
|actions |一个包含 ActionWidgets 的字符串,其 ActionWidgets 于侦测到按键组合时被触发 |
! 示例
!! 简单列表
本示例设置当前 wiki 的标题 [[$:/SiteTitle]] 为书名清单之一:
<$macrocall $name="wikitext-example-without-html" src="<$select tiddler='$:/SiteTitle' tooltip='选择新的网站标题'>
<option>A Tale of Two Cities</option>
<option>A New Kind of Science</option>
<option>The Dice Man</option>
</$select>"/>
!!! 具有占位符值的简单列表
要显示已禁用的默认值,可以使用以下形式,有效地充当占位符。请注意,目标字段必须是空的、或不存在,以便占位符显示于小工具中:
<$macrocall $name="wikitext-example-without-html" src="<$select tiddler='New Tiddler' field='text' default='Choose a new text'>
<option disabled>Choose a new text</option>
<option>A Tale of Two Cities</option>
<option>A New Kind of Science</option>
<option>The Dice Man</option>
</$select>"/>
!! 值列表
在此示例中的 `value` 属性已用于指定的内文应为项目的值而不是显示内文。
<$macrocall $name="wikitext-example-without-html" src="<$select tiddler='$:/SiteTitle'>
<option value='cities'>A Tale of Two Cities</option>
<option value='science'>A New Kind of Science</option>
<option value='dice'>The Dice Man</option>
</$select>"/>
!! 选项群组
可以将清单中的项目由 `<optgroup>` 元素分组
<$macrocall $name="wikitext-example-without-html" src="<$select tiddler='$:/SiteTitle'>
<optgroup label='Fiction'>
<option value='cities'>A Tale of Two Cities</option>
<option value='dice'>The Dice Man</option>
</optgroup>
<optgroup label='Non-fiction'>
<option value='science'>A New Kind of Science</option>
<option value='recursive'>The Recursive Universe</option>
</optgroup>
</$select>"/>
!! 生成列表
[[清单小工具|ListWidget]] 可用以生成选择小工具的选项。例如,在此我们结合选择小工具栏出所有标签为 ''TableOfContents'' 的条目与嵌入显示所选条目的内文。
<$macrocall $name="wikitext-example-without-html" src="<$select tiddler='$:/generated-list-demo-state'>
<$list filter='[tag[TableOfContents]]'>
<option><$view field='title'/></option>
</$list>
</$select>
<$tiddler tiddler={{$:/generated-list-demo-state}}>
<$transclude mode='block'/>
</$tiddler>"/>
!! 嵌套列表
此示例使用嵌套清单小工具。外圈生成 `<optgroup>` 元素,内圈则生成 `<option>` 元素:
<$macrocall $name="wikitext-example-without-html" src="<$select tiddler='$:/generated-list-demo-nestedstate' field='type' default='text/vnd.tiddlywiki'>
<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group]]'>
<optgroup label={{!!group}}>
<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]'>
<option value={{!!name}}><$view field='description'><$view field='title'/></$view> (<$view field='name'/>)</option>
</$list>
</optgroup>
</$list>
</$select>"/>
!! 多重选取
此示例使用 `multiple` 关键字来指定我们能够选取多个项目。
<$macrocall $name="wikitext-example-without-html" src="<$select tiddler='$:/generated-list-demo-state' field='testing' multiple size='8'>
<$list filter='[tag[TableOfContents]]'>
<option><$view field='title'/></option>
</$list>
</$select><br />
<$list filter='[list[$:/generated-list-demo-state!!testing]]'>
<$view field='title' /><br />
</$list>
"/>
语义颜色是 CSS 集,用于将丰富多彩的主题应用於单个条目,以便进行分类。
{{!!url}}
Tiddlywiki "semantic colors" 有两个目标:
# 如何简单地将主题应用於单个条目
# 使用语义颜色进行分类
;一些用例
:学习材料 (每个主题,类别可以有专门的语义颜色,像学习外语)
:幻灯片 (段落分隔线,每个部分都可以有语义颜色)
:书籍和教程 (不同的语意颜色可以应用于章节、特定的主题,例如,示例条目)
:视觉标签 (而不是寻找标签栏,看看这个主题 (条目) 属于什么类别, 你可以通过它的语义颜色来识别它)
<<.from-version "5.1.20">>
另请参阅 [[lowercase Operator]]、[[uppercase Operator]]、[[titlecase Operator]]。
<<.operator-examples "sentencecase">>
<<.operator-example 1 "[[abc def ghi jkl]sentencecase[]]">>
<<.operator-example 2 "[[abc deF gHi jKL]sentencecase[]]">>
<<.operator-example 3 "[[abc deF gHi jKL]lowercase[]sentencecase[]]">>
<<.operator-example 4 "[tag[HelloThere]sentencecase[]]">>
''注意,现已弃用 `--server` 命令,请使用新的 ListenCommand''。
有关 TiddlyWiki 的网页服务器功能的详细信息,请参阅 WebServer。
{{$:/language/Help/server}}
[[Termux|https://termux.com/]] 是一个开源的 android 应用程序,提供有限的 Unix 环境,让用户可以在 android 中,安装 [[Node.js]] 和 npm 模块。用户可以使用 [[Termux|https://termux.com/]] 安装并运行 [[Node.js 上的 TiddlyWiki |TiddlyWiki on Node.js]]。
!! 简介
* 从 [[Google Play Store|https://play.google.com/store/apps/details?id=com.termux]] 或 [[Fdroid|https://f-droid.org/en/packages/com.termux/]] 下载并安装 Termux
* 打开 termux 逐个运行以下命令
```
apt update
apt upgrade
apt install nodejs
npm install -g tiddlywiki
```
* 如果您需要从内部保存创建/服务 ''~TiddlyWiki on Node.js'',则需要通过在 termux 运行以下指令来授予 termux 保存权限
```
termux-setup-storage
```
* 现在,您可以在内部存储中创建和服务 ''~TiddlyWiki on Node.js'' 。在以下的示例中,用户正在其内部文件夹中创建一个名为 "mynewwiki" 的新维基。
```
cd storage/shared
tiddlywiki mynewwiki --init server
tiddlywiki mynewwiki --listen
```
* 在您的浏览器中造访 http://127.0.0.1:8080/
* 从那时起,只要 //Termux// 未关闭,您可以随时从网页浏览器,指向预期的地址和端口访问您的维基。
---
* 有关 ~TiddlyWiki on Node.js 的更多信息,请参阅[[在 Node.js 上安装 TiddlyWiki|Installing TiddlyWiki on Node.js]]
* 有关 termux 的的详细信息和提示,请参阅 [[Termux wiki|https://wiki.termux.com/wiki/Main_Page]]
<<.tip "在 //Termux// 中,您不妨安装 //git//、//emacs// 或 //vi//,以便编辑和维护单个条目文件。这大概也需要为您的 Android 附加功能更强大的键盘,像是[[黑客用的键盘|https://github.com/klausw/hackerskeyboard/]]应用程序或蓝牙外部设备。">>
{{$:/language/Help/setfield}}
''网站图标''是大多数浏览器显示以帮助用户识别网站的小图标。请注意,所有浏览器都支持 bitmap 图像,但只有某些现代浏览器支持 SVG 格式的图标。
! 在浏览器中的网站图标
TiddlyWiki 在浏览器中启动时,找到名称为 [[$:/favicon.ico]] 的条目,并动态使用为该页面图标。如果您修改图像,则网站图标立即更换以反映之。
! 在服务器上的网站图标
在服务器上,ServerCommand 将条目 [[$:/favicon.ico]] 转换到路径 `/favicon.ico`。
# 导入您的图片为条目 (见 [[Images in WikiText]])
#* 您还可以使用[[外部图像|ExternalImages]]
# 开启 <<.icon $:/core/images/options-button>> [[控制台|$:/ControlPanel]]并切换至''视觉外观''/''Theme Tweaks'' 页签
# 自下拉式 "Page background image" 的菜单中选择您的图片
# 设置 "Page background image attachment" 为 "Fixed to window" 使背景保持固定且内容卷动至其顶部;或为性能考量,设为 "Scroll with tiddlers" 使其移动 (请注意:iPhone/iPad [[不支持固定的设置|http://stackoverflow.com/a/20444219]])
# 设置 "Page background image size" 如下:
#* ''Auto'' 使背景图像平铺于页面背景
#* ''Cover'' 使背景图像大小完全覆盖页面。有些图像可能会剪裁
#* ''Contain'' 使背景图像大小适合页面
请注意 ''DarkPhotos'' 调色板提供使侧边栏更具可读性于黑暗的背景图像。
`<$setvariable>` 小工具与 `<$set/>` 同义:详细信息,请参阅 SetWidget。
! 简介
`<$set>` 小工具将一个值分配给指定的[[变量|Variables]],新的变量值可用于该 `<$set>` 小工具的内容。
! 内容与属性
`<$set>` 小工具的内容是分配给该变量的值的范围。
|!属性 |!说明 |
|name |欲指定的变量名称 (默认为 <<.vlink currentTiddler>>) |
|value |如果未指定 <<.attr filter>> 属性,或不为空值时,指定给变量的值 |
|tiddler |<<.from-version "5.1.15">> 可选的条目名称,从中读取值 |
|subtiddler |<<.from-version "5.1.16">> 可选地由 ''tiddler'' 属性,指定标识的插件条目内的子条目名称 |
|field |<<.from-version "5.1.15">> 可选的条目字段,从中读取值 (只用于使用 ''tiddler'' 时) |
|index |<<.from-version "5.1.15">> 可选的条目索引,从中读取值 (只用于使用 ''tiddler'' 时) |
|filter |进行处理并赋值给变量的可选筛选器(见以下 "筛选后的清单变量赋值")。该变量可用于 <<.olink enlist>> 操作符 |
|select |<<.from-version "5.1.14">> 从筛选器输出返回项目的一个可选的基于零的索引(见下文) |
|emptyValue |如果指定的值丢失或为空,则指定此值给变量(见下文) |
<<.tip """如果变量的值包含在双方括弧中,这可能表示您正在从筛选器返回值的清单。若要使用不带双方括弧的筛选器输出中的单个标题,请参阅下面的''筛选后的项目变量赋值''。""">>
! 示例
!! 简单变量赋值
使用设置变量小工具的最简单的方式是给变量分配一个字符串。下面的示例指定一个字符串
<<<
<$macrocall $name='wikitext-example-without-html'
src='<$set name="myVariable" value="Some text">
<$text text=<<myVariable>>/>
</$set>' />
<<<
名称和值的属性可以被嵌入。例如:
<<<
<$macrocall $name='wikitext-example-without-html'
src='<$set name=anotherVariable value="myVariable">
<$set name=<<anotherVariable>> value={{$:/language/DefaultNewTiddlerTitle}}>
<$text text=<<myVariable>>/>
</$set>
</$set>' />
<<<
!! 条件变量赋值
这种形式的设置变量小工具,根据筛选器的处理结果是否为一个空的清单,可以选择两个指定的值其中之一。下面示例为依据当前条目是否为 "myMagicTitle",设置一个变量,:
<<<
<$macrocall $name='wikitext-example-without-html'
src="""<$set name="myVariable" filter="[all[current]field:title[myMagicTitle]]" value="It's magic" emptyValue="It's not magic">
<$text text=<<myVariable>>/>
</$set>""" />
<<<
!! 筛选后的清单变量赋值
这种形式的设置变量小工具,将处理筛选器并将以空格分隔的清单结果赋给该变量(包含空格的名称则使用双重方括弧)。
<<<
<$macrocall $name='wikitext-example-without-html'
src='<$set name="myVariable" filter="[tag[HelloThere]]">
<$text text=<<myVariable>>/>
</$set>' />
<<<
!! 筛选后的项目变量赋值
<<.from-version "5.1.14">> 这种形式的设置变量小工具,将处理筛选器并将结果赋给该变量为单一项目(即,包含空格的名称则不使用双重方括弧)。
<<<
<$macrocall $name='wikitext-example-without-html'
src='<$set name="myVariable" filter="[tag[HelloThere]]" select="0">
<$text text=<<myVariable>>/>
</$set>'/>
<<<
!! 嵌入的变量赋值
<<.from-version "5.1.15">> 这种形式的设置变量小工具,要从条目字段或索引中,取得将分配给该变量的值。例如:
<<<
<$macrocall $name='wikitext-example-without-html'
src='<$set name="myVariable" tiddler="HelloThere" field="list">
<$text text=<<myVariable>>/>
</$set>'/>
<<<
上面的例子也可以写成 `<$set name="myVariable" value={{HelloThere!!text}}>`。使用 ''tiddler'' 属性的优点,是此条目名称和字段或索引可以自己计算。例如:
<<<
<$macrocall $name='wikitext-example-without-html'
src='<$set name="myTiddler" value="HelloThere">
<$set name="myVariable" tiddler=<<myTiddler>> field={{$:/docs/anyField!!field}}>
<$text text=<<myVariable>>/>
</$set>
</$set>'/>
<<<
依次处理每个输入的名称。若其为一影子条目,则[[主导追加|Dominant Append]]其插件条目的名称到输出。非影子条目则不输出。
<<.operator-examples "shadowsource">>
<<.operator-example 1 "[[$:/core/copyright.txt]shadowsource[]]">>
<<.operator-example 2 "$:/core/copyright.txt $:/plugins/tiddlywiki/railroad/parser.js +[shadowsource[]]">>
\define actions()
<$action-setfield $tiddler="$:/state/tab/moresidebar-1850697562" $field="text" $value="$:/core/ui/MoreSideBar/Shadows"/>
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" $field="text" $value="$:/core/ui/SideBar/More"/>
\end
\define click(text)
<$button actions=<<actions>>>$text$</$button>
\end
[[影子条目|ShadowTiddlers]]是来自[[插件|Plugins]]内加载的条目。与一般条目不同的是它们不出现在大多数清单。
[[影子条目|ShadowTiddlers]]可以被具有相同名称的普通条目覆写。如果随后删除了该条目,则将自动还原为原始的影子条目。
!! 已被覆写地影子条目
<<list-links "[is[tiddler]is[shadow]sort[title]]">>
!! 影子条目
可以在侧边栏的 "更多" -> "默认" 选项卡中找到一个完整的影子条目的列表
<div class="tc-message-box">除非您确切了解其功能,否则请勿安装此插件</div>
这个实验性插件提供了通过 URL 共享条目的工具,其中包括:
* 能够在启动时,从浏览器位置哈希值中加载一组条目
* 向导和模板,用于从一组条目创建 URL
你可以操作存放于 Dropbox 的 TiddlyWiki 文件,并发布任何人都可以用唯读方式查看文件的 URL。
# 保存 TiddlyWiki 文件于你的 Dropbox 文件夹
# 选择 Dropbox 的 "分享链接" 选项以取得一个该文件的公开网址
#* 于 Dropbox 的网页界面, 当你悬停于一文件时点击该链接图标可得该网址。 若使用 OSX 的 Finder 或是 Windows 的 Internet Explorer,Dropbox 也在右键菜单中增加 "分享链接" 的项目。
# Dropbox 生成的网址将如下列格式:
#> `https://www.dropbox.com/s/<gobbledegook>/mywiki.html`
# 修改网址如下,小心保留 gobbledegook:
#> `https://dl.dropboxusercontent.com/s/<gobbledegook>/mywiki.html`
其结果是一个 "私有" 网址,您可以发送给其他人,使他们能够看到该 wiki。
----
输入一个生成的 URL,您可以复制并粘贴该私有网址:
<$edit-text tiddler="$:/temp/dropboxurl" default="https://www.dropbox.com/s/<gobbledegook>/mywiki.html" tag="input" type="text" size="60"/>
<$macrocall $name="dropbox-url" url={{$:/temp/dropboxurl}}/>
与他人共享您的[[条目|Tiddlers]]或整个 TiddlyWiki 有许多方法:
* 附加 ~TiddlyWiki 到电子邮件
* 在线发布您的 ~TiddlyWiki,并取得一个链接来发送或给他人的消息:
** 一个链接到整个 ~TiddlyWiki 文件的网址
** 特定条目的[[引用链接|PermaLinks]] (<<.icon $:/core/images/permalink-button>>)
** 当前已打开的所有条目的[[固定链接|PermaView]](<<.icon $:/core/images/permaview-button>>)
* 从其他人在网络上发表的 ~TiddlyWikis 点击条目在其文件内的链接以取得条目,然后拖放链接到您自己的文件。导入条目会出现,然后点击导入条目到您的文件(参阅 [[导入条目|Importing Tiddlers]])
* [[分享 Dropbox 链接到您的 ~TiddlyWiki|Sharing a TiddlyWiki on Dropbox]]
* 以各种格式[[导出条目|How to export tiddlers]] (<<.icon $:/core/images/export-button>>) ,包括文本、静态 HTML 与 CSV (即试算表兼容)
* 也可以只是通过让他人造访您的 ~TiddlyWiki 分享条目,例如通过在线发布,以便他们可以从其[[导入条目|Importing Tiddlers]]
* 有一个实验性的[[共享插件|Share Plugin]],您可以通过 URL 位置哈希值来共享条目。
Shiraz 插件是一个在 ~Tiddlywiki 创建时尚的内容的非常小的框架。
{{!!url}}
Shiraz 插件包含扩充的标记、宏、样式,和许多客制化空白的 ~Tiddlywiki,可以用作 ''入门套件''。
Shiraz 的一些功能为:
* 客制化元素,如警示、卡片、皮肤、徽章
* 动态表格
* 可排序表格
* 按需显示、滑块和详细信息
* 图像、基本图宏、幻灯片和叠加图像、极性图像和漂亮图像
* 表格客制化工具
* 粘性页脚
* 多栏条目
* 多栏故事河
* 清单搜索
* 徽章状态
* 笔记本样式
* 测试实用程序
* 时尚按钮
将Shiraz 插件添加到任何 ~Tiddlywiki,将其转换为完整的生产工具。Shiraz 使用从 [[Bootstrap|https://getbootstrap.com/]] 修改的 CSS 类。
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "sign">>
<<.operator-example 1 "[[1.6]sign[]]">>
<<.operator-example 2 "[[-1.6]sign[]]">>
<<.operator-example 3 "[[0]sign[]]">>
创建一个 GitHub 上的请求,添加您的名字到 `cla-individual.md` 或 `cla-entity.md`,与(YYYY/MM/DD)格式的日期。
''步骤''
# 点击 [[licenses/CLA-individual|https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-individual.md]] 或 [[licenses/CLA-entity|https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-entity.md]] 依据您要签署为个人或组织的代表
# 确保左上角的 "branch" 下拉清单设置为 `tiddlywiki-com`
# 点击右上角的''编辑''按钮 (点击此按钮会复制此项目,这样您就可以编辑该文件)
# 在底部加上您的名字
#* 例如: `Jeremy Ruston, @Jermolene, 2011/11/22`
# 于 CLA 的文本编辑区下面,您应该看到一个 ''Propose file change'' 的按钮
# 输入一个简短的标题来说明此更改 (例如,"Signing the CLA")
# 点击绿色的 ''Propose file change'' 按钮
# 于接着的画面,点击绿色的d ''Create pull request'' 按钮
有时,您想保护个别条目免受意外变更,无论是来自您自己或您 ~TiddlyWiki 文件的访客。这里有几个简单的方法。请注意,这些不会提供强化保护,以防止故意攻击。
!! 使用样式表通过标签名称锁定条目
用以下内容创建一个条目,并设其标签为 `$:/tags/Stylesheet`:
```
.tc-tagged-Locked button[class*="tc-btn-%24%3A%2Fcore%2Fui%2FButtons%2Fedit"] {display: none;}
```
现在,标签为 "Locked" 的任何条目都将隐藏编辑按钮。要取回它,您需要打开前述样式表条目,并将其中的 "none" 改为 "inline"。
!! 使用嵌入,隐藏您的条目于系统条目中
* 打开您的条目进行编辑。
* 选择标题并拷贝。
* 选择所有的条目内容。
* 点击剪切工具。
* 在标题框中,输入 `$:/` ,然后粘贴原始标题。
* 使用默认值来剪切文本至一个新的条目,并将其替换为一个嵌入
现在您可以查看原来的条目的内容,但是编辑它们,您必须找到以 `$:/` 前缀的该条目。
用 TiddlyWiki 创建的一个简单的游戏,介绍于[[此帖|https://groups.google.com/d/topic/tiddlywiki/4aRpZht1vOs/discussion]]。
{{!!url}}
<<<
I decided to see if it was possible to make some sort of game using only the core tiddlywiki with no plugins or javascript. I made a very bare bones zork/interactive fiction type game. It is currently the simplest thing I could make and claim it was a game, but I may add on to it in the future. It uses the 5.1.5 prerelease because the action-setfield widget saved lots of work making macros.
One goal of this is to use nothing besides what is contained in the core tiddlywiki, so there is no javascript and no plugins.
<<<
Slider 是一个插件,用于创建一组有序的条目,也称为 Trail。
{{!!url}}
trail 可用于创建一系列选定的内容,例如逐步教程、指导性帮助、课程等等。
slider 插件用户界面包含三个部分
* 名为"trail "的侧边栏页签,用于管理 trail
* 每个trail 的仪表板(用于管理 trail 结构)
* trail 上的条目,也称为 slider
<<.from-version "5.1.23">> <<.olink slugify>> 运算符应用的转换遵循以下步骤:
* 如果有一个名称相同的条目,具有一个 ''slug'' 字段,则返回该字段而不是运行以下步骤
* 将大写字母替换为对等的小写字母
* 转译音调符号为其对等的基本小写 ASCII (例如,"Æ" 被转译为 "AE")
* 用破折号取代空格
* 删除除破折号和句点之外的所有非单字符
* 取代多个连序破折号为单一破折号
* 从开始与结束修剪破折号
* 如果结果是空字符串,则改为使用字符代码(例如。"&£@" 转换为 "38-163-64")
请注意,可能有多个标题插入到同一字符串中。<<.olink duplicateslugs>> 可用于提醒作者任何冲突。
<<.operator-examples "slugify">>
* 做笔记,并使用标记和超链接形成您的笔记之间的关系
* 使用页签、表格、基于标签的清单和目录变得有条理
* 将喜爱的网站标示书签 (请参阅示例:http://giffmex.org/experiments/tidmarks.html)
* 追踪任务和约会,并以多重标签将其组织管理 (请参阅[[工作管理示例|TaskManagementExample]])
* 盘存几乎任何东西:: 您的食谱、个人图书馆、连络人、音乐收藏和更多
* 创建一个博客或网站
* 写一本书
* 组织您的图片于图库 (请参阅[[图库示例|ImageGallery Example]])
* 与其他人分享您 ~TiddlyWiki 里的信息,一个在线的文件、文件附件、条目文件,或链接到特定的在线条目(尝试从一个 ~TiddlyWiki 文件点击并拖动一个条目到另一个 ~TiddlyWiki 文件,看看会发生什么)
* 画一个草图 (编辑 [[Motovun Jack.jpg]] 且开始绘制图像,看看会发生什么)
* 使用熟悉的网页式用户接口元素(例如灯箱) - 请参阅 SampleWizard
* 创建投影片演示文稿
* 设置整个本机或在线知识库,用一个中央 ~TiddlyWiki 文件链接到其他 ~TiddlyWiki 文件(http://recursos.giffmex.org 是一个西班牙文的在线示例)
* 设置使用条目作为数据的数据可视化 (请参阅 https://tiddlywiki.com/plugins/tiddlywiki/d3/)
<<.from-version "5.1.24">>
|''purpose'' |通过评估每个项的筛选器 run 的结果,对输入名称进行排序 |
|''input'' |从前面的筛选器 runs 的所有名称|
|''suffix'' |`:sort` 筛选器 run 前置码使用丰富的后缀,详情请参阅下文 |
|''output''|前面的筛选器 runs 的排序结果 |
每个输入名称从前面的 run 依次传递到此 run 。筛选器 run 将输入名称转换为排序所需的形式。例如,筛选器 run `[length[]]` 将每个输入名称转换为表示其长度的数字,从而根据输入名称的长度对输入名称进行排序。
请注意,在筛选器 run 中,"<<.var currentTiddler>>" 变量设置为正在处理的条目名称。这允许筛选器 runs 像是 `:sort:number[{!!value}divide{!!cost}]` 用于计算。该 run 之外的 <<.var currentTiddler>> 的值可在变量 "<<.var ..currentTiddler>>" 中提供。
`:sort` 筛选器 run 前置码使用延伸的语法,允许多个后缀,其中一些是必需的:
```
:sort:<type>:<flaglist>[...filter run...]
```
* ''type'': 必要的。确定如何比较输入项,并且可以是: ''string''、''alphanumeric'''、''number''、''integer''、''version'' 或 ''date''.
* ''flaglist'': 已逗号分隔的下列旗标列表:
** ''casesensitive'' 或 ''caseinsensitive'' (需要的类型 `string` 和 `alphanumeric`)。
** ''reverse'' 反转筛选器 runs 的顺序(可选)。
请注意,筛选器 runs 使用 `:sort` 前置码,应返回与被传递的相同数量的项。任何缺失的项将被视为零或空字符串。特别是,当使用 [[get 操作符|get Operator]] 检索字段的值时,使用 [[else 操作符|else Operator]]有助于防止缺少字段值。例如 `[get[myfield]else[default-value]...`.
[[示例|Sort Filter Run Prefix (Examples)]]
依标题长度排序:
<<.operator-example 1 "[all[tiddlers]] :sort:number[length[]] +[limit[10]]">>
依标题长度反向排序:
<<.operator-example 2 "[all[tiddlers]] :sort:number:reverse[length[]] +[limit[10]]">>
依文本长度排序:
<<.operator-example 3 "[all[tiddlers]] :sort:number[get[text]length[]] +[limit[10]]">>
依最新修改日期排序:
<<.operator-example 4 "[tag[Field Operators]] :sort:date[get[modified]else[19700101]] +[limit[10]]">>
依标题排序:
<<.operator-example 5 "[tag[Field Operators]] :sort:string:casesensitive[get[caption]] +[limit[10]]">>
依标题按反向排序:
<<.operator-example 6 "[tag[Field Operators]] :sort:string:casesensitive,reverse[get[caption]] +[limit[10]]">>
排序为区分大小写的文本:
<<.operator-example 7 "Apple Banana Orange Grapefruit guava DragonFruit Kiwi apple orange :sort:string:casesensitive[{!!title}]">>
排序为忽略大小写的文本:
<<.operator-example 8 "Apple Banana Orange Grapefruit guava DragonFruit Kiwi apple orange :sort:string:caseinsensitive[{!!title}]">>
忽略大写与小写字母的区别。比较 <<.olink sortcs>>。
<<.operator-examples "sort">>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]sort[]]">>
<<.operator-example 2 "[list[Days of the Week]!sort[]]">>
<<.operator-example 3 "one two Three four +[sort[]]">>
<<.operator-example 4 "[prefix[Tiddl]sort[text]]">>
<<.operator-example 5 "[has[created]sort[created]limit[10]]" "在此维基中最先创建的 10 个条目">>
忽略大写与小写字母的区别。
<<.operator-examples "sortan">>
这些例子使用 [[Apple]] 条目。
<<.operator-example 1 "[list[Apple]sortan[]]">>
<<.operator-example 2 "[list[Apple]!sortan[]]">>
<<.operator-example 3 "App-10-A App-9-B App-10-B App-9-A +[sortan[]]">>
<<.operator-examples "sortby">>
<<.using-days-of-week>>
<<.operator-example 1 "10 6 4 9 3 2 8 +[sortby[1 2 3 4 5 6 7 8 9 10]]">>
<<.operator-example 2 "Friday Tuesday Monday Thursday Sunday +[sortby{Days of the Week!!list}]">>
<<.operator-example 3 "1 Mon 5 Fri 4 Tue Sun 2 +[sortby{Days of the Week!!short}]">>
大写与小写字母被视为不同。比较 <<.olink sort>>。
<<.operator-examples "sortcs">>
<<.using-days-of-week>>
<<.operator-example 1 "one two Three four +[sortcs[]]">>
<<.operator-example 2 "one two Three four +[!sortcs[]]">>
输入标题清单中的每个项目依次传递给子筛选器。子筛选器将输入名称转换为排序所需的形式。例如,子筛选器 `[length[]]` 将每个输入名称转换为表示其长度的数字中的每个输入名称,从而根据它们的长度对输入名称排序。
请注意,在子筛选器中, "<<.var currentTiddler>>" 变量设为正在处理的条目名称。这样就可以将像 `[{!!value}divide{!!cost}]` 之类的子筛选器用于计算。
子筛选器外部的 <<.var currentTiddler>> 的值可用于 "<<.var ..currentTiddler>>" 变量中。<<.from-version "5.1.24">>
后缀 <<.place T>> 确定如何比较项目,可为:
* "string" (默认值)
* "number" - 无效的数字被解译为零
* "integer" - 无效整数被解译为零
* "date" - 无效日期被解译为 1st January 1970
* "version" - 无效版本被解译为 "v0.0.0"
* "alphanumeric" - 将输入项视为文数字 <<.from-version "5.1.24">>
请注意,子筛选器应返回与传递的项数相同。任何缺少的项将被视为零或空字符串。特别是,当使用 [[get 操作符|get Operator]] 检索字段的值时,使用 [[else 操作符|else Operator]] 有助于防止缺少字段值。例如 `[get[myfield]else[default-value]...`。
<<.operator-examples "sortsub">>
\define show-variable(name)
<li>''$name$'': <code><$text text=<<$name$>>/></code></li>
\end
<$vars
compare-by-title-length="[length[]]"
compare-by-text-length="[get[text]else[]length[]]"
compare-by-newest-of-modified-and-created-dates="[get[modified]else[19700101]]"
>
这些示例使用以下变量:
<ul>
<<show-variable compare-by-title-length>>
<<show-variable compare-by-text-length>>
<<show-variable compare-by-newest-of-modified-and-created-dates>>
</ul>
<<.operator-example 1 "[sortsub:number<compare-by-title-length>limit[10]]">>
<<.operator-example 2 "[!sortsub:number<compare-by-title-length>limit[10]]">>
<<.operator-example 3 "[sortsub:number<compare-by-text-length>limit[10]]">>
<<.operator-example 4 "[!sortsub:number<compare-by-text-length>limit[10]]">>
<<.operator-example 5 "[tag[Field Operators]sortsub:date<compare-by-newest-of-modified-and-created-dates>]">>
{{How to remove stop words}}
</$vars>
由于 ~TiddlyWiki 是英国血统,它的英文文档使用[[英式拼法优先于美式的拼写|https://en.wikipedia.org/wiki/American_and_British_English_spelling_differences]]。
单字 <<.word "customise">> 拼写为 <<.word "-ise">>,而非 <<.word "-ize">>。像是单字 <<.word colour>> 的拼写也使用英式英语,除非他们被用于在代码中,像是在 CSS 或 JavaScript 的保留字。
专业术语首字母缩写应以大写形式并省略句点:<<.word HTML>> 而非 <<.word html>> 或 <<.word H.T.M.L.>>
避免随意缩写单词和句子,但下列缩写是可以接受的:
|!缩写|!含义 |!注意事项 |
|e.g. |例如 |每个字母之后跟着一个句点 |
|i.e. |亦即 |每个字母之后跟着一个句点 |
|etc |等等 |没有句点 |
<<.from-version "5.1.20">>
请注意,在某些情况下, <<.op split>> 运算符将在结果列表中包含空白项。例如,
```
[[the band thethe are the best the]split[the]]
```
返回以下结果:
```
["", " band ", "", " are ", " best ", ""]
```
预期结果为:
```
[" band ", " are ", " best "]
```
空白项标记匹配之间的边界。如果它们不是必需的,可以用 [[is Operator]] 的 ''blank'' 类别删除之:`[[the band thethe are the best the]split[the]!is[blank]]`。
空白项可能有用的原因,是它们允许从 [[split operator]] 或 [[splitregexp Operator]] 和 [[join Operator]] 的组合建构搜索和替换操作。例如:
<<.operator-example 1 "[[the band thethe are the best the]split[the]join[every]]">>
<<.operator-examples "split">>
<<.operator-example 1 "[[a b c d e]split[ ]]">>
<<.operator-example 2 "[[Mississippi]split[i]]">>
依次处理每个输入的名称。
* 包含 <<.place S>> 的名称提供一切直至并包括 <<.place S>>。
* 不包含 <<.place S>> 的名称干脆提供自身到输出。
每个[[主导追加|Dominant Append]]到输出。
<<.clink "`toc`" "Table-of-Contents Macros">> 宏使用此运算符用 `/` 当作其参数。
<<.operator-examples "splitbefore">>
<$macrocall $name=".operator-example" n="1" eg="2015-01-26 2014-07-19 2013 +[splitbefore[-]]"/>
<$macrocall $name=".operator-example" n="2" eg="[[green trees]splitbefore[ee]]"/>
<<.from-version "5.1.20">>
请注意,在某些情况下, <<.op splitregexp>> 运算符将在结果列表中包含空白项。例如,
```
[[the band thethe are the best the]splitregexp[the]]
```
返回以下结果:
```
["", " band ", "", " are ", " best ", ""]
```
预期结果为:
```
[" band ", " are ", " best "]
```
空白项标记匹配之间的边界。如果它们不是必需的,可以用 [[is Operator]] 的 ''blank'' 类别删除之:`[[the band thethe are the best the]splitregexp[the]!is[blank]]`。
空白项可能有用的原因,是它们允许从 [[split operator]] 或 [[splitregexp Operator]] 和 [[join Operator]] 的组合建构搜索和替换操作。例如:
<<.operator-example 1 "[[nobody, really; wants; to see -- all this \punctuation]splitregexp[,|;|-|\\]join[...]]">>
正则表达式中的语法错误,将导致筛选器返回错误消息。例如:
<<.operator-example 2 "[[the cat sat on the mat]splitregexp[\]]">>
<<.operator-examples "splitregexp">>
<<.operator-example 1 "a=b-c=d-e +[splitregexp[=|-]]">>
<<.from-version "5.1.24">> 相关概述,请参阅[[数学操作符|Mathematics Operators]]。
<<.tip """ `standard-deviation` 操作符将输入视为完整的母体,而不是样本""">>
<<.operator-examples "standard-deviation">>
<<.operator-example 1 "=1 =3 =4 =5 +[standard-deviation[]]">>
请注意,如果没有输入,则操作符返回 `NaN`
<<.operator-example 2 "[title[NotATiddler]get[price]] +[standard-deviation[]]">>
史丹佛大学 JavaScript 加密程序库,是史丹佛大学电脑安全实验室创建的一个项目,一个安全、强大、快速、小、便于使用、跨浏览器的 JavaScript 加密程序库。
{{!!url}}
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="34 26 601 430" width="601pt" height="430pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.0.5 <dc:date>2014-08-14 08:00Z</dc:date></metadata><defs><font-face font-family="Menlo" font-size="11" panose-1="2 11 6 9 3 8 4 2 2 4" units-per-em="1000" underline-position="-63.476562" underline-thickness="43.945312" slope="0" x-height="546.875" cap-height="729.0039" ascent="928.22266" descent="-235.83984" font-weight="500"><font-face-src><font-face-name name="Menlo-Regular"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#bdbdbd"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Menlo" font-size="8" panose-1="2 11 6 9 3 8 4 2 2 4" units-per-em="1000" underline-position="-63.476562" underline-thickness="43.945312" slope="0" x-height="546.875" cap-height="729.0039" ascent="928.22266" descent="-235.83984" font-weight="500"><font-face-src><font-face-name name="Menlo-Regular"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Startup Tasks</title><g><title>Layer 2</title><rect x="36.850393" y="28.346457" width="198.4252" height="425.19685" stroke="#bbb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(41.850393 33.346457)" fill="gray"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="gray" x="71.033643" y="10" textLength="46.35791">浏览器</tspan></text><rect x="235.27559" y="28.346457" width="198.4252" height="425.19685" stroke="#bbb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(240.27559 33.346457)" fill="gray"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="gray" x="47.854688" y="10" textLength="92.71582">浏览器 + 服务器</tspan></text><rect x="433.70078" y="28.346457" width="198.4252" height="425.19685" stroke="#bbb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(438.70078 33.346457)" fill="gray"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="gray" x="74.34492" y="10" textLength="39.735352">服务器</tspan></text></g><g><title>Layer 1</title><a xl:href="#load-modules"><rect x="289.13386" y="73.03937" width="90" height="24" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(294.13386 78.53937)" fill="#242b32"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="#242b32" x="0" y="10" textLength="79.470703">load-modules</tspan></text></a><a xl:href="#startup"><rect x="291.81496" y="175.08661" width="57" height="24" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(296.81496 180.58661)" fill="#242b32"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="#242b32" x="0" y="10" textLength="46.35791">startup</tspan></text></a><rect x="107.56299" y="186.4252" width="57" height="24" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112.56299 191.9252)" fill="#242b32"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="#242b32" x="0" y="10" textLength="46.35791">favicon</tspan></text><rect x="314.64567" y="384.8504" width="44" height="24" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(319.64567 390.3504)" fill="#242b32"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="#242b32" x="0" y="10" textLength="33.112793">story</tspan></text><rect x="104.08661" y="421.03937" width="50" height="24" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(109.08661 426.53937)" fill="#242b32"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="#242b32" x="0" y="10" textLength="39.735352">render</tspan></text><rect x="141.58268" y="129.59348" width="37" height="24" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(146.58268 135.09348)" fill="#242b32"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="#242b32" x="0" y="10" textLength="26.490234">info</tspan></text><rect x="82.204724" y="84.37795" width="116" height="24" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(87.204724 89.87795)" fill="#242b32"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="#242b32" x="0" y="10" textLength="105.96094">google-analytics</tspan></text><line x1="321.93996" y1="175.08661" x2="331.18036" y2="106.84983" marker-end="url(#FilledArrow_Marker)" stroke="#bdbdbd" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="313.3741" y="132.649916" width="27" height="12" fill="white"/><text transform="translate(314.3741 134.149916)" fill="#8c8c8c"><tspan font-family="Menlo" font-size="8" font-weight="500" fill="#8c8c8c" x=".45898438" y="7" textLength="24.082031">after</tspan></text><line x1="164.56299" y1="196.67135" x2="281.93365" y2="189.44854" marker-end="url(#FilledArrow_Marker)" stroke="#bdbdbd" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="210.47113" y="187.01546" width="27" height="12" fill="white"/><text transform="translate(211.47113 188.51546)" fill="#8c8c8c"><tspan font-family="Menlo" font-size="8" font-weight="500" fill="#8c8c8c" x=".45898438" y="7" textLength="24.082031">after</tspan></text><line x1="173.68093" y1="338.64567" x2="305.32248" y2="385.66296" marker-end="url(#FilledArrow_Marker)" stroke="#bdbdbd" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="223.99094" y="356.15047" width="31" height="12" fill="white"/><text transform="translate(224.99094 357.65047)" fill="#8c8c8c"><tspan font-family="Menlo" font-size="8" font-weight="500" fill="#8c8c8c" x=".05078125" y="7" textLength="28.898438">before</tspan></text><line x1="154.08661" y1="428.6805" x2="304.8928" y2="402.38667" marker-end="url(#FilledArrow_Marker)" stroke="#bdbdbd" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="209.1524" y="410.7257" width="27" height="12" fill="white"/><text transform="translate(210.1524 412.2257)" fill="#8c8c8c"><tspan font-family="Menlo" font-size="8" font-weight="500" fill="#8c8c8c" x=".45898438" y="7" textLength="24.082031">after</tspan></text><line x1="178.58268" y1="135.58231" x2="287.78717" y2="100.09871" marker-end="url(#FilledArrow_Marker)" stroke="#bdbdbd" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="220.46091" y="111.58837" width="27" height="12" fill="white"/><text transform="translate(221.46091 113.08837)" fill="#8c8c8c"><tspan font-family="Menlo" font-size="8" font-weight="500" fill="#8c8c8c" x=".45898438" y="7" textLength="24.082031">after</tspan></text><rect x="470.55118" y="419.06668" width="63" height="24" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(475.55118 424.56668)" fill="#242b32"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="#242b32" x="0" y="10" textLength="52.98047">commands</tspan></text><line x1="470.55118" y1="424.5505" x2="368.3404" y2="403.40686" marker-end="url(#FilledArrow_Marker)" stroke="#bdbdbd" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="409.2626" y="408.6648" width="27" height="12" fill="white"/><text transform="translate(410.2626 410.1648)" fill="#8c8c8c"><tspan font-family="Menlo" font-size="8" font-weight="500" fill="#8c8c8c" x=".45898438" y="7" textLength="24.082031">after</tspan></text><rect x="101.582676" y="314.64567" width="77" height="24" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(106.582676 320.14567)" fill="#242b32"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="#242b32" x="0" y="10" textLength="66.225586">rootwidget</tspan></text><line x1="335.71143" y1="384.8504" x2="322.01761" y2="208.95675" marker-end="url(#FilledArrow_Marker)" stroke="#bdbdbd" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="315.45967" y="292.12576" width="27" height="12" fill="white"/><text transform="translate(316.45967 293.62576)" fill="#8c8c8c"><tspan font-family="Menlo" font-size="8" font-weight="500" fill="#8c8c8c" x=".45898438" y="7" textLength="24.082031">after</tspan></text><line x1="155.57997" y1="314.64567" x2="296.99001" y2="205.14779" marker-end="url(#FilledArrow_Marker)" stroke="#bdbdbd" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="211.75224" y="254.69641" width="27" height="12" fill="white"/><text transform="translate(212.75224 256.19641)" fill="#8c8c8c"><tspan font-family="Menlo" font-size="8" font-weight="500" fill="#8c8c8c" x=".45898438" y="7" textLength="24.082031">after</tspan></text><rect x="92.90551" y="243.11811" width="63" height="24" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(97.90551 248.61811)" fill="#242b32"><tspan font-family="Menlo" font-size="11" font-weight="500" fill="#242b32" x="0" y="10" textLength="52.98047">password</tspan></text><line x1="155.90551" y1="244.17942" x2="282.4628" y2="200.23115" marker-end="url(#FilledArrow_Marker)" stroke="#bdbdbd" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="205.85544" y="216.14581" width="27" height="12" fill="white"/><text transform="translate(206.85544 217.64581)" fill="#8c8c8c"><tspan font-family="Menlo" font-size="8" font-weight="500" fill="#8c8c8c" x=".45898438" y="7" textLength="24.082031">after</tspan></text><line x1="178.58268" y1="146.846" x2="282.29137" y2="176.29096" marker-end="url(#FilledArrow_Marker)" stroke="#bdbdbd" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="215.94566" y="155.85485" width="31" height="12" fill="white"/><text transform="translate(216.94566 157.35485)" fill="#8c8c8c"><tspan font-family="Menlo" font-size="8" font-weight="500" fill="#8c8c8c" x=".05078125" y="7" textLength="28.898438">before</tspan></text></g></g></svg>
在启动过程中,TiddlyWiki 运行以下系统标签的条目中的所有 ActionWidget:
* 初始启动期间运行:
** <<tag "$:/tags/StartupAction">> (运行于所有平台)
** <<tag "$:/tags/StartupAction/Browser">> (仅运行于浏览器时运行)
** <<tag "$:/tags/StartupAction/Node">> (仅运行于 Node.js 时运行)
* 启动后运行:
** <<.from-version "5.1.23">> <<tag "$:/tags/StartupAction/PostRender">> (仅运行于浏览器时运行)
!! 初始启动操作
初始启动操作对于根据环境因素(如屏幕幕尺寸)自定义 TiddlyWiki 很有用。例如,当放置在标签 `$:/tags/StartupAction/Browser` 的条目中时,以下操作小工具将在屏幕宽度小于 1000 像素时,默认隐藏侧边栏:
```
<$reveal type="lt" state="$:/info/browser/screen/width" text="3000">
<$action-setfield $tiddler="$:/state/sidebar" $value="no"/>
</$reveal>
<$reveal type="gteq" state="$:/info/browser/screen/width" text="3000">
<$action-setfield $tiddler="$:/state/sidebar" $value="yes"/>
</$reveal>
```
<<.from-version "5.1.20">> 本示例切换到与浏览器回报的语言相匹配的语言插件:
```
<$action-setfield $tiddler="$:/language" text={{{ [[$:/languages/en-GB]] [plugin-type[language]sort[description]removeprefix[$:/languages/]] +[prefix{$:/info/browser/language}] ~[[en-GB]] +[addprefix[$:/languages/]] }}}/>
```
请注意,默认情况下,全局宏在初始启动操作条目中无效。若需要访问,则需要在条目顶部,以一个 ''import'' [[编译指示|Pragma]]明确地包含它们:
```
\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]
```
!! 渲染后启动操作
<<.from-version "5.1.23">> 渲染后启动操作发生在 TiddlyWiki 用户界面呈现后。这样可以运行依赖于渲染显示的操作。(例如显示模块。).
启动机制于[[引导进程|BootMechanism]]结束后,运行已安装的启动模块。
! 启动模块
模块的 ''module-type'' 字段设置为 `startup`:
* 必须导出一个 `startup` 功能函数
** 对于同步启动模块的启动函数被称为 `startup()`,异步模块传递其运行完成后必须调用的函数: `startup(callback)`
* 可导出 `name` 属性,用来识别该任务
* 可导出 `after` 属性,包含的数组名称必须在这之前已运行的相关任务
* 可导出 `before` 属性,包含的数组名称必须在这之后运行的任务的名称
* 可导出 `platforms` 属性,包含的平台的数组名称依所需启动模块要运行的顺序。已定义的平台 ''node'' and ''browser''。若未设置 `platforms` 属性值,则缺省为 `["node","browser"]`
! 启动时处理
启动模块是跟据其声明的相依性循序运行。
不保证共用同样的依赖关系的任务的运行顺序。
! 启动模块
核心定义了下列启动模块:
{{Startup Modules.svg}}
TiddlyWiki 的[[状态机制|StateMechanism]]是可从 WikiText 被创建的何其复杂的用户界面内核。
在浏览器中,是由动态呈现条目 [[$:/core/ui/PageTemplate]] 来生成 TiddlyWiki 的显示。通过各种嵌入和其他小工具,呈现的整个用户界面。动态呈现是通过一种称为 "绑定" 的机制来完成︰在存储区中的条目的任何更改,都将动态地反映出在浏览器中显示。
组成 TiddlyWiki 显示的模板堆栈极为复杂,但我们会专注于显示打开中的条目︰
```
<$list filter="[list[$:/StoryList]]" history="$:/HistoryList" template="$:/core/ui/ViewTemplate" editTemplate="$:/core/ui/EditTemplate" storyview={{$:/view}} />
```
分解应用于清单小工具的属性︰
* ''filter'': 于条目 [[$:/StoryList]] 的 `list` 字段中,选择条目清单。如果从该清单中添加或删除一个条目,则它将自动反映在显示的清单中
* ''history'': 参考被用来存放历史堆栈的条目(见 NavigationMechanism)
* ''template'': 标识要用于呈现清单中的每个条目的模板条目
* ''editTemplate'': 标识要用于在[[草稿模式|DraftMechanism]]的呈现条目的不同模板条目
* ''storyview'': 指定要使用的查看模式(例如,classic 或 zoomin)
[[$:/StoryList]] 条目是一个[[状态条目|StateTiddler]]的示例︰一个用来保存用户界面状态的条目。通过更改底层的状态条目,对用户界面进行间接更改,并让 TiddlyWiki 通过用户界面连带更改。
请注意,此方法如何使得在边栏中的''打开''页签非常易于实现︰它只是另一个引用相同的状态条目的清单小工具,但使用不同的模板︰
```
<$list filter="[list[$:/StoryList]]" history="$:/HistoryList" storyview="pop">
<$button message="tm-close-tiddler" class="tc-btn-invisible tc-btn-mini">×</$button> <$link />
</$list>
```
现在考虑条目模板内的信息面板的实现。我们希望能够切换信息面板的打开和关闭,这意味着我们必须在条目追踪其当前状态。
然而,我们不能追踪在一个称为 [[$:/InfoPanelState]] 条目的状态,因为每个条目将共用相同的状态;更改条目的值会影响打开中的所有条目。
解决方法是,我们需要为每个状态条目动态生成一个唯一的名称。我们需要确保每次呈现用户界面元素都生成相同的状态条目名称。要做到这一点,我们将导致当前的呈现位置的每个嵌入的堆栈追加表示权杖在一起。然后将符号的字符串行哈希运算为一个简单的数值。
生成状态条目名称的过程系封装于 <<.mlink qualify>> 宏。
"故事河" (有时缩写为 "故事") 是显示主栏中的一串行[[条目|Tiddlers]]。
当条目被查看或编辑时,在[[小工具树|Widgets]]分支中的 <<.def storyTiddler>> [[变量|Variables]]包含该条目的名称。
缺省的[[查看范本|$:/core/ui/ViewTemplate]]和[[编辑范本|$:/core/ui/EditTemplate]] 初始化 <<.var storyTiddler>> 为 <<.vlink currentTiddler>> 变量的值。这将依序由 <<.wlink ListWidget>> 小工具设置于[[页面范本的相关部分|$:/core/ui/PageTemplate/story]]。
<<.var storyTiddler>> 未定义于故事河之外,例如在侧边栏。
<<.variable-examples "storyTiddler">>
<$macrocall $name=".example" n="1"
eg="""<ol>
<$list filter="[prefix[J]]">
<li><<currentTiddler>>, <<storyTiddler>></li>
</$list>
</ol>"""/>
名称是那些由[[模块|Modules]]导出,其 <<.field module-type>> 字段值为 <<.value storyview>>。
<<.operator-examples "storyviews">>
<<.operator-example 1 "[storyviews[]]">>
进行以下替换:
|!字符 |!替代字符 |!条件 |
|`\` |`\\` |总是 |
|`"` |`\"` |总是 |
|`\r` (归位) |`\\r` |总是 |
|`\n` (换行) |`\\n` |总是 |
|`\x08` (退格) |`\\b` |总是 |
|`\x0c` (换页) |`\\f` |总是 |
|`\t` (定位) |`\\t` |总是 |
|从 0x00 到 0x1f 的字符|`\\x##` 其中 ## 是两个十六进制数字 |总是 |
|从 0x80 到 0xffff 的字符|`\\u####` 其中 #### 是四个十六进制数字 |若 `rawunicode` 尾码不存在 (默认) |
|从 0x80 到 0xffff 的字符|<<.from-version "5.1.23">> 不变的 |若 `rawunicode` 尾码存在 |
<<.from-version "5.1.23">> 如果存在尾码 `rawunicode`,则 0x80 以上的 Unicode 字符(如 ß, ä, ñ or 🎄)将不加改变地传递。如果没有尾码,它们将被替换为 `\\u` 代码,这是 5.1.23 之前默认的行为。
<<.note """技术说明:基本多语种平面之外的字符,如🎄 和其他表情符号,将被编码为 UTF-16 代理对,即使用两个 `\u` 串行。""">>
另请参阅 [[jsonstringify Operator]].
<<.operator-examples "stringify">>
<<.operator-example 1 """[[标题带有 "双引号" 和引号 ' 和 \反斜线]] +[stringify[]]""">>
<<.operator-example 2 """[[重音字符和表情符号 -> äñøßπ ⌛🎄🍪🍓 without suffix]] +[stringify[]]""">>
<<.operator-example 3 """[[重音字符和表情符号 -> äñøßπ ⌛🎄🍪🍓 with rawunicode suffix]] +[stringify:rawunicode[]]""">>
TiddlyWiki5 提供了一些特性来帮助您构建信息为[[条目|Tiddlers]],并为其间的关系进行建模:
* [[条目链接|TiddlerLinks]]
* [[标签|Tagging]]
* [[名称清单|Title List]]
* [[数据条目|DataTiddlers]]
! 样式及 CSS 类别
您可以使用这种结构指定 CSS 类别或样式给包裹的内容:
<<wikitext-example src:"@@.myStyle
* List One
* List Two
@@
">>
同样语法用于指定样式,例如:
<<wikitext-example src:"@@background-color:red;
* List One
* List Two
@@
">>
混合多个类别与样式,例如:
<<wikitext-example src:"@@.tc-tiddler-frame
@@width:400px;
Some text
@@
">>
下列核心[[宏|Macros]]可以易于构造[[样式|Cascading Style Sheets]]条目时,指定替代的特定浏览器的属性:
;`<<box-shadow shadow>>`
: `x-box-shadow` 属性
;`<<filter filter>>`
: `x-filter` 属性
;`<<transition transition>>`
: `x-transition` 属性
;`<<transform-origin origin>>`
: `x-transition-origin` 属性
;`<<background-linear-gradient gradient>>`
: `background-image` 属性的 `x-linear-gradient` 值
下列宏另以文档说明:
* <<.mlink colour>>
* <<.mlink datauri>>
这些宏皆定义于[[$:/core/macros/CSS]]条目。
.tc-site-title {
text-shadow: 2px 4px 6px gray
-webkit-animation: mymove 10s infinite; /* Chrome, Safari, Opera */
animation: mymove 20s infinite;
}
/* Chrome, Safari, Opera */
@-webkit-keyframes mymove {
50% {text-shadow: 2px 4px 6px gray;}
}
/* Standard syntax */
@keyframes mymove {
50% {text-shadow: 2px 4px 6px gray;}
}
<<.from-version "5.1.18">> 请注意,subfilter 筛选器操作符是在 5.1.18 版本中引入的,在早期版本中不可用。
<<.tip "文本筛选器操作数不能包含方括弧,但您可以通过使用变量来解决此问题:">>
```
<$set name="myFilter" value="[tag[one]]">
<$list filter="[all[tiddlers]subfilter<myFilter>]">
...
```
<<.tip "与对每个名称运行一个子筛选器,返回那些返回非空列表的名称 (并丢弃子筛选器的结果) 的类似[[筛选器|filter Operator]]进行比较">>
<<.operator-examples "subfilter">>
<<.operator-example 1 "[subfilter[one two three]addsuffix[!]]">>
<<.operator-example 2 "[subfilter{$:/StoryList!!list}]">>
<<.operator-examples "subtiddlerfields">>
<<.operator-example 1 "[[$:/core/copyright.txt]subtiddlerfields[$:/core]]">>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "subtract">>
<<.operator-example 1 "[[23]subtract[19]]">>
<<.operator-example 2 "=1 =2 =3 =4 +[subtract[4]]">>
<<.s-matching-is-case-sensitive>>
<<.operator-examples "suffix">>
<<.operator-example 1 "[suffix[.jpg]]">>
<<.operator-example 2 "[tag[task]!suffix[ing]]">>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "sum">>
<<.operator-example 1 "=1 =2 =3 =4 =5 +[sum[]]">>
<<.operator-example 2 "[tag[HelloThere]get[text]length[]sum[]]">>
<<.this-is-operator-example>>
[[系统标签|SystemTags]] `$:/tags/AboveStory` 标识元素放置在条目显示区顶部
[[系统标签|SystemTags]] `$:/tags/AdvancedSearch` 标识高级搜索元素
[[系统标签|SystemTags]] `$:/tags/AdvancedSearch/FilterButton` 标识高级搜索的筛选器按钮
[[系统标签|SystemTags]] `$:/tags/Alert` 标识警示
[[系统标签|SystemTags]] `$:/tags/BelowStory` 标识元素放置在故事河的底部
[[系统标签|SystemTags]] `$:/tags/ControlPanel` 标识控制台页签
[[系统标签|SystemTags]] `$:/tags/ControlPanel/Advanced` 标识控制台高级页签
[[系统标签|SystemTags]] `$:/tags/ControlPanel/Appearance` 标识控制台视觉外观页签
[[系统标签|SystemTags]] `$:/tags/ControlPanel/Info` 标识控制台信息页签
[[系统标签|SystemTags]] `$:/tags/ControlPanel/Saving` 标识保存配置
[[系统标签|SystemTags]] `$:/tags/ControlPanel/Settings` 标识控制台设置页签
[[系统标签|SystemTags]] `$:/tags/ControlPanel/Toolbars` 标识控制台工具栏自订页签
[[系统标签|SystemTags]] `$:/tags/EditorToolbar` 标识编辑器工具栏按钮
[[系统标签|SystemTags]] `$:/tags/EditorTools` 可用于在编辑模式条目工具栏中包括非按钮 UI 元素。对于按钮,请参阅 [[SystemTag: $:/tags/EditToolbar]].
[[系统标签|SystemTags]] `$:/tags/EditPreview` 标识自订预览窗格
[[系统标签|SystemTags]] `$:/tags/EditTemplate` 标识编辑模板
[[系统标签|SystemTags]] `$:/tags/EditToolbar` 标识编辑模式条目工具栏
[[系统标签|SystemTags]] `$:/tags/Exporter` 标识导出模块
[[系统标签|SystemTags]] `$:/tags/Filter` 标识高级搜索示例筛选器下拉清单中的筛选器
[[系统标签|SystemTags]] `$:/tags/Image` 标识 (核心) 图像
[[系统标签|SystemTags]] `$:/tags/ImportPreview` 标识用于导入清单的预览类型
[[系统标签|SystemTags]] `$:/tags/KeyboardShortcut` 定义具此标签的条目为[[快捷键条目|Keyboard Shortcut Tiddler]],其为一个''动作的容器'',当其 `key` 字段中相应的[[快捷键描述|Keyboard Shortcut Descriptor]],与用户运行的键盘组合匹配时,会触发该动作。
[[系统标签|SystemTags]] `$:/tags/Layout` 标识可以切换到的[[替代页面版面|Alternative page layouts]]。
[[系统标签|SystemTags]] `$:/tags/Macro` 标识全域宏
[[系统标签|SystemTags]] `$:/tags/Macro/View` 标识仅在主视图模板和预览皮肤中可用的宏。
[[系统标签|SystemTags]] `$:/tags/Manager/ItemMain` 标识条目管理器。$:/Manager
[[系统标签|SystemTags]] `$:/tags/Manager/ItemSidebar` 标识条目管理器
[[系统标签|SystemTags]] `$:/tags/MoreSideBar` 标识'更多'侧边栏中的页签
[[系统标签|SystemTags]] `$:/tags/MoreSideBar/Plugins` 标识侧边栏:更多:插件页签
[[系统标签|SystemTags]] `$:/tags/PageControls` 标识侧栏中的页面控制工具
[[系统标签|SystemTags]] `$:/tags/PageTemplate` 标识主页面元素
[[系统标签|SystemTags]] `$:/tags/Palette` 标识配色盘
[[系统标签|SystemTags]] `$:/tags/PluginLibrary` 标识插件库
[[系统标签|SystemTags]] `$:/tags/RawMarkup` 标识纯文本条目为原始标记,包含在生成的 HTML 文件的 `<head>` 段落的底部。
请注意,必须保存并重新加载维基,才能使原始标记条目生效。
[[系统标签|SystemTags]] `$:/tags/RawMarkupWikified` 标识维基化的条目为原始标记,包含在生成的 HTML 文件的 `<head>` 段落的底部。
请注意,必须保存并重新加载维基,才能使原始标记条目生效。另请注意,默认情况下,全域宏在原始标记条目中禁用;您可以使用 ImportVariablesWidget 显式导入它们。
[[系统标签|SystemTags]] `$:/tags/RawMarkupWikified/BottomBody` 标识维基化的条目为原始标记,包含在生成的 HTML 文件的 `<body>` 段落的底部。
请注意,必须保存并重新加载维基,才能使原始标记条目生效。另请注意,默认情况下,全域宏在原始标记条目中禁用;您可以使用 ImportVariablesWidget 显式导入它们。
[[系统标签|SystemTags]] `$:/tags/RawMarkupWikified/TopBody` 标识维基化的条目为原始标记,包含在生成的 HTML 文件的 `<body>` 段落的顶部。
请注意,必须保存并重新加载维基,才能使原始标记条目生效。另请注意,默认情况下,全域宏在原始标记条目中禁用;您可以使用 ImportVariablesWidget 显式导入它们。
[[系统标签|SystemTags]] `$:/tags/RawMarkupWikified/TopHead` 标识维基化的条目为原始标记,包含在生成的 HTML 文件的 `<body>` 段落的顶部。
请注意,必须保存并重新加载维基,才能使原始标记条目生效。另请注意,默认情况下,全域宏在原始标记条目中禁用;您可以使用 ImportVariablesWidget 显式导入它们。
[[系统标签|SystemTags]] `$:/tags/RawStaticContent` 标识要保存到 TW 代码中的原始内容
[[系统标签|SystemTags]] `$:/tags/RemoteAssetInfo` 标识插件导入处理
[[系统标签|SystemTags]] `$:/tags/SearchResults` 标识自订搜索结果
[[系统标签|SystemTags]] `$:/tags/ServerConnection` 标识插件导入处理
[[系统标签|SystemTags]] `$:/tags/SideBar` 标识侧边栏页签
[[系统标签|SystemTags]] `$:/tags/SideBarSegment` 标识侧边栏分段
注意:您可以通过拖放标签丸内的标题来重新排列分段 <<tag $:/tags/SideBarSegment>>
[[系统标签|SystemTags]] `$:/tags/StartupAction` 标识在所有平台上运行的操作
[[系统标签|SystemTags]] `$:/tags/StartupAction/Browser` 标识仅在浏览器中运行时,运行的操作
[[系统标签|SystemTags]] `$:/tags/StartupAction/Node` 标识仅在 Node.js 下运行时,运行的操作
[[系统标签|SystemTags]] `$:/tags/Stylesheet` 标识条目应套用为 CSS 样式表
[[系统标签|SystemTags]] `$:/tags/TagDropdown` 标识标签下拉排序
[[系统标签|SystemTags]] `$:/tags/TextEditor/Snippet` 标识文本片段
[[系统标签|SystemTags]] `$:/tags/TiddlerInfo` 标识条目信息面板页签
[[系统标签|SystemTags]] `$:/tags/TiddlerInfo/Advanced` 标识高级条目页签下的页签
[[系统标签|SystemTags]] `$:/tags/TiddlerInfoSegment` 标识条目信息面板分段
[[系统标签|SystemTags]] `$:/tags/ToolbarButtonStyle` 标识按钮的样式
[[系统标签|SystemTags]] `$:/tags/TopLeftBar` 标识左上栏
[[系统标签|SystemTags]] `$:/tags/TopRightBar` 标识右上栏
[[系统标签|SystemTags]] `$:/tags/ViewTemplate` 标识查看模板
[[系统标签|SystemTags]] `$:/tags/ViewToolbar` 标识查看模式条目工具栏
系统标签用来给条目特别的行为:
!! 这些是 ~TiddlyWiki 内核定义的系统标签:
<table>
<tbody>
<$list filter="[tag[SystemTags]]">
<tr>
<td>
<$macrocall $name="tag" tag={{!!caption}}/>
</td>
<td>
<$link>
{{!!description}}
</$link>
</td>
</tr>
</$list>
</tbody>
</table>
!! ~TiddlyWiki 插件定义的系统标签
|<<tag $:/tags/HelpPanel>> |可于 [[tiddlywiki 预览版|https://tiddlywiki.com/prerelease/]]看到,侧边栏上方的页面工具栏右边 |
|<<tag $:/tags/HelpPanel/Videos>> |帮助面板的 "videos" 选项卡 |
|<<tag $:/tags/MakeQR>> |可于 [[tiddlywiki 预览版|https://tiddlywiki.com/prerelease/]]看到,条目工具栏 |
|<<tag $:/tags/TranslationGroup>> |使用于[[翻译者应用版|https://tiddlywiki.com/editions/translators/]] |
|<<tag $:/tags/TwitterUsage>> |twitter 插件 |
|<<tag $:/tags/ViewToolbarButton/QRcode>> |见:[[tiddlywiki 预览版|https://tiddlywiki.com/prerelease/]] |
|<<tag $:/tags/test-spec>> |tiddlywiki 测试套件 |
如果条目名称以特殊字符串 `$:/` 开头,会被归类为系统条目。与普通条目的唯一区别是,它们隐藏在边栏中的大多数搜索和清单中。(特别是,系统条目显示在 "更多/系统" 清单中)。
系统条目提供了一种简单的方法,隐藏 TiddlyWiki 的内部组件,使其不会混乱、阻碍用户内容。
许多系统条目遵循使用进一步斜线的惯例,来描述条目名称的组成部分。例如: `$:/config/BitmapEditor/LineWidth`。
您不需要创建自己的系统条目,但是在定制 TiddlyWiki 时可能很有用。例如,如果你创建了一个自定义的调色板,你可以将其命名为 `$:/_MyPalette` ,以便(a)它隐藏在搜索/ 列表中,(b)它将出现在系统提示列表的顶部,以便于参考。
~TiddlyWiki 提供几个宏,通过分析[[标签|Tagging]]生成树状的条目链接:
;<<.var toc>>
: 简单树状链接
;<<.var toc-expandable>>
: 所有的分枝节点可以展开和收合
;<<.var toc-selective-expandable>>
: 可以展开和收合的非空分支
;<<.var toc-tabbed-internal-nav>> 与 <<.var toc-tabbed-external-nav>>
: 双皮肤的浏览器:
:* 左边为选择性地可展合的目录,就像一组垂直页签
:* 右边为用户所选的于目录树中的条目内容
最后两个之间的差异为当用户点击右侧皮肤中的链接时,会发生什么:
;<<.var toc-tabbed-internal-nav>>
: 目标条目显现于右侧皮肤中,取代包含该链接的条目
;<<.var toc-tabbed-external-nav>>
: 目标条目以正常的方式显现(这取决于用户的 storyview 配置)
!! 结构
此目录树的顶层,由具有称为<<.def "根标签">>的特定标签的条目组成。下层目录则由以那些条目为标签的条目组成,等等。
在每个层级,条目可以由父层标签条目的 <<.field list>> 字段值的[[顺序|Order of Tagged Tiddlers]],还可以依该宏的 <<.param sort>> 参数来排序。
如果条目有 <<.field caption>> 字段,则目录树显示该字段,否则显示条目名称。
在树中的每一条目通常显示为一个链接。若要取消,为条目的 <<.field toc-link>> 字段设其值为 <<.value no>>。在[[示例|Table-of-Contents Macros (Examples)]]中的 SecondThree 条目即为如此设置。点击树中的条目会使其分支展开或收合。
<<.from-version "5.1.23">> 默认情况下,这些链接会打开构成目录的条目。另外,如果条目包含 <<.field target>> 字段,则其内容将用作链接的目标。
该目录生成为 HTML 有序清单,其中 `<ol>` 元素总是具有 `tc-toc` 类别。可展合的目录树有额外的 `tc-toc-expandable` 类别。可选择展合的目录树(包括那些在双皮肤的浏览器中)则另有 `tc-toc-selective-expandable` 类别。
若要使一个目录出现于侧边栏中,请参阅[[如何添加页签至侧边栏|How to add a new tab to the sidebar]]。
! 参数
;tag
: 根标签,用于标识该目录树的顶层
;sort
: 额外的可选的[[筛选器 step|Filter Step]],例如,`sort[title]`
这两个参数合并成一个单一[[筛选器表达式|Filter Expression]] 像这样:
> `[tag[$tag$]$sort$]`
<<.var toc-tabbed-internal-nav>> 与 <<.var toc-tabbed-external-nav>> 采用额外的参数:
;selectedTiddler
: 用于指出当前所选条目的[[状态条目|StateMechanism]]名称,默认为 `$:/temp/toc/selectedTiddler`,建议此为一[[系统条目|SystemTiddlers]]。
;unselectedText
: 无选定条目时,显示的文本
;missingText
: 选定的条目不存在时,显示的文本
;template
: 可选的作为[[模板|TemplateTiddlers]]的条目名称,用于嵌入选定条目于右侧皮肤
[[示例|Table-of-Contents Macros (Examples)]]
这些示例为源于根标签 <<.tag Contents>> 的目录。有关如何使用目录宏,制作自己的结构化目录的详细信息, 请参阅[[目录宏|Table-of-Contents Macros]。
你可以这些可点击的标签丸,探索相同的结构:
* {{Contents||$:/core/ui/TagTemplate}}
** {{First||$:/core/ui/TagTemplate}}
** {{Second||$:/core/ui/TagTemplate}}
*** {{SecondThree||$:/core/ui/TagTemplate}}
** {{Third||$:/core/ui/TagTemplate}}
** {{Fourth||$:/core/ui/TagTemplate}}
下列页签示例,改用此文档的真实的目录。
<<tabs "[tag[table-of-contents-example]nsort[order]]" "Example Table of Contents: Simple">>
<div class="tc-table-of-contents">
<<toc-selective-expandable 'TableOfContents'>>
</div>
! 基本表格
TiddlyWiki 使用垂直线字符格式化表格,像这样:
```
|!Cell1 |!Cell2 |
|Cell3 |Cell3 |
```
Exclamation marks are used to indicate header cells. The example renders as:
使用惊叹号标记,表示标题保存格。例如:
|!Cell1 |!Cell2 |
|Cell3 |Cell3 |
! 保存格的对齐方式
表格保存格对齐方式,是以插入前置或后置空白字符于保存格来控制的。例如:
```
|Left aligned content |
| Right aligned content|
| Centred content |
|+++ a very wide column so we can see the alignment +++|
```
显示结果:
|Left aligned content |
| Right aligned content|
| Centred content |
|+++ a very wide column so we can see the alignment +++|
! 保存格的垂直对齐方式
保存格的垂直对齐方式,通过于保存格的第一个字符插入 ' ^' 顶部对齐或 ',' 为底端对齐。例如:
```
|^top left |^ top center |^ top right|
|middle left | middle center | middle right|
|,bottom left |, bottom center |, bottom right|
```
显示结果:
| :: | ::::::::::::::::::::::::::: | ::::::::::::::::::::::::::: | ::::::::::::::::::::::::::: | :: |
| ::<br>:: |^top left |^ top center |^ top right| ::<br>:: |
| ::<br>:: |middle left | middle center | middle right| ::<br>:: |
| ::<br>:: |,bottom left |, bottom center |, bottom right| ::<br>:: |
| :: | ::::::::::::::::::::::::::: | ::::::::::::::::::::::::::: | ::::::::::::::::::::::::::: | :: |
如果您需要于左对齐的保存格用 ' ^' 或 ',' 作为第一个字符的,可以使用 HTML 转义字符:
| `^` | &#94; |
| `,` | &#44; |
! 保存格合并
若要合并一个以上的表格保存格,使用的特殊保存格内容为 ' ~'。要与它左边的一个保存格合并,使用 '<'。要与它左边的一个保存格合并,使用' >'。例如:
```
|Cell1 |Cell2 |Cell3 |Cell4 |
|Cell5 |Cell6 |Cell7 |<|
|Cell5 |~|Cell7 |Cell8 |
|>|Cell9 |Cell10 |Cell11 |
```
显示结果:
|Cell1 |Cell2 |Cell3 |Cell4 |
|Cell5 |Cell6 |Cell7 |<|
|Cell5 |~|Cell7 |Cell8 |
|>|Cell9 |Cell10 |Cell11 |
! 表格类别、 标题、 页眉和页脚
表格 CSS 类别、标题、页眉和页脚,可以特殊的虚列指定之。以下示例:
* 指定表格的 CSS 类别为 "myclass" 和 "anotherClass"
* 给定该表格的标题 "This is a caption"
* 增加保存格文本为 "Header" 的标题列
* 增加保存格文本为 "Footer" 的页脚列
```
|myclass anotherClass|k
|This is a caption |c
|Cell1 |Cell2 |
|Cell3 |Cell3 |
|Header|Header|h
|Footer|Footer|f
```
显示结果:
|myclass anotherClass|k
|This is a caption |c
|Cell1 |Cell2 |
|Cell3 |Cell3 |
|Header|Header|h
|Footer|Footer|f
<<.def tabs>> [[宏|Macros]] 呈现一些[[甄选的条目|Title Selection]]作为用户可于其间切换的一组选项卡。
若条目具有 <<.field caption>> 字段,则选项卡显示该字段,否则显示条目名称。若指定提示,则选项卡显示条目的 <<.field tooltip>> 字段为各自按钮的提示。
默认为选项卡水平排列于内容之上。设置 <<.param class>> 参数值为 <<.value tc-vertical>> 则可为垂直选项卡。
!! 参数
;tabsList
: 一个选择要包括哪些条目的[[筛选器|Filters]]
;default
: 选定为默认选项卡的条目名称
;state
: 用于指出当前所选条目的[[状态条目|StateMechanism]]名称的前缀,默认为 `$:/state/tab`。建议此为一[[系统条目|SystemTiddlers]]
;class
: 用于生成 `div` 元素的附加 [[CSS|Cascading Style Sheets]] 类别。可用空格区隔多个类别。
;template
: 可选的条目名称,当作[[模板|TemplateTiddlers]]用以嵌入所选选项卡内容
;buttonTemplate
: 可选的条目名称,当作[[模板|TemplateTiddlers]]用于嵌入所选选项卡的按钮内容
;retain
: 可选的,在切换到另一个选项卡时,"yes" 指定应保留的选项卡的内容,避免重新呈现它 (有助于避免视频或音频源意外重置)
;actions
: 可选的,可以指定更改选项卡时触发的操作。在操作内,所选选项卡的标题可用于 <<.var currentTab>> 变量,且 <<.mtitle tabs>>外的 `currentTiddler` 变量可用于 <<.var save-currentTiddler>>
;explicitState
: 可选的,可以指定一个明确的状态条目名称。优先于内部计算的(合格的)状态条目名称
在模板中,选定的选项卡的标题可用于 <<.var currentTab>> 变量。
<<.vlink currentTiddler>> 变量不受 <<.var tabs>> 宏影响。如果选项卡列表包含依赖 <<.vlink currentTiddler>> 值的条目,例如条目基于其自己的名称列出子条目,这可能会导致麻烦。为了克服这个问题,您可以使用[[模板条目|TemplateTiddlers]] ,如下所示:
```
<$tiddler tiddler=<<currentTab>>>
<$transclude mode="block" />
</$tiddler>
```
<<.macro-examples "tabs">>
<$macrocall $name=".example" n="1"
eg="""<<tabs "SampleTabOne SampleTabTwo SampleTabThree SampleTabFour" "SampleTabOne" "$:/state/tab1">>"""/>
<$macrocall $name=".example" n="2"
eg="""<<tabs "[tag[sampletab]]" "SampleTabTwo" "$:/state/tab2" "tc-vertical">>"""/>
<$macrocall $name=".example" n="3"
eg="""<<tabs "[tag[sampletab]nsort[order]]" "SampleTabThree" "$:/state/tab3" "tc-vertical">>"""/>
<<.def tag>> [[宏|Macros]] 生成一个指定标签的标签丸。
!! 参数
;tag
: 标签名称,缺省为[[标签名称|Current Tiddler]]
<<.macro-examples "tag">>
<$macrocall $name=".example" n="1" eg="""<<tag>>"""/>
<$macrocall $name=".example" n="2" eg="""<<tag Concepts>>"""/>
输出是使用该标签的 <<.field list>> 字段及该条目的 <<.field list-before>> 和 <<.field list-after>> 字段[[排序|Order of Tagged Tiddlers]]。
<<.Place T>> 为空时的行为取决于 <<.place S>> 的可选尾码的设置︰
* 若缺少 <<.place T>> 且 <<.place S>> 未设或设置为 "loose",则该 `tag` 的输出是空的,且。
* <<.from-version "5.1.14">> 若缺少 <<.place T>> 且 <<.place S>> 设置为 "strict",则 `tag` 和 `!tag` 两者的输出是该输入的一个副本
<<.operator-examples "tag">>
<<.operator-example 1 "[tag[task]]">>
<<.operator-example 2 "[tag[task]!tag[done]]">>
<<.operator-example 3 "[!tag[task]]">>
<<.operator-example 4 "[all[shadows]tag[$:/tags/Stylesheet]]">>
<<.def tag-picker>> [[宏|Macros]]生成一个文本方块和一个按钮的组合,允许选定和添加的标签。
!! 参数
;actions
: 点击标签丸时,被触发的动作小工具。在本文中,变量 ''tag'' 包含选定的标签名称
;tagField
: <<.from-version 5.1.23>> 使用所选标签更新的''字段'' 。默认值为 ''tags''。
<<.macro-examples "tag-picker">>
<<.def tag-pill>> [[宏|Macros]]生成一个显示指定标签的静态标签丸,但没有[[tag 宏|tag Macro]]提供的下拉操作。
!! 参数
;tag
: 标签的名称
;element-tag
: 用于标签丸的元素名称(默认值为 "span")
;element-attributes
: 标签丸元素的附加属性
;actions
: 点击标签丸时,被触发的动作小工具。在本文中,宏参数 ''tag'' 包含选定的标签名称。
<<.macro-examples "tag-pill">>
设置标签是一种为条目分类的方法。例如,如果您有代表不同个体的条目,您可以标记他们为''朋友''、''家庭''、''同事''等,表明这些人与您之间的关系。
标签其实只是一个条目 (或是一个潜在的条目),而且可以有其自己的标签。您可以将任意数量的标签添加到同一个条目。
有关如何设置标签的说明,请参阅 [[创建和编辑的条目|Creating and editing tiddlers]]。
通过标记您的条目,您可以查看、导航,以及使用许多其他方式组织您的信息:
* 一个条目上的彩色标签丸让您快速访问所有其他具有相同标签的条目,以及呈现标签本身的条目。
* 如果一个条目当作标签,则在其[[信息面板|InfoPanel]]的''子条目''页签,将显示当前以其为标签的条目。
* 侧边栏的''更多''页签有一个''标签''页签,概述的所有标签,并允许您访问所有您标记的条目。
* 您可以使用[[筛选器|Filters]],创建基于其标签的条目清单。然后可以显示那些条目的[[字段|TiddlerFields]]的任意组合。例如,您可以构建一个词汇表,列出标记为''词汇表''的所有条目的名称和内容。这样的清单可以任何您希望的方式格式化:例如,项目符号、编号或以逗号分隔。
* 有一些特别的''系统标签'',控制条目和整个 ~TiddlyWiki 页面的布局。相关说明请参阅[[页面和条目布局定制|Page and tiddler layout customisation]]。
有另外两种使用标签方式:
! 设置一个标签的颜色和图标
若要更改标签丸的颜色或将图标添加到标签丸,您可以使用在边栏中的''更多''页签下的''标签''页签的 <<.icon $:/core/images/tag-button>> [[标签管理|$:/TagManager]]。
* 要改变颜色,可从点击''颜色''栏中的颜色选择器按钮选择之。或者,点击''信息''栏中的图标,然后于''颜色''字段中输入一个 [[CSS]] 颜色值。
* 要更改图标,请点击''图标''栏中的 <<.icon $:/core/images/down-arrow>> 按钮,然后从清单中选择可用的图标
! 变更列出的标签顺序
默认情况下,标记的条目是按字母顺串行出的。
如果您想要其它排序,添加 <<.flink ListField>> 字段到该标记条目,并设置其值是一个依此顺序的[[条目清单|Title List]]。
''list'' 字段没有提及的所有条目。请参阅 ~TiddlyWiki 使用的标记条目排序的[[确切规则|Order of Tagged Tiddlers]]。
每个输入标签依次处理。生成带有该标签的条目清单、[[排序|Order of Tagged Tiddlers]],然后[[主导追加|Dominant Append]]到运算符的整体输出。
<<.operator-examples "tagging">>
<<.operator-example 1 "[[task]tagging[]]" "同 `[tag[task]]`">>
<<.operator-example 2 "Concepts task +[tagging[]]" "标签为 ''Concepts'' 或 ''task'' 的条目">>
<<.operator-example 3 "[all[current]tagging[]]" "标签为本条目名称的所有条目">>
依次处理每个输入的名称。检索相应条目的标签(依在 <<.field tags>> 字段中出现的顺序),然后[[主导追加|Dominant Append]]到运算符的输出。
<<.operator-examples "tags">>
<<.operator-example 1 "[[Filter Operators]tags[]]">>
<<.operator-example 2 "[all[shadows]tags[]]">>
<<.operator-example 3 "[all[shadows+tiddlers]tags[]sort[]]">>
标签条目为任何被用作标签的条目。
标签条目的[[信息皮肤|InfoPanel]]里的''子条目''页签,显示那些以该标签条目为标签的条目。
一个标签可被使用而无相应的标签条目。
此标签标识[[工作管理示例|TaskManagementExample]]的样品任务。
TiddlyWiki5 可以作为一个简单的工作管理系统,无须进一步的客制化。这个想法是设置任务的标签为 `task`,那些已完成的也设其标签为 `done`。以这种方式是直接生成工作清单。
<<.tip """另有[[演示的增强版|TaskManagementExample (Draggable)]],添加了拖放任务,重新排序的功能。""">>
! 未完成的任务
<$list filter="[!has[draft.of]tag[task]!tag[done]sort[created]]">
<$checkbox tag="done"> <$link><<toc-caption>></$link></$checkbox><br />
</$list>
! 已完成的任务
<$list filter="[!has[draft.of]tag[task]tag[done]sort[created]]">
<$checkbox tag="done"> ~~<$link><<toc-caption>></$link>~~</$checkbox><br />
</$list>
这是 TaskManagementExample 的一个强化版,增强了拖放工作清单以重新排列它们的能力。
! 未完成的任务
//拖动任务以重新排序//
<<list-tagged-draggable tag:"task" subFilter:"!has[draft.of]!tag[done]" itemTemplate:"TaskManagementExampleDraggableTemplate" emptyMessage:"无待办任务">>
! 已完成的任务
//(依相反顺串行出完成的)//
<$list filter="[!has[draft.of]tag[task]tag[done]sort[created]]">
<div>
<$checkbox tag="done"> ~~<$link><<toc-caption>></$link>~~</$checkbox>
</div>
</$list>
<$checkbox tag="done"> <$link><<toc-caption>></$link></$checkbox>
在撰写[[简介条目|Instruction Tiddlers]]时,透过你想要呈现的信息开始计划路线。应该是无回溯或被引用的简单、逻辑、直接的思想进展。即使在个别的句子使用这种方法:总是进行从原因到结果,从旧的或已知到新的或未知。
保持句子简短。一个清楚的技术句子很少包含超过一个想法。因此避免其附加说明的信息。同样地,保持段落结构简单。平直的介绍通常比阶层式容易了解。
常常可能简化句子,而无需改变它,这仅意味透过调整其词汇量。<<.word "Execution of the macro is performed">> 意味 <<.word "The macro runs">>。<<.word "Your expectation might be...">> 意味 <<.word "You might expect...">>。
缺省情况下偏好主动语态: <<.word "Jane creates a tiddler">>,而不是 <<.word "a tiddler is created by Jane">>。被动语态可以是有用的,如果你希望读者把重点放在行动本身或其结果: <<.word "a tiddler is created">>。但从原因影响所致,可能更清晰,且用主动语态说 <<.word "this creates a tiddler">>。
文档通常提供相似或不同的两个平行项目。如果您为两者使用相同的句子或词组结构,读者会更容易检测到这种模式。但这必须与需求平衡,避免单调乏味。
宁可精确描述胜过模糊不清。如果某样东西有一个名称,那就使用它。如果没有名称,给它一个条目。
范本条目实际上并非一个条目类型,它是一个可用于条目的角色。
范本是一种重复使用 WikiText 区块的方法。
借由嵌入范本结合两个条目扩充[[嵌入|Transclusion]]的基本功能:
* 包含要显示 WikiText 的<<.def "范本条目">>。它可以包含嵌入的引用字段于[[当前条目|Current Tiddler]]
* 当解析参考的字段时,<<.def "目标条目">>即标识为当前条目
范本化的最佳示例是 TiddlyWiki 的主要故事河。每个开启中的条目呈现,通过 ViewTemplate 指定如何呈现每个字段。
详细信息,请参阅[[使用范本嵌入|Transclusion with Templates]]。
@@.tc-double-spaced-list
# 你可以用自己的方式使用 ~TiddlyWiki 管理你的笔记,而不是别人的方式。你的笔记符合你的思维方式,而不是被强制塞进笔记本和页签的阶层式紧身衣。
# ~TiddlyWiki 的非线性方法,实际上会让你以新的和有益的方式思考关于您的信息。
# 在 ~TiddlyWiki 中找到您的笔记快如闪电
# 有许多方法可以客制化和适应 ~TiddlyWiki 的面貌
# ~TiddlyWiki 是免费的,并且与所有平台兼容。任何网页浏览器可以开启它,你不需要购买昂贵的程序或付费订阅来使用它。
# ~TiddlyWiki 文件有助于自由分享信息。有很多方法,您可以从 ~TiddlyWiki 共用您的信息。
# 使用 ~TiddlyWiki,您的信息是自己的,并且将其存放在您想要存放的地方,在您的设备、在 USB 随身碟、在 Dropbox、在您的服务器上。
# ~TiddlyWiki 特点是数量不断增加的插件、主题、小工具和语言。
# ~TiddlyWiki 在线社区是友善的,并会尽其所能给您所需要的协助。
# 如果你是一名程序师,你有更多的方式来玩 ~TiddlyWiki。知道的越多,你与它可以有越多的乐趣。
@@
按下眼睛图标 {{$:/core/ui/EditorToolbar/preview}} 将打开或关闭编辑中的[[维基文本|WikiText]]的预览窗口 (眼睛图标也将打开或关闭)。
在眼睛图标的右方有另一个图标 {{$:/core/images/chevron-down}},点击时,显示一个下拉式菜单,让您访问六种不同类型的预览:
* //输出/// - 显示文本如同您不编辑条目时所见的。
* //html// - 显示该输出的[[原代码|https://www.w3schools.com/html/html_intro.asp]]。您的网页浏览器使用此原代码来显示网页。
* //分析树// 和 //小工具树// - 显示两个对象树,~TidlyWiki 内部从[[维基文本|WikiText]]生成。//分析树// 收集有关您的[[维基文本|WikiText]]的基本信息。从分析树的信息、//小工具树//,然后生成扩充的信息,最后上面的 html (且小工具树也做其他事情)。
* //与当前的差异// - 显示自上次保存条目以来的差异。删除的部分是 <span style="color:red;">红色</span>,添加的部分是 <span style="color:green;">绿色</span>。
* //与影子条目的差异 (如果有)// - 同上,但这次它显示的是与底层[[影子条目|ShadowTiddlers]]的差异。
TiddlyWiki 的 ''Text-Slicer'' 应用版包含一些帮助高端用户将较长的文本裁切成一些个别条目的工具。
https://tiddlywiki.com/editions/text-slicer/index.html
TextReference 是一个通用的方法,描述一个文本片段为一个条目的字段,或一个[[数据条目|DataTiddlers]]内的一个索引。
在不同的情况下,文本参考可用于检索值,或指定一个应被更改的值。
文本参考组成的几个部分,其中大部分可以是可选的:
* `tiddlerTitle` - 指定条目的名称[[字段|TiddlerFields]]
* `tiddlerTitle!!field` - 一个[[条目的字段|TiddlerFields]] (例如,`modified`、`modifier`、`type` 等)
* `!!field` - 当前条目的[[字段|TiddlerFields]]
* `tiddlerTitle##propertyIndex` - 从[[数据条目|DataTiddlers]]中提取的记名属性
文本参考可以用在几个地方:
* 当作[[筛选器|Filters]]里的[[间接参数|Filter Parameter]] (例如,`<$list filter="[tag{MyTag!!name}]"/>`)
* 当作元素或小工具的[[间接属性|HTML in WikiText]] (例如,`<$widget attrib={{Title!!description}}/>`)
* 当作快捷嵌入的操作数 (例如,`{{MyTiddler!!title}}`)
* 当作 RevealWidget 与 LinkCatcherWidget 的 `state` 属性
<$macrocall $name=".tip" _="""请注意文本参考如 `foo!!bar` 和文本参考的嵌入如 `{{foo!!bar}}` 之间的区别"""/>
! 简介
`<$text>` 小工具显示纯文本,而不将其解析为[[维基文本|WikiText]], 与 [[WikifyWidget]] 相反。
! 内容与属性
`<$text>` 小工具的内文将被忽略。
|!属性 |!说明 |
|text |要显示的文本 |
! 示例
<$macrocall $name='wikitext-example-without-html' src='<$vars string="//italic//">
* <<string>>
* <$text text=<<string>>/>
</$vars>
' />
<$macrocall $name='wikitext-example-without-html' src='
此条目的 <<.field text-test>> 字段的值为:<$text text={{!!text-test}}/>
以其正常的维基文本格式显示为:{{!!text-test}}
' />
! 简介
操作清单需要大量的扩充筛选器。
第一组筛选器旨在从清单的尾部移动项目,并将其插入清单中指定的位置。项目经常在使用这些筛选器之前追加到清单。通常这些筛选器接受一个尾码,指定移动项目的个数 (默认值为 1)。
第二组筛选器旨在将数组中所选的项目范围,从清单中添加或移除。这些筛选器最好使用一个数组中的索引存放于字段或维基的其他数据索引 (他们可能使用简单的项目清单,提供不含空白的项目)。通常这些筛选器接受一个尾码,指定移动项目的个数 (缺省为全部)。
! 示例
在此示例中,我们将星期别填入字典条目 '~MyData' 的 '~DataIndex' 索引,然后清除此清单。
<$macrocall $name='wikitext-example-without-html'
src="""<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $filter="[list[Days of the Week]]"/>
取得星期别
</$button>
<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $filter="[[]]"/>
清除
</$button>
{{ListopsData}}"""/>
---
在这个例子中,我们须从 '~MyData' 条目的 'DaysOfTheWeek' 的索引,裁切填充的清单,以便于插入项目之前,并于标记项目 (Wednesday) 之后追加到清单。
<$macrocall $name='wikitext-example-without-html'
src="""<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="one two +[putbefore:2[Wednesday]]"/>
放置 2 个项目于 Wednesday 之前
</$button>
<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="four five +[putafter:2[Wednesday]] three +[putbefore[Wednesday]]"/>
放置 1 个项目于 Wednesday 之前,及 2 Items 个项目于 Wednesday 之后
</$button>
{{ListopsData}}"""/>
---
在这个例子中,我们须从 '~MyData' 条目的 'DaysOfTheWeek' 的索引,裁切填充的清单,以追加到清单的项目,替换标记项目 (Wednesday)。再移动已先从引用的字段追加到清单中的 3 个项目到清单的最前面。
<$macrocall $name='wikitext-example-without-html'
src="""<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="[[---o]] [[o---]] +[replace:2{!!marker}]"/>
以 2 个项目替换 '!!marker'
</$button>
<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="[{!!item1}] [{!!item2}] [{!!item3}] +[putfirst:3[]]"/>
放置 3 个项目于前端
</$button>
{{ListopsData}}"""/>
---
在这个例子中,我们须从 '~MyData' 条目的 'DaysOfTheWeek' 的索引,裁切填充的清单,以追加到从引用字段的项目截断的清单。然后删除增加项目的前两个。
<$macrocall $name='wikitext-example-without-html'
src="""|list: |<$view field="list"/> |
<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[allbefore:include[Wednesday]] +[prepend{!!list}]"/>
预置 '!!list' 到 'Wednesday' 之前的项目
</$button>
<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[remove:2{!!list}]"/>
从当前清单移除 '!!list' 的前两个项目
</$button>
<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[!remove:1{!!list}]"/>
从当前清单移除 '!!list' 的最后一个项目
</$button>
{{ListopsData}}"""/>
---
在这个例子中,我们在清单中填入数字,然后从前端至尾端逐个移动项目、在从尾端至前端 (点击下方按钮几次可看得最清楚)。
这个例子说明了 append[] 和 prepend[] 运算符不强制项目的唯一实例,而且于下个运行中,任何重复项目将被删除。
<$macrocall $name='wikitext-example-without-html'
src="""<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $filter="[[]]" $subfilter="+[append:3{!!numbers}]"/>
设置一些数字
</$button>
<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[!append:6{!!numbers}]"/>
追加更多数字
</$button>
<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[putfirst:2[]]"/>
移动最后 2 个项目到最前面
</$button>
<$button>
<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[putlast[]]"/>
移动最前面的项目到最后面
</$button>
{{ListopsData}}"""/>
! 恐怖故事
经常有 TiddlyWiki 的用户在讨论群组报告个人数据丢失的令人心碎的故事:
> My entire TiddlyWiki has just been wiped out when Firefox crashed during saving a tiddly.
https://groups.google.com/d/topic/tiddlywiki/oG2L7OXhUoI/discussion
> Last time I used it was last night at home on my Windows 7 desktop, hit the check mark to stop editing my last entry, it then saves via TiddlyFox and I eject my USB drive. I came to work this morning, plugged in my USB, enter my TW5 password and it doesn't want to open after several attempts. I browse to my TW5 html file and notice that my file size is no longer 3MB.. instead it is 80KB. This leads me to believe I lost everything.
https://groups.google.com/d/topic/tiddlywiki/SXStDJ0ntGI/discussion
不要让它发生在你身上!
!! 使用 TiddlyWiki 的第一条准则是:
<p style="font-size:40pt;line-height:48pt;font-weight:700;color:red;">
备份您的数据!
</p>
TiddlyWiki 是一个非常灵活的可客制化的系统,让你牢牢地管理您自己的数据。TiddlyWiki 的开发步步为营,以确保它是一个安全的地方保存您最有价值的数据,但减少数据丢失的风险最终的责任仍在于用户。
确保您的数据安全最好的方法是实践一个严谨的系统的备份:
* 考虑使用像 Dropbox 的服务,不断向云端备份您的个人数据。 (Dropbox [[有个实用的功能|https://www.dropbox.com/help/11]] 他们借以追踪文件的以前版本)
* 在升级到新版本的 TiddlyWiki 之前保留备份
* 找出并保护自己免于最坏的情况:例如,如果你的随身碟或硬盘坏了?如果您的电脑遭勒索病毒攻击?
* 防御性与备援:例如,采取多个备份,放在不同的物理位置
<<.from-version "5.1.20">> 相关概述,请参阅[[条件运算符|Conditional Operators]]。
<<.operator-examples "then">>
<<.operator-example 1 "[[HelloThereMissing]is[missing]then[yes]]">>
<<.operator-example 2 "[[HelloThere]is[missing]then[yes]]">>
<<.def thumbnail>> [[宏|Macros]],用于创建可链接的缩略图皮肤。
!! 参数
(无)
<<.macro-examples "thumbnail">>
! 示例
这是一个 `thumbnail-right` 宏的示例,用来创建一个浮动于文本右侧的影片缩略图。
<$macrocall $name=".example" n="1" eg="""<<thumbnail-right link:"Introduction Video" image:"Introduction Video Thumbnail.jpg" caption:"Introduction to ~TiddlyWiki" icon:"{{$:/core/images/video}}" color:"red">>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."""/>
<<.this-is-operator-example>>
! <<.olink before>> and <<.olink after>>
<<.using-days-of-week>>
<<.operator-example 1 "[list[Days of the Week]before{!!title}]">>
<<.operator-example 2 "[list[Days of the Week]after{!!title}]">>
Tiddler Commander 插件,简称 ''Commander'' 是用于在条目上进行批处理操作的独特工具。
{{!!url}}
Commander 具有许多功能,包括:
* 批量量条目创建/删除
* 选择性操作
* 组合搜索筛选和选择条目
* 名称操作:添加、删除前缀和后缀,还删除名称开头和结尾的字符(重命名条目时,[[relink|https://flibbles.github.io/tw5-relink/]] 可用于更新其他条目的名称)
* 标签操作:添加、删除、替换
* 字段操作:添加、删除、重命名和设置字段值
* ~SnR, 搜索和替换所有字段,包括 text、tags、//title//,和一般字段
* 检查,在一个地方检阅和检查条目,在它们之间滚动并编辑所有字段(包括一般字段)、tags text (//title// 是一个例外!)
* 日志,创建所有操作的日志
* 搜索,//保存和加载// 筛选器搜索的任意组合
<svg xmlns="http://www.w3.org/2000/svg" viewBox="216 290 330 333" width="440" height="444"><g fill="none"><title>Canvas 1</title><title>Layer 1</title><path d="M442.77 401.63l-29.225 5.097c3.264-.893 9.452-15.015-2.408-16.52 2.13-3.35 6.714-2.882 9.447-.537 2.02-4.95 7.018-6.57 10.367-.988 1.482-2.963 9.94-1.614 10.31 3.194 4.455-2.673 12.383-2.723 14.924 1.508-5.37 1.474-14.127 4.664-13.413 8.246z" fill="#9c2aad"/><path d="M442.77 401.63l-29.225 5.097c3.264-.893 9.452-15.015-2.408-16.52 2.13-3.35 6.714-2.882 9.447-.537 2.02-4.95 7.018-6.57 10.367-.988 1.482-2.963 9.94-1.614 10.31 3.194 4.455-2.673 12.383-2.723 14.924 1.508-5.37 1.474-14.127 4.664-13.413 8.246z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M518.704 423.77c-20.266 8.91-39.017 7.633-54.773-13.766-31.93-12.65-57.067-11.878-73.428 11.212l-6.89 11.87-6.29 7.82c5.417 3.125 9.174 4.316 14.098 2.634 32.497-9.55 77.368-10.254 97.16.81 9.484 12.483 11.043 23.498 5.695 33.02 9.098-.004 13.876-5.924 14.147-18.018 2.627-4.58-.778-7.354-4.04-10.17 21.432-9.243 17.89-17.327 14.322-25.41z" fill="#9c2aad"/><path d="M515.39 443.438c3.08-2.36 5.305-5.53 6.105-9.457.324-1.582.37-3.19.162-4.76-.183-1.408-.53-2.844-1.3-4.223-.39-.7-.87-1.33-1.59-1.59-1.537-.56-3.28-.318-4.893-.113-.944.122-1.895.298-2.835.488-1.35.276-2.708.56-4.07.858-5.018 1.105-10.157 2.266-15.175 2.118-2.288-.068-4.954-.347-7.057-1.515-1.72-.958-2.96-2.407-4.457-3.725-1.253-1.106-2.595-2.187-3.904-3.223-6.123-4.852-12.698-9.002-19.822-12.454-3.612-1.75-7.566-3.244-11.6-4.242-2.226-.55-4.422-.895-6.64-1.195.526.12-.44-.147-.623-.19-.685-.166-1.366-.285-2.058-.374-1.824-.236-3.64-.22-5.47-.174-3.09.078-6.215.592-9.297 1.167-2.78.522-5.493 1.154-8.26 2.154-3.126 1.135-6.385 3.015-9.08 4.903-3.42 2.4-6.38 5.123-9.08 8.024-2.385 2.568-4.596 5.253-6.535 8.157-1.574 2.363-2.963 4.736-4.307 7.226l-1.234 2.9-2.194 2.02c-.768.73-1.494 1.487-2.093 2.35-.343.5-.768 1.133-.8 1.754-.012.226-.04.437.01.645.3 1.212 1.354 1.775 2.435 2.146.662.23 1.365.41 2.032.54l.733.142c.418.08.896-.1 1.306-.23.688-.21 1.4-.435 2.098-.73 1.954-.82 3.675-2.027 4.572-3.695-1.122 1.87-3.9 2.988-6 3.517l-1.702.36-.17-.05c-.17-.043-.412-.088-.487-.11-.44-.136-.92-.26-1.363-.418-.604-.217-1.22-.435-1.706-.81-.2-.157-.502-.38-.57-.665-.055-.247-.016-.404.034-.656.036-.163.15-.363.25-.5.196-.262.375-.54.59-.793.83-.953 1.84-1.825 2.853-2.668.516-.426 1.378-.93 1.61-1.57.4-1.078.958-2.104 1.503-3.095 1.914-3.467 4.208-6.694 6.734-9.722 3.663-4.384 7.748-8.53 12.752-11.922 2.2-1.488 4.66-2.953 7.187-3.963l4.296-1.47.653-.156c.527-.12 1.045-.235 1.56-.35 1.755-.382 3.495-.682 5.253-.962 1.95-.307 3.922-.52 5.873-.618 2.366-.12 4.763-.116 7.11.408.4.09.823.262 1.23.323 1.02.156 2.04.267 3.077.45 1.952.34 3.9.872 5.864 1.46 2.75.824 5.37 1.922 7.9 3.056 4.954 2.218 9.575 5.02 13.973 7.988 2.293 1.546 4.49 3.19 6.662 4.873.91.707 1.83 1.453 2.698 2.193.38.322.772.642 1.154.972.15.13.787.704.564.483 1.088 1.206 2.236 2.06 3.622 2.843 1.316.743 2.98 1.168 4.46 1.428 3.016.534 6.143.342 9.135-.086 2.3-.326 4.59-.773 6.885-1.287 1.987-.442 3.937-.92 5.89-1.403 1.716-.422 3.476-.87 5.198-1.056.746-.08 1.433-.153 2.15-.134l.92.155.82.948c.227.428.403.906.543 1.294.636 1.735.785 3.505.67 5.262-.303 4.768-3.248 8.737-7.02 11.4-2.212 1.565-4.93 3.106-7.512 3.98 1.465-.353 2.874-.89 4.335-1.48 1.933-.777 3.862-1.93 5.444-3.144z" fill="#000"/><path d="M506.253 473.58c2.6-3.967 4.054-9.14 4.31-13.85.033-.554.023-1.1-.002-1.658-.073-1.82-.44-4.15-1.833-5.714-.705-.794-1.456-1.118-2.492-1.434.556.308 1.115.46 1.57.9 1.82 1.764 2.008 4.6 1.847 6.804-.062.885-.165 1.796-.335 2.704-.243 1.337-.587 2.7-1.03 4.052-.695 2.143-1.584 4.163-2.72 5.995-.896 1.452-1.91 2.843-3.17 4-.368.34-.798.695-1.24.98-1.713 1.124-3.36 1.43-5.168.844l-.192-.09 1.1-4.73c.642-3.273 1-6.646.778-9.9-.216-3.213-.794-6.228-2.115-9.433-1.288-3.134-3.415-5.698-5.63-7.758-4.414-4.108-10.622-6.47-16.796-7.81-9.033-1.96-18.042-1.942-26.965-2.177-1.625-.04-3.222-.106-4.83-.23-.716-.054-1.418-.162-2.128-.31-.308-.064-.62-.05-.934-.06-.738-.018-1.482-.04-2.227-.045-4.167-.02-8.376.09-12.54.522-1.946.202-3.922.274-5.865.722-5.958 1.38-11.962 3.356-17.946 5.146-2.043.613-4.098 1.178-6.154 1.697l-6.15 1.43-4.1-.07c1.326.316 2.846.69 4.16.547 2.663-.288 5.327-.702 7.983-1.23 3.57-.708 7.086-1.63 10.655-2.526 2.816-.706 5.63-1.465 8.444-2.113.884-.202 1.75-.398 2.626-.582.348-.07.692-.14 1.04-.207.128-.025.912-.175.628-.133 4.746-.375 9.47-.653 14.224-.657 1.152 0 2.286.01 3.43.052.536.02 1.058.044 1.59.066.074.004.525.028.647.028l2.622.42c.922.1 1.85.157 2.792.19 2.495.086 4.975.163 7.495.245 3.105.102 6.228.244 9.374.483 2.858.22 5.723.53 8.547 1.04 7.908 1.434 16.268 4.05 21.162 10.504 4.732 6.238 4.95 13.564 4.04 20.34-.2 1.505-.464 3.033-.814 4.537-.15.672-.31 1.36-.49 2.045-.012.054-.086.23-.07.28.137.424.37.89.58 1.285.024.047.192.093.237.116.312.152.63.292.95.403 1.832.64 3.773.554 5.564-.31 2.57-1.235 4.133-3.208 5.536-5.35z" fill="#000"/><path d="M399.948 426.623c.68 2.583-.802 5.307-3.313 6.087-2.507.78-5.092-.68-5.772-3.263-.677-2.582.805-5.306 3.313-6.087 2.51-.78 5.095.68 5.772 3.263z" fill="#9c2aad"/><path d="M399.948 426.623c.68 2.583-.802 5.307-3.313 6.087-2.507.78-5.092-.68-5.772-3.263-.677-2.582.805-5.306 3.313-6.087 2.51-.78 5.095.68 5.772 3.263z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M397.468 427.468c.254.958-.298 1.97-1.23 2.258-.928.29-1.885-.253-2.14-1.21-.25-.958.303-1.97 1.23-2.26.932-.288 1.89.255 2.14 1.212z" fill="#9c2aad"/><path d="M397.468 427.468c.254.958-.298 1.97-1.23 2.258-.928.29-1.885-.253-2.14-1.21-.25-.958.303-1.97 1.23-2.26.932-.288 1.89.255 2.14 1.212z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M407.917 422.47c-.243-.426-.5-.835-.78-1.226-.74-1.042-1.565-1.973-2.46-2.805-1.366-1.278-2.873-2.307-4.44-3.303 1.552 1.5 2.996 3.055 4.32 4.882.7.96 1.33 1.974 1.916 3.08 2.255 4.24 2.916 8.603 2.863 12.905 1-4.55 1.136-9.092-1.42-13.535z" fill="#000"/><path d="M429.245 431.79c5.266 4.67 7.143 9.175 16.357 12.775-3.29 3.217-6.45 7.1-11.54 1.016-.413 5.473-4.938 5.5-8.708.053-1.175 6.606-4.645 5.24-7.38.234-2.447 5.983-6.927 4.53-10.407.82 3.033-2.647 15.197-6.012 14.677-14.665l7-.23z" fill="#9c2aad"/><path d="M429.245 431.79c5.266 4.67 7.143 9.175 16.357 12.775-3.29 3.217-6.45 7.1-11.54 1.016-.413 5.473-4.938 5.5-8.708.053-1.175 6.606-4.645 5.24-7.38.234-2.447 5.983-6.927 4.53-10.407.82 3.033-2.647 15.197-6.012 14.677-14.665l7-.23z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M399.727 426.687c.68 2.583-.803 5.307-3.313 6.088-2.508.78-5.093-.68-5.773-3.263-.676-2.582.807-5.306 3.314-6.088 2.51-.78 5.096.68 5.773 3.263z" fill="#000"/><path d="M399.727 426.687c.68 2.583-.803 5.307-3.313 6.088-2.508.78-5.093-.68-5.773-3.263-.676-2.582.807-5.306 3.314-6.088 2.51-.78 5.096.68 5.773 3.263z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M397.25 427.53c.254.96-.298 1.97-1.23 2.26-.928.29-1.885-.254-2.14-1.212-.25-.957.303-1.97 1.23-2.258.932-.29 1.89.254 2.14 1.21z" fill="#fff"/><path d="M251.89 438.276l31.066-11.79c-3.656 1.006-17.687-9.062-7.12-17.29-3.966-2.01-8.116 1.06-9.408 4.884-4.775-3.62-10.515-2.324-10.553 4.97-3.12-2.008-10.493 4.12-8.102 8.963-5.822-.026-13.49 4.456-13.518 9.985 6.013-1.65 16.274-3.58 17.635.278z" fill="#48adb1"/><path d="M251.89 438.276l31.066-11.79c-3.656 1.006-17.687-9.062-7.12-17.29-3.966-2.01-8.116 1.06-9.408 4.884-4.775-3.62-10.515-2.324-10.553 4.97-3.12-2.008-10.493 4.12-8.102 8.963-5.822-.026-13.49 4.456-13.518 9.985 6.013-1.65 16.274-3.58 17.635.278z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M270.553 522.21c2.026 11.66 4.158 22.387 3.56 23.753-13.265-17.145-22.023-29.427-31.532-32.05-16.004-13.656-18.85-31-11.28-51.223 5.296-11.492 14.657-19.66 27.317-28.87 5.72-3.887 15.6-7.776 22.34-8.057 20.58-.51 41.184 17.534 45.23 23.308 7.93 3.578 10.64 5.338 3.076 9.366-.446 1.49-6.822 3.76-7.588 3.265-13.01 1.17-21.647-.038-33.18.925-7.597 1.39-14.926 3.178-21.86 5.55-11.378 6.614-23.662 14.95-24.2 26.215 2.917 17.477 15.35 22.677 42.213 5.188-2.524 6.957-19.544 16.387-14.095 22.63z" fill="#48adb1"/><path d="M272.18 546.972c-.806-.99-1.603-1.997-2.41-2.97-4.912-5.89-9.75-11.935-15.316-17.43-2.708-2.67-5.464-5.255-8.323-7.608-1.002-.824-1.994-1.628-3.012-2.394-.77-.576-1.538-1.12-2.268-1.76-1.313-1.14-2.66-2.364-3.9-3.672-6.954-7.334-11.284-16.164-11.577-26.822-.05-1.786-.007-3.58.134-5.315.19-2.362.57-4.616 1.02-6.856.47-2.345 1.15-4.652 1.878-6.885.528-1.63 1.114-3.203 1.877-4.696 2.984-5.84 7.154-11.118 12.286-15.888 2.245-2.083 4.52-4.045 6.86-5.907 1.485-1.185 2.998-2.337 4.512-3.475 1.916-1.438 3.817-2.852 5.853-4.02 2.636-1.514 5.457-2.755 8.325-3.854 2.593-.99 5.352-1.83 8.18-2.337.86-.154 1.726-.28 2.623-.385 1.336-.153 2.805-.146 4.174-.067 3.387.205 6.604.76 9.68 1.667 6.334 1.875 12.14 4.708 17.612 8.297 4.357 2.86 8.64 6.14 12.44 10.044 1.27 1.306 2.35 2.58 3.407 3.896l.125.173 4.825 2.528c.92.607 2.115 1.356 2.554 2.412.087.212.163.433.19.682.127 1.337-.94 2.33-1.918 3.024-.647.46-1.32.845-2.01 1.222-.243.132-.495.262-.742.382-.4.197-.95.163-1.453.163-.864 0-1.678-.023-2.482-.117-2.293-.26-4.484-.893-6.085-2.496 2.374 2.06 6.268 2.136 9.626 1.77-.235.07.7-.47.97-.632.31-.188.61-.387.9-.603.73-.542 1.757-1.243 2.002-2.156.226-.85-.79-1.555-1.39-1.96-.216-.14-.437-.284-.662-.41-1.023-.568-2.1-1.113-3.208-1.59-.477-.205-.945-.42-1.413-.618-.216-.09-.457-.165-.644-.307-.315-.234-.524-.558-.764-.846-1.357-1.61-2.946-3.162-4.593-4.598-3.464-3.012-7.15-5.718-10.973-8.087-5.214-3.228-10.757-5.808-16.754-7.506-2.617-.74-5.437-1.296-8.347-1.447l-3.33-.065-4.118.6c-4.04.802-7.787 2.18-11.367 3.906-1.22.588-2.412 1.215-3.586 1.87-.556.31-1.098.636-1.63.982l-.832.545-6.136 4.662c-2.028 1.603-4.03 3.255-6.013 4.986-2.904 2.535-5.782 5.43-8.15 8.39-1.78 2.225-3.387 4.5-4.755 6.943-.346.614-.658 1.227-.982 1.846-.168.32-.32.65-.48.98-.014.026-.086.182-.14.3l-.035.06-1.66 5.093c-1.514 5.198-2.488 10.638-2.22 16.654.05 1.146.173 2.238.325 3.336.518 3.778 1.63 7.257 3.183 10.522 1.72 3.627 4.093 6.91 6.894 9.99.76.84 1.58 1.63 2.39 2.406.436.423.887.82 1.336 1.222.094.087.19.173.288.257l.072.065c.137.122.04.036 0 .002 3.657 2.89 7.28 5.887 10.686 9.29 3.872 3.875 7.302 7.872 10.697 11.992 2.142 2.605 4.22 5.305 6.25 7.975.723.955 1.448 1.92 2.16 2.866l.29.394.265-.22c1.167-1.38.66-4.01.276-5.66-.102-.434-.198-.88-.318-1.312-1.424-5.087-3.51-10.1-3.183-15.936.116 1.44.203 2.738.493 4.06.874 3.996 2.562 7.71 3.807 11.553.195.607.39 1.23.536 1.858.547 2.378 1.032 5.522-1.18 7.167-.496.37-1.18.45-1.646-.125z" fill="#000"/><path d="M271.095 519.167c-.598-1.02-.7-2.352-.324-3.57.534-1.726 1.67-3.286 2.925-4.66 1.577-1.735 3.305-3.454 5-5.197l2.367-2.662-3.075 1.954c-2.336 1.35-4.727 2.583-7.18 3.666-3.457 1.527-7.082 2.79-11.055 3.248-3.49.406-6.972-.014-9.785-1.423-.65-.324-1.265-.677-1.866-1.12-3.335-2.443-5.333-5.967-6.51-9.77-.386-1.246-.705-2.55-.957-3.874-.098-.51-.2-1.017-.15-1.57.148-1.735.46-3.28.993-4.807.972-2.792 2.58-5.306 4.53-7.622 2.51-2.98 5.538-5.547 8.618-7.768 2.99-2.156 6.085-4.12 9.242-5.944l1.405-.814c.707-.41 1.57-.6 2.36-.852 1.604-.51 3.21-.98 4.845-1.426 2.914-.795 5.862-1.488 8.868-2.117 3.01-.63 5.93-1.245 9.194-1.39 6.593-.284 13.39-.03 20.067-.03 2.305 0 4.583-.034 6.837-.113l6.706-.377 2.22-.57c.73-.227 1.448-.486 2.152-.772-1.047.596-2.09 1.19-3.222 1.585-.346.122-.725.285-1.073.35-2.917.552-5.915.932-8.97 1.215-4.01.372-8.125.504-12.25.658-3.25.124-6.524.216-9.736.393-1.018.057-2.01.117-3.008.2-.47.04-.937.083-1.403.124l-.372.033-.175.012-5.685 1.214c-3.294.76-6.544 1.606-9.747 2.537-1.246.364-2.463.74-3.675 1.142-.564.187-1.126.377-1.685.566-.048.017-.29.106-.483.17l-.15.05-4.598 2.824c-4.73 2.98-9.327 6.23-13.28 10.573-2.077 2.28-3.73 4.86-4.65 7.708-.36 1.112-.584 2.285-.675 3.53l-.005.054.75 3.486c.99 3.615 2.676 6.974 5.806 9.144.516.36 1.056.658 1.606.898 1.997.878 4.184 1.18 6.644 1.097 1.767-.058 3.426-.406 5.068-.783 2.86-.654 5.58-1.775 8.208-2.92 3.226-1.404 6.31-3.106 9.345-4.892.682-.4 1.364-.807 2.05-1.232.075-.046.425-.334.507-.312l.065-.04c.312.182.612.515.89.748.096.084.202.166.298.25.094.086.207.16.298.25l-.06.14c-.06.14-.125.275-.187.412-.96 2.103-2.78 3.905-4.533 5.536-2.422 2.25-5.147 4.316-7.302 6.824-.78.908-1.57 1.907-1.915 3.018-.447 1.426-.233 3.008.713 4.036-.336-.178-.644-.69-.833-1.02z" fill="#000"/><path d="M305.11 446.044c.083 2.99 2.536 5.45 5.48 5.495 2.94.047 5.257-2.34 5.175-5.328-.084-2.986-2.537-5.447-5.478-5.495-2.943-.045-5.26 2.34-5.176 5.327z" fill="#48adb1"/><path d="M305.11 446.044c.083 2.99 2.536 5.45 5.48 5.495 2.94.047 5.257-2.34 5.175-5.328-.084-2.986-2.537-5.447-5.478-5.495-2.943-.045-5.26 2.34-5.176 5.327z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M308.044 446.168c.03 1.11.94 2.02 2.033 2.038 1.09.02 1.95-.867 1.918-1.976-.034-1.107-.943-2.02-2.033-2.038-1.093-.017-1.952.87-1.918 1.976z" fill="#48adb1"/><path d="M308.044 446.168c.03 1.11.94 2.02 2.033 2.038 1.09.02 1.95-.867 1.918-1.976-.034-1.107-.943-2.02-2.033-2.038-1.093-.017-1.952.87-1.918 1.976z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M270.2 460.713c-4.188 6.678-4.786 12.113-13.556 18.883 4.547 2.42 9.168 5.598 12.724-2.542 2.167 5.752 7.043 4.352 9.374-2.69 3.35 6.73 6.645 4.17 8.01-2.073 4.514 5.662 8.87 2.692 11.44-2.397-4.09-1.89-18.223-1.674-20.393-11.134l-7.6 1.953z" fill="#48adb1"/><path d="M270.2 460.713c-4.188 6.678-4.786 12.113-13.556 18.883 4.547 2.42 9.168 5.598 12.724-2.542 2.167 5.752 7.043 4.352 9.374-2.69 3.35 6.73 6.645 4.17 8.01-2.073 4.514 5.662 8.87 2.692 11.44-2.397-4.09-1.89-18.223-1.674-20.393-11.134l-7.6 1.953z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M295.877 454.516c-.418-1.186-.737-2.432-.922-3.728-.137-.936-.204-1.91-.192-2.922.06-5.742 2.888-10.04 6.417-14.072-2.775 4.897-4.837 10.044-4.72 16.365.015.858.07 1.694.16 2.52.097.924.23 1.822.407 2.705.25 1.275.57 2.495.948 3.704-.81-1.484-1.536-2.968-2.098-4.574zM305.513 446.61c.613 2.6 3.2 4.308 5.784 3.818 2.58-.487 4.177-2.99 3.564-5.59-.613-2.598-3.2-4.307-5.782-3.82-2.583.49-4.18 2.994-3.565 5.59z" fill="#000"/><path d="M305.513 446.61c.613 2.6 3.2 4.308 5.784 3.818 2.58-.487 4.177-2.99 3.564-5.59-.613-2.598-3.2-4.307-5.782-3.82-2.583.49-4.18 2.994-3.565 5.59z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M308.1 446.195c.225.965 1.188 1.6 2.146 1.417.955-.18 1.545-1.11 1.32-2.074-.228-.963-1.19-1.597-2.146-1.417-.958.184-1.55 1.113-1.32 2.075z" fill="#fff"/><path d="M355.503 321.4l-25.173 28.465c2.554-3.502-2.545-22.582-15.62-14.605-.55-5.056 4.416-8.25 9.03-8.09-1.942-6.57 1.765-12.188 9.58-9.28-.885-4.147 8.655-9.56 12.87-5.047 2.317-6.235 10.218-12.625 16.143-10.422-4.194 5.77-10.41 15.968-6.83 18.978z" fill="#ea761a"/><path d="M355.503 321.4l-25.173 28.465c2.554-3.502-2.545-22.582-15.62-14.605-.55-5.056 4.416-8.25 9.03-8.09-1.942-6.57 1.765-12.188 9.58-9.28-.885-4.147 8.655-9.56 12.87-5.047 2.317-6.235 10.218-12.625 16.143-10.422-4.194 5.77-10.41 15.968-6.83 18.978z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M276.052 355.582c8.627 14.887 27.237 11.795 56.774-14.036 13.686-21.538 29.63-30.166 47.535-27.614 13.092 1.865 23.69 6.48 20.764 25.977-5.766.078-10.246 1.818-15.784.493-14.502-1.05-24.585 4.727-31.914 18.725-13.887 7.514-30.73 10.966-45.062 12.858-7.262 8.873-11.99 22.417.99 31.56-20.476-.162-30.378-6.58-21.61-24.03-16.974-2.97-19.744-11.38-11.692-23.934z" fill="#ea761a"/><path d="M281.598 363.096c-2.033-1.164-3.598-3.022-4.294-5.22-.37-1.158-.47-2.387-.485-3.734.083 1.522.306 2.85.856 4.12.79 1.838 2.292 3.317 4.052 4.256 3.707 1.983 8.976 1.786 13.287.99 6.17-1.134 11.807-3.547 17.07-6.536 5.235-2.974 10.182-6.688 14.602-11.273 2.602-2.702 4.87-5.566 6.79-8.607.688-1.088 1.327-2.19 1.92-3.328.2-.384.372-.797.605-1.166.528-.842 1.22-1.627 1.858-2.407 4.477-5.468 10.056-9.87 16.017-12.92 5.864-2.998 12.375-4.943 19.594-5.23 2.163-.085 4.367-.008 6.43.232 1.53.18 3.03.456 4.472.816 5.74 1.437 11.35 4.437 14.857 9.575.657.967 1.24 2.004 1.713 3.065 1.592 3.587 2.062 8.002 1.446 12.265-.06.387-.126.756-.196 1.133-.09.483-.14.83-.55 1.066-1.114.64-2.797.584-4.186.485-2.255-.157-4.396-.61-6.432-1.21-2.592-.76-5.163-1.75-7.233-3.554 1.974 1.558 4.353 2.372 6.792 3 1.58.407 3.216.702 4.916.858 1.33.125 2.812.204 4.14.017.302-.04.6-.09.88-.18l.61-.342c.133-1.482.308-2.987.277-4.562-.065-2.95-.735-5.656-1.904-8.06-.622-1.27-1.38-2.45-2.302-3.568-1.528-1.85-3.435-3.383-5.41-4.52-3.815-2.192-8.177-3.374-12.928-3.688-3.754-.245-7.526.08-10.942.766-7.154 1.44-13.67 4.43-19.373 8.733-2.357 1.778-4.647 3.824-6.714 6.068-.69.747-1.35 1.512-1.983 2.29-.296.363-.574.72-.857 1.083l-.214.275-.155.192-2.17 3.776c-.804 1.282-1.666 2.535-2.602 3.757-2.912 3.802-6.56 7.403-10.325 10.35-6.705 5.247-14.193 9.16-22.396 11.402-5.88 1.608-14.082 2.667-19.534-.466z" fill="#000"/><path d="M308.197 404.672c-1.86-.602-3.346-2.24-4.5-3.857-1.024-1.43-1.797-3.078-2.416-4.75-.796-2.14-1.33-4.404-1.646-6.793-.254-1.906-.276-4.018-.103-5.992.426-4.866 2.366-9.46 6.5-12.14.667-.432 1.36-.765 2.097-1.07.493-.202 1.064-.224 1.64-.264 1.037-.07 2.05-.144 3.07-.252 1.458-.152 2.925-.334 4.358-.505 4.138-.485 8.25-1.38 12.13-2.425 9.69-2.612 18.77-6.736 26.633-12.995 1.555-1.24 3.017-2.504 4.49-3.93 1.048-1.013 2.063-2.144 3-3.164.984-1.073 2.24-1.973 3.432-2.768 2.41-1.606 5.284-2.748 8.206-3.313 1.313-.252 2.628-.51 4.02-.597 2.17-.132 4.516-.185 6.67.108 1.692.233 3.327.48 4.89.99.617.205 1.203.443 1.805.642-6.632-.946-14.134-.427-19.75 2.067-1.168.52-2.277 1.066-3.348 1.765-.643.42-1.267.876-1.87 1.375l-1.7 1.573-.912 1.1c-.653.726-1.28 1.51-1.98 2.232-2.264 2.335-4.67 4.55-7.17 6.424-8.696 6.522-18.613 10.745-29.502 13.078-3.84.824-7.793 1.41-11.87 1.74l-5.026.296-1.335.598c-.506.27-.99.586-1.438.97-2.814 2.412-3.846 5.778-4.353 9.398-.538 3.817-.026 7.918.89 11.33.385 1.44.89 2.815 1.513 4.085.833 1.708 2.043 3.612 3.767 4.555.655.36 1.476.708 2.324.617-.736.312-1.83.094-2.513-.13zM376.6 333.494c-.558-.842-1.005-1.774-1.295-2.758-.22-.73-.346-1.5-.384-2.32-.24-4.96 3.342-8.382 6.934-11.085-.886 1.458-1.717 2.935-2.43 4.478-1.215 2.626-2.213 5.58-1.894 8.856.207 2.137.876 4.036 1.757 5.836-1.017-.92-1.968-1.91-2.688-3.006zM296.167 403.193c-1.832-.286-3.493-.764-5.1-1.455-1.22-.523-2.362-1.268-3.387-2.17-3.536-3.104-4.724-7.783-4.17-12.81.164-1.496.44-2.934.79-4.333l.536-1.923-2.022-.305c-1.013-.178-2.014-.386-3.005-.63-3.307-.815-6.745-2.05-9.136-4.675-1.788-1.96-2.58-4.533-2.146-7.425.305-2.046 1.114-3.86 2.057-5.59 1.162-2.138 2.632-4.075 4.362-5.957-.953 2.657-2.15 5.15-3.005 7.854-.447 1.414-.848 2.95-.79 4.588.03.912.223 1.736.533 2.49.41 1.008 1.3 1.848 2.156 2.487 1.287.966 2.855 1.533 4.45 2.053 1.003.33 2.06.577 3.103.778 1.342.263 2.686.472 4.086.66.474.07.964.12 1.456.17.08.01.53 0 .576.06.344.465.632.996.946 1.483.233.367.435.6.634.987l-.103.293c-.07.192-.133.39-.198.58-.53 1.54-1 3.12-1.325 4.766-.53 2.67-.752 5.777.004 8.4.205.716.508 1.408.882 2.032.317.535.653 1.015 1.066 1.503.728.87 1.604 1.527 2.492 2.107 2.242 1.474 4.878 2.233 7.51 2.92 1.4.367 2.82.693 4.248.97-2.307.513-5.154.46-7.5.09z" fill="#000"/><path d="M364.047 347.158c-3.032 8.483-2.367 14.703-10.49 24.426 5.674 1.582 11.618 3.995 13.582-5.975 3.84 5.892 8.94 3.134 9.81-5.31 5.394 6.692 8.448 3.02 8.43-4.29 6.442 5.21 10.576.82 12.19-5.49-5.033-1.103-20.766 2.618-25.517-7.422l-8.006 4.06z" fill="#ea761a"/><path d="M364.047 347.158c-3.032 8.483-2.367 14.703-10.49 24.426 5.674 1.582 11.618 3.995 13.582-5.975 3.84 5.892 8.94 3.134 9.81-5.31 5.394 6.692 8.448 3.02 8.43-4.29 6.442 5.21 10.576.82 12.19-5.49-5.033-1.103-20.766 2.618-25.517-7.422l-8.006 4.06z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M394.112 324.513c.954 2.252-.03 4.917-2.2 5.95-2.173 1.038-4.706.056-5.66-2.195-.955-2.25.03-4.915 2.202-5.95 2.17-1.036 4.703-.054 5.658 2.195z" fill="#ea761a"/><path d="M394.112 324.513c.954 2.252-.03 4.917-2.2 5.95-2.173 1.038-4.706.056-5.66-2.195-.955-2.25.03-4.915 2.202-5.95 2.17-1.036 4.703-.054 5.658 2.195z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M391.973 325.602c.353.836-.012 1.822-.816 2.206-.807.387-1.745.022-2.098-.814-.357-.833.008-1.82.815-2.206.804-.384 1.743-.02 2.098.814z" fill="#ea761a"/><path d="M391.973 325.602c.353.836-.012 1.822-.816 2.206-.807.387-1.745.022-2.098-.814-.357-.833.008-1.82.815-2.206.804-.384 1.743-.02 2.098.814z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M393.34 324.14c.954 2.25-.03 4.915-2.2 5.95-2.173 1.037-4.705.055-5.66-2.196-.954-2.25.03-4.914 2.203-5.952 2.17-1.034 4.703-.052 5.658 2.197z" fill="#000"/><path d="M393.34 324.14c.954 2.25-.03 4.915-2.2 5.95-2.173 1.037-4.705.055-5.66-2.196-.954-2.25.03-4.914 2.203-5.952 2.17-1.034 4.703-.052 5.658 2.197z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M391.206 325.228c.352.836-.012 1.822-.817 2.206-.807.387-1.746.022-2.1-.813-.354-.832.01-1.82.817-2.206.805-.384 1.743-.02 2.1.814z" fill="#fff"/><path d="M415.783 475.164l24.99 22.677c-2.597-2.84.048-20.177 12.367-14.407-.008-4.518-4.703-6.855-8.76-6.264 1.077-5.99-2.74-10.588-9.36-7.257.38-3.75-8.568-7.6-11.85-3.206-2.652-5.278-10.244-10.15-15.262-7.628 4.267 4.68 10.743 13.077 7.875 16.084z" fill="#6974fb"/><path d="M415.783 475.164l24.99 22.677c-2.597-2.84.048-20.177 12.367-14.407-.008-4.518-4.703-6.855-8.76-6.264 1.077-5.99-2.74-10.588-9.36-7.257.38-3.75-8.568-7.6-11.85-3.206-2.652-5.278-10.244-10.15-15.262-7.628 4.267 4.68 10.743 13.077 7.875 16.084z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M473.63 555.834c-17.145 2.8-27.718-13.565-30.094-28.237 6.76-26.48-15.06-49.113-40.988-59.686-8.937-3.645-26.487-3.03-28.42-1.783-.804 5.343.913 12.194 3.52 19.564 1.685 5.147 8.442 16.43 15.09 21.273 16.232 11.816 35.55-.16 38.794 25.052-3.28 4.154-4.532 16.41-2.14 27.36 2.933 13.43 15.098 26.348 18.83 24.878-4.573-4.083-9.554-23.378-2.043-26.23 8.56 8.855 16.97 9.058 25.262 2.703l2.188-4.892z" fill="#6974fb"/><path d="M469.653 556.273c1.553-.002 3.038-.184 4.5-.455-1.722.21-3.52.296-5.37.092-11.833-1.292-18.963-11.915-21.984-22.04-.318-1.065-.587-2.14-.82-3.228l-.555-3.01.32-1.24c.274-1.15.51-2.35.68-3.545.5-3.427.53-6.72.18-9.895-.944-8.505-4.637-16.467-10.283-23.447-.747-.924-1.505-1.818-2.297-2.694-5.19-5.743-11.293-10.37-17.922-14.207-2.6-1.5-5.29-2.87-8.084-4.114-2.307-1.026-4.58-2.024-7.122-2.697-2.833-.746-5.927-1.138-8.776-1.338-4.81-.336-9.61-.346-14.133.275-1.116.154-2.33.274-3.345.73-.25.114-.552.472-.57.754-.02.353.177.868.248 1.21.132.62.27 1.24.416 1.854.5 2.083 1.04 4.216 2.037 6.14.547 1.056 1.282 2.1 2.208 2.795 1.31.987 2.996 1.393 4.824 1.716-1.45-.347-2.774-.74-3.936-1.465-1.478-.922-2.39-2.6-2.948-4.2-.457-1.315-.782-2.68-1.045-4.066l-.565-3.714c1.21-.344 2.574-.39 3.868-.444 1.7-.068 3.42-.072 5.15-.016 4.436.15 9.4.595 13.92 1.743l4.304 1.392 6.532 3.17c2.13 1.12 4.207 2.305 6.235 3.576 3.286 2.062 6.432 4.35 9.372 6.862 3.105 2.656 6.03 5.55 8.676 8.802 3.27 4.02 6.014 8.556 7.788 13.168 1.943 5.048 2.887 10.382 2.54 16.11-.088 1.467-.265 2.967-.545 4.485-.142.78-.518 1.737-.416 2.483.17 1.237.526 2.475.85 3.67.437 1.623.967 3.223 1.593 4.784 3.038 7.57 8.422 14.945 15.92 18.215 1.715.75 3.59 1.31 5.606 1.586 1 .14 1.98.203 2.943.2zM449.04 585.638l.17-.058c.107-.31.144-.615.217-.936.076-.32.165-.615.217-.94.028-.156.1-.308.108-.47.004-.05-.27-.253-.314-.297-.243-.24-.454-.51-.674-.797-1.06-1.393-1.77-2.974-2.394-4.517-1.368-3.396-2.245-6.997-2.442-10.745-.13-2.477.15-5.843 2.06-7.468l.625-.378 2.23 1.983c2.87 2.317 6.225 4.188 10.34 4.287.53.014 1.048 0 1.56-.05.522-.05 1.036-.13 1.542-.236 2.432-.505 4.717-1.616 6.86-3.09.467-.318.925-.647 1.37-.99.245-.186.585-.387.778-.624.098-.114.895-1.563.973-1.7.48-.84.958-1.686 1.436-2.53-.52.817-1.042 1.636-1.566 2.45-.172.273-.348.55-.522.818-.2.316-.343.537-.443.69l-.073.11-3.068 1.973c-3.18 1.79-6.642 2.842-10.536 1.99-.765-.167-1.482-.4-2.167-.678-.767-.308-1.492-.677-2.184-1.092-1.694-1.013-3.208-2.257-4.615-3.648-.557-.55-1.36-1.76-2.37-1.35-.18.074-.365.158-.535.25-3.324 1.822-3.94 6.516-3.808 10.18.028.74.078 1.467.156 2.183.082.743.188 1.486.313 2.213.128.742.277 1.473.444 2.195.27 1.142.582 2.272.955 3.376l1.275 3.25-2.272-2.013c-5.775-6-10.296-13.83-12.11-21.59.036.172-.033-.165-.07-.337-.052-.265-.103-.528-.153-.8-.163-.9-.304-1.813-.412-2.734-.34-2.917-.388-5.94-.065-9.034.31-2.967.94-5.986 1.998-8.554.217-.525.46-1.03.725-1.523.24-.443.615-.847.824-1.29.32-.666.37-1.395.273-2.056-.416-2.83-1.11-5.58-2.3-8.185-1.65-3.62-4.37-6.385-7.835-8.04-5.3-2.528-12.13-2.576-18.162-3.906-2.966-.653-5.725-1.54-8.228-2.814-.832-.423-1.632-.878-2.412-1.374-.206-.13-.407-.264-.61-.402-.047-.033-.102-.067-.152-.103l-.133-.09-2.83-2.302c-2.71-2.49-5.054-5.503-7.233-8.67-1.92-2.792-3.677-5.708-4.933-8.7-.462-1.1-.883-2.294-1.304-3.392-1.266-3.312-2.533-6.62-3.803-9.934l.82 2.53.818 2.528.82 2.53c.858 2.65 1.6 5.376 2.72 7.94 1.783 4.09 4.137 8.09 6.937 11.83 1.412 1.887 2.902 3.683 4.53 5.26.72.694 1.467 1.43 2.282 1.98.736.497 1.437 1.042 2.198 1.52 1.687 1.063 3.506 1.947 5.44 2.697 2.846 1.106 5.956 1.838 9.17 2.44 4.688.886 9.542 1.49 13.334 3.57 3.184 1.747 5.24 4.99 6.304 8.397.357 1.14.63 2.312.846 3.496.09.493.168.982.237 1.477l.04.287-1.02 1.664c-2.973 5.743-3.572 13.608-2.94 19.8.148 1.437.357 2.838.635 4.23.35 1.747.826 3.45 1.434 5.114.8 2.192 1.786 4.333 2.932 6.42 1.462 2.67 3.226 5.328 5.15 7.766 1.55 1.965 3.203 3.798 5.004 5.427 1.236 1.12 2.525 2.16 4.01 2.937 1.014.533 2.436 1.03 3.578.648z" fill="#000"/><path d="M392.625 495.004c1.694-.47 3.354-1.19 4.866-2.23 4.59-3.146 6.93-8.115 7.53-14.09.253-2.492.188-4.888.034-7.265-1.434 8.132-3.912 15.87-10.2 20.396-1.162.838-2.36 1.536-3.6 2.105-1.835.847-3.726 1.44-5.676 1.923 2.467-.014 4.768-.205 7.047-.84z" fill="#000"/><path d="M399.807 503.36c1.673 7.826.358 13.223 6.367 22.734-5.182.727-10.696 2.15-11.253-6.852-4.074 4.737-8.238 1.71-8.01-5.825-5.537 5.254-7.793 1.663-6.92-4.767-6.28 3.83-9.405-.52-10.084-6.263 4.56-.38 17.97 4.74 23.33-3.536l6.57 4.51z" fill="#6974fb"/><path d="M399.807 503.36c1.673 7.826.358 13.223 6.367 22.734-5.182.727-10.696 2.15-11.253-6.852-4.074 4.737-8.238 1.71-8.01-5.825-5.537 5.254-7.793 1.663-6.92-4.767-6.28 3.83-9.405-.52-10.084-6.263 4.56-.38 17.97 4.74 23.33-3.536l6.57 4.51z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M392.673 475.87c-.95 2.496-3.743 3.848-6.24 3.02-2.494-.824-3.742-3.516-2.793-6.013.952-2.494 3.745-3.847 6.24-3.022 2.496.828 3.745 3.52 2.793 6.014z" fill="#000"/><path d="M392.673 475.87c-.95 2.496-3.743 3.848-6.24 3.02-2.494-.824-3.742-3.516-2.793-6.013.952-2.494 3.745-3.847 6.24-3.022 2.496.828 3.745 3.52 2.793 6.014z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M390.163 475.117c-.35.926-1.388 1.428-2.313 1.118-.923-.306-1.386-1.304-1.035-2.23.353-.922 1.39-1.425 2.313-1.118.925.31 1.388 1.308 1.035 2.23z" fill="#fff"/><path d="M315.196 503.278l-6.093 40.113c.26-4.622-15.364-18.785-22.47-4.054-3.42-4.22-.82-9.96 3.41-12.488-5.546-4.768-5.472-11.954 3.223-13.874-3.196-3.204 2.226-13.587 8.62-11.98-1.53-6.94 1.85-17.243 8.44-18.695-.417 7.6-.088 20.343 4.87 20.978z" fill="#6d6912"/><path d="M315.196 503.278l-6.093 40.113c.26-4.622-15.364-18.785-22.47-4.054-3.42-4.22-.82-9.96 3.41-12.488-5.546-4.768-5.472-11.954 3.223-13.874-3.196-3.204 2.226-13.587 8.62-11.98-1.53-6.94 1.85-17.243 8.44-18.695-.417 7.6-.088 20.343 4.87 20.978z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M360.374 479.718c-16.56-4.948-32.168-4.615-44.464 13.994l-16.67 62.894c-9.722 21.76-36.972 25.37-45.586 1.398-5.952 3.497-5.405 14.405 3.675 29.19-1.248 8.823.05 17.406 3.966 25.742 3.487-10.125 4.644-19.98 27.804-32.396l39.963-21.968c11.162-9.45 19.582-20.346 20.08-35.42.754-8.64.546-17.075 7.892-27.106 2.548-5.78 5.19-11.58 3.34-16.328z" fill="#6d6912"/><path d="M264.75 603.54c3.155-6.86 7.734-12.935 13.12-17.665 4.903-4.302 10.575-7.71 16.608-10.704 8.572-4.25 17.793-7.813 25.933-12.586 5.918-3.467 11.157-7.58 15.622-12.762 1.08-1.252 2.092-2.575 3.06-3.955l2.764-4.264 1.94-4.353c.526-1.492.952-3.01 1.363-4.536.654-2.452 1.22-4.91 1.77-7.39 1.325-6.005 2.536-12.072 4.332-17.975 1.88-6.185 4.624-14.084 10.857-17.286-4.566 2.796-6.762 8.33-8.155 13.24-.526 1.857-.97 3.73-1.36 5.615-.657 3.194-1.185 6.425-1.688 9.656-.622 3.995-1.178 7.998-1.913 11.964-.614 3.296-1.29 6.58-2.43 9.75-.666 1.847-1.564 3.595-2.608 5.362-1.712 2.898-3.603 5.572-5.702 8.002-5.195 6.024-11.497 10.596-18.623 14.367-10.484 5.55-22.613 9.205-32.87 14.998-6.293 3.556-11.867 7.97-16.345 13.638-4.065 5.148-7.203 11.2-9.41 17.18.996-3.474 2.182-6.924 3.734-10.297z" fill="#000"/><path d="M281.216 574.577c-1.273.19-2.535.27-3.77.268-2.81 0-5.553-.402-8.22-1.04-1.092-.258-2.163-.555-3.234-.89-.41-.125-.81-.25-1.215-.39-.31-.103-.617-.212-.926-.32-.69-.236-.37-.11-.276-.1-1.147-.3-2.204-1.135-3.097-1.892-.85-.716-1.61-1.506-2.326-2.34-1.994-2.318-3.856-5.418-3.834-8.853.194 3.972 2.838 7.175 5.45 9.48.857.76 1.817 1.53 2.895 2.08.88.453 1.825.638 2.766.878.887.232 1.775.43 2.67.613 4.77.975 10.006 1.408 15.257-.376 1.73-.587 3.28-1.384 4.68-2.366 2.152-1.51 3.943-3.386 5.508-5.594 2.99-4.215 4.777-9.015 6.225-13.676 1.42-4.567 2.484-9.23 3.466-13.902 2.174-10.337 3.906-20.797 7.032-30.916 2.114-6.85 5.09-14.243 9.963-19.993 3.05-3.6 6.778-6.478 11.42-8.21 2.597-.966 5.475-1.52 8.115-1.716 6.2-.454 12.19.748 17.886 2.563.474.152.946.302 1.42.458.706.238 1.444.34 1.896.973.29.413.322 1.164.378 1.665.242 2.293-.26 4.41-1.174 6.436-1.79 3.954-5.118 7.04-8.782 8.964-1.343.706-2.892 1.28-4.51 1.515 1.28-.264 2.403-.725 3.458-1.288.946-.503 1.826-1.09 2.654-1.738 3.73-2.914 7.194-7.647 6.91-12.64l-.358-1.926-1.684-.454c-1.362-.35-2.723-.65-4.103-.927-3.81-.76-7.683-1.138-11.708-.92-1.648.093-3.317.323-5.028.715-7.15 1.645-12.158 5.96-15.803 11.714-3.712 5.858-5.783 12.216-7.516 18.544-2.68 9.79-4.374 19.817-6.748 29.677-1.1 4.568-2.33 9.08-3.92 13.53-1.236 3.458-2.713 6.85-4.71 10.133-3.81 6.26-9.175 11.093-17.1 12.264z" fill="#000"/><path d="M340.42 522.223c3.805 8.836 8.854 13.21 9.576 26.715 5.588-2.892 11.984-5.333 6.267-14.55 7.29 1.806 9.263-4.06 3.8-11.285 9.084 1.297 8.797-3.792 3.467-9.49 8.82-.613 8.854-7.052 5.524-13.164-4.737 2.803-14.32 17.158-25.334 12.776l-3.3 8.997z" fill="#6d6912"/><path d="M340.42 522.223c3.805 8.836 8.854 13.21 9.576 26.715 5.588-2.892 11.984-5.333 6.267-14.55 7.29 1.806 9.263-4.06 3.8-11.285 9.084 1.297 8.797-3.792 3.467-9.49 8.82-.613 8.854-7.052 5.524-13.164-4.737 2.803-14.32 17.158-25.334 12.776l-3.3 8.997z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M332.68 501.974c-.538-.403-1.047-.827-1.532-1.273-.68-.62-1.325-1.277-1.924-1.97-2.343-2.712-3.944-5.935-5.386-9.448 3.553 5.27 7.725 9.935 13.615 13.128.818.444 1.634.847 2.47 1.217 3.192 1.416 6.495 2.282 9.88 2.84-6.138.267-12.026-.654-17.122-4.493z" fill="#000"/><path d="M347.565 482.5c1.794 1.896 1.803 4.927.02 6.77-1.782 1.85-4.684 1.813-6.478-.083-1.795-1.893-1.804-4.924-.02-6.772 1.78-1.844 4.683-1.808 6.478.085z" fill="#6d6912"/><path d="M347.565 482.5c1.794 1.896 1.803 4.927.02 6.77-1.782 1.85-4.684 1.813-6.478-.083-1.795-1.893-1.804-4.924-.02-6.772 1.78-1.844 4.683-1.808 6.478.085z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M345.833 484.384c.666.705.67 1.83.008 2.514-.66.688-1.736.674-2.4-.03-.67-.703-.672-1.828-.01-2.516.66-.684 1.736-.67 2.403.032z" fill="#6d6912"/><path d="M345.833 484.384c.666.705.67 1.83.008 2.514-.66.688-1.736.674-2.4-.03-.67-.703-.672-1.828-.01-2.516.66-.684 1.736-.67 2.403.032z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M339.11 488.2c1.222 2.373 4.147 3.406 6.535 2.305 2.386-1.097 3.33-3.913 2.106-6.287-1.223-2.372-4.148-3.404-6.534-2.307-2.388 1.1-3.33 3.917-2.107 6.29z" fill="#000"/><path d="M339.11 488.2c1.222 2.373 4.147 3.406 6.535 2.305 2.386-1.097 3.33-3.913 2.106-6.287-1.223-2.372-4.148-3.404-6.534-2.307-2.388 1.1-3.33 3.917-2.107 6.29z" stroke="#000" stroke-linejoin="bevel" stroke-width=".5"/><path d="M341.522 487.167c.452.882 1.54 1.264 2.425.855.883-.406 1.23-1.45.78-2.332-.455-.88-1.543-1.26-2.426-.855-.884.41-1.233 1.453-.778 2.332z" fill="#fff"/></g></svg>
符合[[条目的哲学|Philosophy of Tiddlers]],文档条目是典型地简短和交互相联。
当一条目看似需要包含次标题时,这往往是事实上应分成几个条目的迹象。但这是合理的,一个[[参考条目|Reference Tiddlers]]包含一个无标题的导言部分,接着具有标题的详细信息段落。
若不令读者混淆,术语的一致性至关重要。一致的排版和标点可供专业品质的文档。宏可以改进一致性和可维护性的文本。
使用有序清单的逐步说明,项目符号用于任意顺序的清单。如果每个项目符号项的开头是一个术语和一个冒号,请使用定义清单而不是项目符号清单。如果可能的话,避免用嵌套式清单加重读者的负担。
使用表格,当信息自然的分为三个或更多行、在[[参考条目|Reference Tiddlers]]内的参数清单、属性等。
避免清单项目、标题和表格保存格文本末尾的句点。
该文档描述 ~TiddlyWiki 的当前现实状况。避免谈论对未来的渴望。
许多文档条目,特别是[[参考条目|Reference Tiddlers]],与单一概念有关。他们的名称应该是像 <<.tid "List Widget">> 或 <<.tid "Tiddler Fields">>。
这样的条目名称的每一主要单字的首字母要大写,次要的字像是 <<.word and>>、<<.word or>>、<<.word the>>、<<.word to>> 和 <<.word with>> 则无须如此。
标签也遵循这种模式。
如果是一类项目,其名称是复数,例如:<<.tid "Keyboard Shortcuts">> 或 <<.tid "Tiddler Fields">>。这种名称用于标记类别内的更多特定条目。
其中一个概念是一个项目,而不是一个类别,其条目有一个奇特的名称,例如,<<.tid "List Widget">>、<<.tid "Tag Operator">>。
避免名称首字为单字 <<.word the>>.
在过去,许多条目有驼峰式名称。这是逐渐被淘汰的文档以提高可读性。驼峰式名称甚至应该不再用于标签,除了在标准的拼写的情况下,例如:<<.tid ~JavaScript>> 。
[[简介条目|Instruction Tiddlers]] 往往具有较长的名称,可能以比一个名词词组更复杂,例如:<<.tid "Ten reasons to switch to ~TiddlyWiki">>。这些名称用句子的情况下,即只在第一个字(及任何适当的名称)以首字母大写。
How-to 条目名称以 <<.word "How to">> 起头,例如:<<.tid "How to edit a tiddler">>。避免名称像 <<.tid "Editing tiddlers">>,因为不太流利的英语演讲者可能误解为条目类别的名称。
\define lingo-base() $:/language/Docs/Fields/
[[条目字段|TiddlerFields]]是成对的 name:value 构成一个[[条目|Tiddlers]]。字段名称必须是小写字母、数字或是 `-` (破折号), `_` (底线) 与 `.` (句点)。
标准字段有:
|!字段名称 |!说明 |
|`title` |<<lingo title>> |
|`text` |<<lingo text>> |
|`modified` |<<lingo modified>> |
|`modifier` |<<lingo modifier>> |
|`created` |<<lingo created>> |
|`creator` |<<lingo creator>> |
|`tags` |<<lingo tags>> |
|`type` |<<lingo type>> |
|`list` |<<lingo list>> -- 详见 ListField |
|`caption` |<<lingo caption>> |
内核用到的其他字段有:
|!字段名称 |!说明 |
|`class` |<<lingo class>> |
|`color` |<<lingo color>> |
|`description` |<<lingo description>> |
|`draft.of` |<<lingo draft.of>> |
|`draft.title` |<<lingo draft.title>> |
|`footer` |<<lingo footer>> |
|`hide-body`|<<lingo hide-body>> |
|`icon` |<<lingo icon>> |
|`library` |<<lingo library>> |
|`list-after` |<<lingo list-after>> |
|`list-before` |<<lingo list-before>> |
|`name` |<<lingo name>> |
|`plugin-priority` |<<lingo plugin-priority>> |
|`plugin-type` |<<lingo plugin-type>> |
|`source` |<<lingo source>> |
|`subtitle` |<<lingo subtitle>> |
|`throttle.refresh` |<<lingo throttle.refresh>> |
|`toc-link`|<<lingo toc-link>> |
|`_canonical_uri`|<<lingo _canonical_uri>>|
TiddlyWebAdaptor 用到更多的字段:
|!字段名称 |!说明 |
|`bag` |<<lingo bag>> |
|`revision` |<<lingo revision>> |
|`_is_skinny` |<<lingo _is_skinny>> |
在此 ~TiddlyWiki 中用到的字段的详细信息,显示于[[控制台|$:/ControlPanel]] {{$:/core/ui/Buttons/control-panel}} 里的<<.controlpanel-tab Info>>页签 >> <<.info-tab Advanced>>子页签 >> [[条目字段|TiddlerFields]]''页签。
条目可以保存于几种不同格式的文本档。文件包含单个条目也可以有一个辅助的 `.meta` 文件,其格式为成对的`名称:值`串行,例如:
```
title: TheTitle
modifier: someone
```
!! ~TiddlyWeb-风格 .tid 文件
这些文件由一些行组成,包含成对的`名称:值`、一个空行、接着条目内容。例如:
```
title: MyTiddler
modifier: Jeremy
This is the text of my tiddler.
```
请注意,很多文本编辑器,需要文件包含换行符号。如果你想避免包含条目内文里的换行,可以用这个替代语法的:
```
title: MyTiddler
modifier: Jeremy
text: This is the text of my tiddler.
```
// 在内部,[[内容类型|ContentType]] `application/x-tiddler` 被用于这些文件//
!! TiddlyWiki `<DIV>` .tiddler 文件
在 TiddlyWiki 5,`*.tiddler` 文件看起来像这样:
```
<div title="AnotherExampleStyleSheet" modifier="blaine" created="201102111106" modified="201102111310" tags="examples" creator="psd">
<pre>Note that there is an embedded <pre> tag, and line feeds are not escaped.
And, weirdly, there is no HTML encoding of the body.</pre>
</div>
```
这些 `*.tiddler` 文件并不完全与 TiddlyWiki HTML 文件里的条目一样是以 HTML 编码的。
旧的 `*.tiddler` 文件使用更加紧密匹配 TiddlyWiki 用的存放格式:
```
<div tiddler="AnotherExampleStyleSheet" modifier="JeremyRuston" modified="200508181432" created="200508181432" tags="examples">This is an old-school .tiddler file, without an embedded <pre> tag.\nNote how the body is "HTML encoded" and new lines are escaped to \\n</div>
```
//在内部,[[内容类型|ContentType]] `application/x-tiddler-html-div` 被用于这些文件//
!! ~TiddlyWeb-风格 JSON 文件
这些文件是`名称:值`属性的简单散列数组。所有字段的值必须都指定为字符串。
例如:
```
[
{
"title": "First Tiddler",
"text": "Text of first tiddler",
"tags": "one two [[t h r e e]]"
},{
"title": "Second Tiddler",
"text": "Text of second tiddler",
"modified": "20150216171751154"
}
]
```
在内部,[[内容类型|ContentType]] `application/json` 被用于这些文件
请注意,不符合条目结构的 JSON 文件,将当成包含 JSON 数据的单一条目导入。
!! TiddlyWiki HTML 文件
TiddlyWiki HTML 文件包含编码为 `<DIV>` 格式的条目集群。
TiddlyWiki 导入一个未加密的 HTML 文件时,该文件需有 `<div id="storeArea">`,其包含如上所述条目的 DIVs 。例如:
```
<div id="storeArea">
<div created="20130302085406905" modified="20130302084548184" tags="Examples" title="A tiddler title">
<pre>HTML encoded text of tiddler
</pre>
</div>
<div created="20140315085406905" modified="20140321084548184" tags="One Two [[Three with Space]]" title="Another title" customfield="field value">
<pre>Text of this tiddler
</pre>
</div>
</div>
```
条目是在 TiddlyWiki 的基本单位的信息。条目最好尽可能地小,使其可以由编织在一起以不同的方式被重复使用。
"tiddler" 是一个非正式的英文单字,意思是小鱼,通常是刺鱼或桃花鱼。其他系统有通用名称,如 "items"、"entries"、"entities"、"nodes" 或 "records" 等类似的概念。TiddlyWiki 采取的观点是混淆地独特好过令人困惑的泛型。
在内部,条目是一个含唯一记名字段与其值的列表。唯一必要的字段是 `title` 字段,但有用的条目还有一个 `text` 字段,以及列于[[条目字段|TiddlerFields]]的部份或所有标准字段。
条目普遍存在 TiddlyWiki 中。他们用于存放一切从 JavaScript 代码模块到设置和用户界面关联的状态。
! 简介
TiddlerWidget 用于设置[[当前条目|Current Tiddler]]变量的值,在 TiddlerWidget 的范围内有效。
! 内容与属性
|!属性 |!说明 |
|tiddler |成为新的[[当前条目|Current Tiddler]]的条目名称 |
! CSS 类别变量
tiddler 小工具指定几个有用的 CSS 类别至其创建的变量:
; missingTiddlerClass
: `tc-tiddler-exists` 或 ...
: `tc-tiddler-missing` 取决于目标条目存在与否
; shadowTiddlerClass
: `tc-tiddler-shadow` 若该条目为影子条目
; systemTiddlerClass
: `tc-tiddler-system` 若该条目为系统条目
; tiddlerTagClasses
: 一个其名为 `tc-tagged-{tagname}` 的以空格区隔的 CSS 类别清单,<br>例如:`tc-tagged-introduction`。<br><br>''请注意'',标签名称是 UrlEncoded,这意味着标签 [[$:/tags/Macro]] 显示为 CSS 类别 `tc-tagged-%24%3A%2Ftags%2FMacro`
您可以使用这些变量,像这样:
```
<$tiddler tiddler="MyOtherTiddler">
<div class=<<missingTiddlerClass>>>
<$transclude/>
</div>
</$tiddler>
```
另请参阅 [[$:/core/ui/ViewTemplate]]。
一个 Google Chrome 浏览器的扩展,可使 TiddlyWiki 将边更直接保存到文件系统。
{{!!url}}
BuggyJay 的 Firefox 附加组件 TiddlyClip 允许从网页上裁剪文本和图形:
{{!!url}}
<<<
TiddlyClip allows parts of webpages to be clipped into a TiddlyWiki, and consists of two parts, the browser addon and the TiddlyWiki plugin. The addon is completely memoryless, any configuration is determined by the current TiddlyWiki that the user has select to work with (we say that the addon is docked to the TiddlyWiki). TiddlyClip is designed to work (in a basic mode) without configuration. Once the addon and plugin are installed, all the user has to do is select which TW to dock to.
<<<
TiddlyDesktop 是一个用于 TiddlyWiki 文件(包括 TiddlyWikiClassic 和 TiddlyWiki5)的应用程序,可以安装在 Windows、Mac OS X 或 Linux。 兼容于 TiddlyWiki 版本 5 和旧的 TiddlyWikiClassic。
{{Saving on TiddlyDesktop}}
{{Introducing TiddlyDesktop Video}}
! 原始代码
TiddlyDesktop 是基于开放源项目 [[NW.js]],其原代码置于 GitHub:
https://github.com/Jermolene/TiddlyDesktop/
请参阅 [[TiddlyDesktop Releases]] 和 [[如何自订 TiddlyDesktop|How to Customize TiddlyDesktop]]
可于 https://github.com/Jermolene/TiddlyDesktop/releases/latest 找到 TiddlyDesktop 的最新版本,或者您可以看到[[所有版本的清单|https://github.com/Jermolene/TiddlyDesktop/releases]]。
Google 云端硬盘的一个附加程序,允许存放在那里的 TiddlyWiki 文件可直接被打开和保存。
要查找更多信息,请到此项目的 github 页面:
{{!!url}}
<<<
I made an app that lets one edit TiddlyWiki files saved in your Google drive and then saving them back automagically. The page is here https://chrome.google.com/webstore/detail/tiddly-drive/oaphhjhbbabdjnpjpiliepphpmnioolo but I think you need to add it from the Google Drive web interface.
I even added an optional ability to save with ctrl + s hotkeys.
<<< [[Joshua's launch post|https://groups.google.com/d/topic/tiddlywiki/7pNJizR57e8/discussion]]
TiddlyFox 是旧版 Firefox 浏览器的附加组件,它允许标准版的 TiddlyWiki 将更动直接保存到文件系统。TiddlyFox 可在桌面系统和智能手机版本的 [[Firefox 浏览器|Firefox]] 上运作。请参阅 [[Saving with TiddlyFox]] 或 [[Saving with TiddlyFox on Android]] 的详细说明。
TiddlyFox 现在已经过时了,因为与最新版本的火狐不兼容 - 见[[TidlyFox 启示录|TiddlyFox Apocalypse]]。TiddlyFox 有许多替代方法,但没有一种以完全相同的方式工作 - 详细信息,请参阅[[开始使用|GettingStarted]]。
TiddlyFox 可以从 Mozilla 附加组件 网站下载:
https://addons.mozilla.org/zh-TW/firefox/addon/tiddlyfox/
<<<
您也可以直接从 GitHub 安装 TiddlyFox 的最新开发版本:
https://github.com/TiddlyWiki/TiddlyFox/raw/master/tiddlyfox.xpi
<<<
! 摘要
Mozilla 于 2017 年 11 月 14 日[[发布 Firefox 57|https://blog.mozilla.org/blog/2017/09/26/firefox-quantum-beta-developer-edition/]],一个主要的新版本,有许多改进和安全性增强功能。然而,在这些改进中,"Firefox 的安全模型产生了一些根本性的变化,導致 TiddlyFox 的功能失效" 的不幸后果。
TiddlyFox 仍适用于[[继续使用早期版本的 Firefox|https://groups.google.com/d/topic/tiddlywiki/OJQ0yRq4zog/discussion]],但任何升级到新版本的人,都需要选择一种新的方法来处理 TiddlyWiki 的保存变更。
令人高兴的是,现在有一些新的方法可以与 TiddlyWiki 一起使用,以便用户有许多选择 -- 详见 GettingStarted。TiddlyFox 的终结已经激起了最近的这些发展,因此终将有益于社区。
在 TiddlyWiki 论坛上有关于这些发展的[[讨论串|https://groups.google.com/d/topic/tiddlywiki/LcldXzPlTK0/discussion]]。
! 缘由
在 TiddlyWiki 的第一个版本的几个月后,Firefox 于 2004 年 11 月首次发布。千年猎鹰在很多方面是微软的死亡之星(以Internet Explorer 的形式)。 IE 浏览器已经主导浏览器超过 5 年,微软自我扩展的 HTML 已经成为事实上的标准,牺牲了可能有利于整个网络社区的创新,导致许多网络社区感到沮丧。
Firefox 很快就成功了,因为它能够在提供卓越用户体验的同时,使网页与 IE 浏览器足够兼容。用户体验的很大一部分是任何用户都能够自订浏览器的各个方面。这背后有两项创新:
* 浏览器的整个用户接口是构建于 [[https://en.wikipedia.org/wiki/XUL]],有效地扩充 HTML,使其能够呈现常规的用户接口 (当时,HTML 主要限于简单面向文档的布局)。调整几行 XUL 代码可以对浏览器的用户接口进行大规模的更改
* Mozilla 的附加组件结构赋予附加组件所有权限,使其能够与浏览器引擎,及其所运行的电脑文件系统,进行深入的观察和交互。
这两个条件使 Firefox 附加组件的生态系统充满活力,其中许多都非常受欢迎。在许多情况下,最初在浏览器的附加组件中看到的创新,后来变成集成到浏览器本身,最显著的是网页调试器 [[Firebug|https://en.wikipedia.org/wiki/Firebug_(software)]],它最终被所有浏览器厂商复制.
Firefox 一直是非常流行的,直到 Google 加入竞争对手 ~WebKit 浏览器的开发来制作 Chrome。 Google 对制作浏览器的取舍,采取了截然不同的做法,专注于以牺牲几乎所有其他因素为代价来提高安全性。他们首创了一些方法,比如隔离每个分页于个别的处理进程,而所有其他主要浏览器都很快地采用了它。
Google 的方法排除采用 Mozilla 的免费附加组件。Chrome 浏览器中的附加组件并不能访问整个浏览器环境和文件系统,而只能看到浏览器中正在进行的一个受限子集,并且几乎不能访问主机的资源。
这是不可避免的,Mozilla 最终将采用 Google 的方法,[[浏览器安全性相对于附加组件|https://support.mozilla.org/en-US/kb/firefox-add-technology-modernizing]]。在这一点上,Mozilla 没有责任发布一个比市场领导者安全更差的浏览器。
! 训示
TiddlyWiki 生态系统的一些繁荣,源于 Firefox 采用上述两个原则:
* 使应用程序用户接口与应用程序内容具有相同的原语
* 给附加组件自由,观察和与应用程序的所有内部逻辑交互
TiddlyWiki 的这两个特性对 Firefox 的安全性呈现了类似的挑战。一个主要关注安全性的 TiddlyWiki 需要削减这些能力。
! 未来
新的基于浏览器的用户接口和功能的创新,现在已经从浏览器延伸转变为新一代的框架,简化了基于现成的开源 HTML 渲染引擎的自订浏览器的创建。TiddlyDesktop 使用 [[nwjs|https://nwjs.io]],但 [[Electron|https://electron.atom.io/]] 现在也很流行。
TiddlyIE 是 Internet Explorer 的一个附加组件,允许 TiddlyWiki 文件直接保存其变更至文件系统。TiddlyIE 适用于桌面版的 Internet Explorer。
请参阅 [[Saving with TiddlyIE]]。
一个基于 [[Vis.js|http://visjs.org]] 的交互式网络可视化插件。可以在这里找到一个演示,也包含安装说明:{{!!url}}。此插件原代码的 GitHub 保存库于[[此处|https://github.com/felixhayashi/TW5-TiddlyMap]]。
<<<
~TiddlyMap is a TiddlyWiki plugin that allows you to link your wiki-topics (tiddlers) in order to create clickable graphs. By creating relations between your topics you can easily do the following:
* Create concept maps and quickly manifest your ideas in tiddlers.
* Create task-dependency graphs to organize and describe your tasks.
* Visualize your topic structures to get an immediate grasp of topics and relations.
In general you may create, visualize and describe any network-structure you have in mind.
<<<
TiddlyWiki 的 Node.js 配置的扩充,添加对静态附件的支持,可同时处理多个维基。
{{!!url}}
<<<
TiddlyServer 2.0 takes the server command of TiddlyWiki on NodeJS and adds it to a static file server. This means you can load and serve any TiddlyWiki data folder in the same way you can serve a single file TiddlyWiki.
But you don't need to serve files and folders from just one place, you can serve them from multiple places anywhere on your harddrive (literally anywhere NodeJS can stat, readdir, and readFile). You can even organize them into virtual folders (aka aliases in Apache and mounts in Express).
The main point, of course, is that you can actually edit your files, not just look at them. Single file TiddlyWikis use the put saver, which needs to be patched using a bookmarklet included on the index page. The instructions for this are below under the heading "One thing that needs to be noted".
And, of course, you can edit data folder tiddlywikis just like you were running node tiddlywiki.js data --server, except that you run it on the path that you found it at (e.g. http://localhost/personal/notes/). You can have as many data folders open as you want, they don't conflict (though they will each take memory).
Data folders store individual tiddlers instead of entire wikis. They take less disk space as they also do not store the core and plugins. This means they also save much quicker, especially over the internet. They also save immediately (within 10 seconds or so) and they save drafts.
<<<
Tiddlyshow is a small application of Tiddlywiki for presentation and slideshow. It can also be used as a plugin.
{{!!url}}
Tiddlyshow contains the following features
* Tools for preparing slides
* Shortcut keys for navigation (forward and backward)
* Themes to colorify and customize the slideshow
TiddlySpace 是一个公开的 TiddlyWiki 托管服务,营运期间从 2010 到 2016 年。
TiddlySpace 和底层的 TiddlyWeb,最初由 [[BT]] 的 [[Osmosoft]] 赞助。
TiddlyWeb 是一个将[[条目|Tiddlers]]放在网页上的服务器应用程序:
http://tiddlyweb.com/
TiddlyWeb 可用于托管 TiddlyWiki 和 TiddlyWiki5 维基,使个别条目可用于灵活的 HTTP API。
TiddlyWeb 原本是由 [[BT]] 的 [[Osmosoft]] 赞助(连同 TiddlySpace)。
网页服务器 API 使用最初为 TiddlyWeb 设计的特殊格式的条目:
* 字段值表示为字符串。清单 (像是 ''tags'' 和 ''list'' 字段) 使用双方括弧引用包含空格的值
* 条目表示为一个对象,其中包含一组固定的标准字段,自订字段被降级为 ''fields'' 的特殊属性
* 标准字段为:''bag''、''created''、''creator''、''modified''、''modifier''、''permissions''、''recipe''、''revision''、''tags''、''text''、''title''、''type''、''uri''
例如,请考虑以下条目:
```
{
"title": "HelloThere",
"tags": "FirstTag [[Second Tag]]",
"my-custom-field": "Field value"
}
```
在通过 API 传输时,条目将转换为以下格式:
```
{
"title": "HelloThere",
"tags": "FirstTag [[Second Tag]]",
"fields": {
"my-custom-field": "Field value"
}
}
```
~TiddlyWiki 是丰富的、交互式的工具,用于处理复杂的数据,不易融入如试算表或文字处理的传统工具的结构。
~TiddlyWiki 旨在适应围绕您的大脑,帮助您处理不合适的事情。[[基本的理念|Philosophy of Tiddlers]]是更有用的、可重复使用信息,如果我们把它切成语义上有意义的片段 -- [[条目|Tiddlers]] -- 并赋予标题,以便他们可以用[[链接|TiddlerLinks]]、[[标签|Tagging]]、[[清单|ListField]]和[[宏|Macros]]等方式[[结构化|Structuring TiddlyWiki]]信息。条目使用 WikiText 标记,简明地表示广泛的文本格式和超文本特性。~TiddlyWiki 旨在为处理条目提供流体接口,允许其聚合组成更长的故事。
人们爱用 ~TiddlyWiki,因为它不须任何复杂的服务器基础设施、因为它是[[开放源码|OpenSource]],它带给人们前所未有的自由来保持他们在自己的控制之下的珍贵信息。
~TiddlyWiki 最初是由 JeremyRuston 创建,现在则是一个忙碌的独立开发者[[社区|Community]]的蓬勃发展的开放源码项目。
TiddlyWiki 的核心是可扩展的文本与图像的转换引擎,基于条目的内容文本与其相关联的[[内容类型|ContentType]],引擎可以生成以新[[内容类型|ContentType]]的条目呈现。此外,它可以有效地选择性地更新呈现以追踪条目或其从属条目的任何更改。
! 概述
下面的关系图显示 TiddlyWiki 的内部情况,一堆条目经由一个处理管道将 WikiText 转换成 HTML。
{{TiddlyWiki Architecture.svg}}
该处理管道显示 WikiText 如何由一些解析规则解析成一个解析树,此解析树再呈现为一小工具树,然后透过[[刷新机制|RefreshMechanism]]同步到 DOM。
DOM 事件触发小工具去更新条目保存储库,更新触发一个异动事件,再触发刷新机制来更新 DOM
! 主从式架构
{{Server Architecture.svg}}
在设计 TiddlyWiki 5 插件时,其中包括例子范围以外进行的更改,您将需要 TiddlyWiki 的内部体系结构有更深入的认识。
! 模型
TiddlyWiki 的数据模型只是相当简单的 key-value 存储。
* 每一条目只是一个 `fields` 对象包含的成员,如 `title`, `text`, `tags` 等等。
* 核心 `Wiki` 类别定义于 `boot/boot.js` 实现简单的关联数组行为,像是插入、 删除、 反复运算、keys 列表和 get-by-key。
* 于 `core/modules/wiki.js` 的代码扩充 `Wiki` 类别的功能,像是事件调度与缓存支持的各种方法,例如 `getTiddlersWithTag`.
作用中的条目存储可通过 `$tw.wiki` 被访问,如这个示例所示:
```js
$tw.wiki.makeTiddlerIterator($tw.wiki.getTiddlersWithTag('timeline')
)(function(tiddler, title) {
// Skip templates
if (tiddler.fields.tags.indexOf('templates') >= 0) { return; }
do_something(tiddler);
});
```
最终用户不应在正常操作下可见的数据 (亦即内部组件、插件、GUI 小工具的持续状态) 是存放于 [[系统条目|SystemTiddlers]] 经由一组[[命名空间|Naming of System Tiddlers]]组成。
文件系统路径与系统条目的名称之间的相似性是刻意的,且将用于提供阶层式浏览接口,在未来的 TiddlyWiki 版本。
! 查看
TiddlyWiki 的查看层具有 //诸多//与桌面小工具组相同,这是最有可能把新来的人绊倒的部分。有两个面向:
!! DOM 的角色
因为 TiddlyWiki 可能重新呈现内容,插件应视为 DOM 唯写。
换句话说,您在 DOM 中保存的任何状态可以在任何瞬间消失,你需要改为使用 TiddlyWiki 内部的[[状态机制|StateMechanism]]。
在桌面应用程序中,基本的小工具类别定义一个方法像是 `paint(canvas)` 回应被称为 `expose` 事件或 "data has changed" 消息。
在 TiddlyWiki 中,于 `core/modules/widgets/widgets.js` 该 `Widget` 类别定义一个 `render(parent, nextSibling)` 方法,TiddlyWiki 要求在回应各种事件,例如模型里的更动。
(减轻该潜在效率低下的方法,TiddlyWiki 通过调用 `refresh(changedTiddlers)` 方法询问您的小工具是否其当前的呈现是陈旧。)
!! 控制点
虽然, TiddlyWiki 的延伸 [[WikiText]] 与 HTML 范本语言,在设计上逻辑构造相似,但因为它用来定义 TiddlyWiki 的大部分的用户接口,所以您不能忽略它,并在 Javascript 中组合您的所有内容。
在这方面,它是更接近于一种粘合语言类似 Qt Quick 或 Python with Javascript,充满 C/C++ 在像是 Qt 和 GTK + 的小工具的工具包中的 "创建新的组件" 角色。
要让你自己熟悉这个,请参阅 [[小工具|Widgets in WikiText]] 和 [[筛选器|Filters]]。然后检查条目内部像是 [[TaskManagementExample]]。
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="136 88 583 340" width="583pt" height="340pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.0.4 <dc:date>2014-03-18 12:12Z</dc:date></metadata><defs><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica Neue" font-size="12" panose-1="2 0 5 3 0 0 0 2 0 4" units-per-em="1000" underline-position="-100" underline-thickness="50" slope="0" x-height="517" cap-height="714" ascent="951.99585" descent="-212.99744" font-weight="500"><font-face-src><font-face-name name="HelveticaNeue"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Architecture</title><g><title>Main</title><rect x="147.40158" y="240.94488" width="100" height="50" fill="white"/><rect x="147.40158" y="240.94488" width="100" height="50" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(152.40158 258.94488)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="22.666992" y="11" textLength="29.988281">WikiText</tspan></text><rect x="225.35433" y="322.98425" width="100" height="24.094488" fill="white"/><rect x="225.35433" y="322.98425" width="100" height="24.094488" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(230.35433 328.0315)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="27.328125" y="11" textLength="35.34375">解析器</tspan></text><rect x="300.70079" y="240.94488" width="100" height="50" fill="white"/><rect x="300.70079" y="240.94488" width="100" height="50" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(305.70079 258.94488)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="17.208984" y="11" textLength="38.677734">解析树</tspan></text><rect x="382.67717" y="322.98425" width="100" height="24.094488" fill="white"/><rect x="382.67717" y="322.98425" width="100" height="24.094488" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(387.67717 328.0315)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="19.986328" y="11" textLength="50.027344">渲染器</tspan></text><rect x="454" y="240.94488" width="100" height="50" fill="white"/><rect x="454" y="240.94488" width="100" height="50" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(459 258.94488)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="14.208984" y="11" textLength="44.677734">小工具树</tspan></text><rect x="540" y="322.98425" width="100" height="24.094488" fill="white"/><rect x="540" y="322.98425" width="100" height="24.094488" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(545 328.0315)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="8.654297" y="11" textLength="72.691406">刷新周期</tspan></text><rect x="607.2992" y="240.94488" width="100" height="50" fill="white"/><rect x="607.2992" y="240.94488" width="100" height="50" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(612.2992 258.94488)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="31.001953" y="11" textLength="27.996094">DOM</tspan></text><line x1="225.60992" y1="290.94488" x2="254.35201" y2="316.41793" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="288.49316" y1="322.98425" x2="316.13867" y2="297.63556" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="380.36514" y1="290.94488" x2="410.81205" y2="316.6044" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="445.11436" y1="322.98425" x2="471.07985" y2="297.83288" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="535.12036" y1="290.94488" x2="567.2854" y2="316.7841" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="601.73556" y1="322.98425" x2="626.038" y2="298.03638" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="235.12992" y="366.49607" width="61.944882" height="36.464568" fill="white"/><rect x="235.12992" y="366.49607" width="61.944882" height="36.464568" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(240.12992 370.72835)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.298613" y="11" textLength="34.68164">解析 </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.6325975" y="25" textLength="30.679688">规则</tspan></text><rect x="239.16929" y="370.74803" width="61.944882" height="36.464568" fill="white"/><rect x="239.16929" y="370.74803" width="61.944882" height="36.464568" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(244.16929 374.98032)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.298613" y="11" textLength="34.68164">解析 </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.6325975" y="25" textLength="30.679688">规则</tspan></text><rect x="243.63386" y="375.8504" width="61.944882" height="36.464568" fill="white"/><rect x="243.63386" y="375.8504" width="61.944882" height="36.464568" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(248.63386 380.08268)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.298613" y="11" textLength="34.68164">解析 </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.6325975" y="25" textLength="30.679688">规则</tspan></text><rect x="392.45276" y="371.17323" width="61.944882" height="36.464568" fill="white"/><rect x="392.45276" y="371.17323" width="61.944882" height="36.464568" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(397.45276 375.40552)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.298613" y="11" textLength="34.68164">解析 </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.6325975" y="25" textLength="30.679688">规则</tspan></text><rect x="396.49213" y="375.4252" width="61.944882" height="36.464568" fill="white"/><rect x="396.49213" y="375.4252" width="61.944882" height="36.464568" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(401.49213 379.65748)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.298613" y="11" textLength="34.68164">解析 </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.6325975" y="25" textLength="30.679688">规则</tspan></text><rect x="400.9567" y="380.52756" width="61.944882" height="36.464568" fill="white"/><rect x="400.9567" y="380.52756" width="61.944882" height="36.464568" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(405.9567 391.75985)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="4.298613" y="11" textLength="43.347656">小工具</tspan></text><line x1="275.20172" y1="347.07874" x2="274.83726" y2="375.8504" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="432.53576" y1="347.07874" x2="432.14314" y2="380.52756" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="306.67509" y="124.253425" width="64.169496" height="31.221135" fill="white"/><rect x="306.67509" y="124.253425" width="64.169496" height="31.221135" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(311.67509 132.86399)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="5.964631" y="11" textLength="7.330078">条目</tspan></text><path d="M 317.97482 121.17033 L 380.90692 135.29509 L 374.09668 165.63772 L 311.16458 151.51296 Z" fill="white"/><path d="M 317.97482 121.17033 L 380.90692 135.29509 L 374.09668 165.63772 L 311.16458 151.51296 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(320.9813 130.60655) rotate(12.650084)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.1287505" y="11" textLength="7.330078">条目</tspan></text><path d="M 297.44879 115.960235 L 361.58155 111.596724 L 363.7001 142.73405 L 299.56733 147.09756 Z" fill="white"/><path d="M 297.44879 115.960235 L 361.58155 111.596724 L 363.7001 142.73405 L 299.56733 147.09756 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(303.02135 124.205634) rotate(-3.8923335)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.020398" y="11" textLength="7.330078">条目</tspan></text><path d="M 320.83785 136.44772 L 384.49183 126.641624 L 389.23648 157.4404 L 325.5825 167.2465 Z" fill="white"/><path d="M 320.83785 136.44772 L 384.49183 126.641624 L 389.23648 157.4404 L 325.5825 167.2465 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(327.08608 144.16744) rotate(-8.7577504)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.0823204" y="11" textLength="7.330078">条目</tspan></text><rect x="311.16458" y="108.062685" width="64.169496" height="31.221135" fill="white"/><rect x="311.16458" y="108.062685" width="64.169496" height="31.221135" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(316.16458 116.67325)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="5.964631" y="11" textLength="7.330078">条目</tspan></text><path d="M 321.59777 127.79346 L 384.52987 141.91822 L 377.71963 172.26085 L 314.78754 158.13609 Z" fill="white"/><path d="M 321.59777 127.79346 L 384.52987 141.91822 L 377.71963 172.26085 L 314.78754 158.13609 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(324.60426 137.22968) rotate(12.650084)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.1287505" y="11" textLength="7.330078">条目</tspan></text><path d="M 333.94065 113.7299 L 398.01585 119.184126 L 395.36937 150.27443 L 331.29417 144.82021 Z" fill="white"/><path d="M 333.94065 113.7299 L 398.01585 119.184126 L 395.36937 150.27443 L 331.29417 144.82021 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(338.1931 122.724355) rotate(4.865417)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.033345" y="11" textLength="7.330078">条目</tspan></text><path d="M 334.1214 103.57611 L 398.25416 99.2126 L 400.3727 130.34992 L 336.23995 134.713434 Z" fill="white"/><path d="M 334.1214 103.57611 L 398.25416 99.2126 L 400.3727 130.34992 L 336.23995 134.713434 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(339.69397 111.82151) rotate(-3.8923335)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.020398" y="11" textLength="7.330078">条目</tspan></text><path d="M 339.87759 121.59173 L 403.9528 127.04595 L 401.30632 158.13626 L 337.23111 152.68203 Z" fill="white"/><path d="M 339.87759 121.59173 L 403.9528 127.04595 L 401.30632 158.13626 L 337.23111 152.68203 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(344.13004 130.58618) rotate(4.865417)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.033345" y="11" textLength="7.330078">条目</tspan></text><path d="M 337.7924 126.641624 L 401.44636 136.44772 L 396.70171 167.2465 L 333.04774 157.4404 Z" fill="white"/><path d="M 337.7924 126.641624 L 401.44636 136.44772 L 396.70171 167.2465 L 333.04774 157.4404 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(341.42757 135.88391) rotate(8.7577504)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.0823204" y="11" textLength="7.330078">条目</tspan></text><path d="M 336.3997 127.79346 L 399.3318 141.91822 L 392.52156 172.26085 L 329.58947 158.13609 Z" fill="white"/><path d="M 336.3997 127.79346 L 399.3318 141.91822 L 392.52156 172.26085 L 329.58947 158.13609 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(339.40619 137.22968) rotate(12.650084)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.1287505" y="11" textLength="7.330078">条目</tspan></text><rect x="317.57395" y="124.253425" width="64.169496" height="31.221135" fill="white"/><rect x="317.57395" y="124.253425" width="64.169496" height="31.221135" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(322.57395 132.86399)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="5.964631" y="11" textLength="7.330078">条目</tspan></text><rect x="325.06698" y="111.596724" width="64.169496" height="31.221135" fill="white"/><rect x="325.06698" y="111.596724" width="64.169496" height="31.221135" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(330.06698 120.20729)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="5.964631" y="11" textLength="7.330078">条目</tspan></text><path d="M 317.57395 143.869825 C 274.7153 150.06016 200.72315 163.89459 170.90945 188.58268 C 152.94667 203.45727 154.53846 219.35909 162.5136 232.85313" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><path d="M 506.95763 240.94488 C 505.13455 229.37176 498.64037 215.00789 481.2756 200.58268 C 460.65845 183.45567 429.77349 170.44242 404.9383 161.91045" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><path d="M 399.78056 121.64683 C 439.34726 128.997235 506.06368 146.93548 548.26772 188.25197 C 591.50662 230.58156 595.08514 283.81178 593.0526 313.13327" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><path d="M 473.01302 126.65157 L 546.96656 164.33278 L 535.6168 186.60794 L 461.66326 148.92673 Z" fill="white"/><text transform="translate(474.9711 133.82206) rotate(27)" fill="#838383"><tspan font-family="Helvetica Neue" font-size="12" font-weight="500" fill="#838383" x=".38" y="11" textLength="72.24">异动事件</tspan></text><path d="M 447.45768 159.51181 L 509.75125 206.45339 L 494.70587 226.41927 L 432.4123 179.4777 Z" fill="white"/><text transform="translate(448.14087 166.91338) rotate(37)" fill="#838383"><tspan font-family="Helvetica Neue" font-size="12" font-weight="500" fill="#838383" x=".322" y="11" textLength="67.356">状态更新</tspan></text><path d="M 157.79752 174.94358 L 240.88618 143.048835 L 249.84538 166.38835 L 166.75672 198.28309 Z" fill="white"/><text transform="translate(164.43645 178.28644) rotate(-21)" fill="#838383"><tspan font-family="Helvetica Neue" font-size="12" font-weight="500" fill="#838383" x=".158" y="11" textLength="32.004">启动时渲染</tspan></text><path d="M 670.3212 290.94489 C 678.09593 310.45568 682.8113 336.61879 661.5997 351.19891 C 624.86066 376.45202 572.26788 379.2353 527.6191 355.0824 C 505.05665 342.87718 499.26587 320.24515 499.0578 300.84103" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><rect x="559.3819" y="359.2366" width="71" height="25" fill="white"/><text transform="translate(564.3819 364.7366)" fill="#838383"><tspan font-family="Helvetica Neue" font-size="12" font-weight="500" fill="#838383" x=".152" y="11" textLength="60.696">DOM 事件</tspan></text></g></g></svg>
于 2015 年 6 月 6 日星期六,举行了首次的巴黎 TiddlyWiki 营。
{{!!url}}
> Bienvenue sur le site du TiddlyWiki Camp. Un évènement pour rencontrer la communauté de ce logiciel Open Source, libre et gratuit. Découvrez ce bloc note personnel polyvalent et adoptez-le pour gérer votre quotidien !
最初由 Jeremy Ruston 构建,现在由 Arlen Beiler 维护,TiddlyWiki Cloud (原名 TiddlyWiki in the Sky for Dropbox) 是一个在线服务,允许您使用浏览器直接在自己的 Dropbox 中编辑 TiddlyWiki 文件。
适用于 TiddlyWiki 5 和 Classic。
https://twcloud.github.io/
https://tiddlywiki.com/tiddlywiki-eu-meetup-2016/
第一天视频:
<iframe width="560" height="315" src="https://www.youtube.com/embed/7o0ClSI7Tdg" frameborder="0" allowfullscreen></iframe>
第二天视频:
<iframe width="560" height="315" src="https://www.youtube.com/embed/ipXyZkC8tjM" frameborder="0" allowfullscreen></iframe>
TiddlyWiki 2017 欧洲聚会,在牛津于 2017 年 06 月 10 日至 11 日。
更多详细信息︰
https://tiddlywiki.com/tiddlywiki-eu-meetup-2017/
[[Sublime Text 3|https://www.sublimetext.com/3]] 的 TiddlyWiki5 `*.tid` 文件的语法定义档
{{!!url}}
TiddlyWiki5 *.tid 文件的 [[Vi iMproved|http://www.vim.org/]] 语法文件。
{{!!url}}
TiddlyWiki 发布为开放源码这意味着任何人都可以读取代码并对其发展作出贡献。
! 资源
如果你有兴趣了解更多关于 TiddlyWiki 的内部运作,[[TiddlyWiki Architecture]] 概述 TiddlyWiki 如何构成的。然后读取代码 — — 与引导核心启动 [[$:/boot/boot.js]]。
! 你需要知道的一件事
TiddlyWiki 的架构与使用 jQuery 编写的 HTML 页面非常不同,这一节简要说明 TiddlyWiki 如何不同。第一次读它可能没有意义。
理解它内部是如何工作的关键,在于了解[[刷新机制|RefreshMechanism]]要求在任何时间重新生成任何区域的 DOM。这意味着整个用户接口的状态必须驻留在条目存储中,从哪里它同步到 dom。这是通过在刷新周期期间尽量减少 DOM 的相互作用来提高性能。
也确定了以下标准的用户接口:
# 一个小工具的事件处理常式被触发
# 该事件处理常式可以操作该小工具直接创建的 DOM 节点和/或修改条目的保存状态
# 然后核心发出存储变更事件去触发刷新周期
# 然后在小工具树中的每个小工具取得一个刷新本身的机会,必要时可以反映条目存储区中的更改。
从技术的角度与严格的分离关注,TiddlyWiki 是相当典型的 MVC 架构。模型是条目存储区,视图是渲染树 (例如,在 startup.js 从 [[$:/core/ui/PageMacros]] 创建的一个视图),而控制器则是核心代码本身。
TiddlyWiki 社区定期举行 Google 视频会议,通常是每周二下午四点到下午六点(英国时间),公告于 [[TiddlyWiki Google 论坛|https://groups.google.com/d/forum/tiddlywiki]] 以及 [[TiddlyWiki 推特|https://twitter.com/TiddlyWiki]]。
过去的视频会议归档于此 ~YouTube 播放清单:
<iframe width="560" height="315" src="https://www.youtube.com/embed/videoseries?list=PLVT_2PPd-1p34gGCQ5qpwC8QdykxVAI3u" frameborder="0" allowfullscreen></iframe>
TiddlyWeb 专用云端版可让内容于运行在浏览器的 TiddlyWiki 与 TiddlyWeb 服务器之间同步。功能包含:
* 延迟加载
* 内容于浏览器与服务器之间双向同步
** 以轮询方式完成自服务器同步 (目前为每隔 60 秒)
* 节流,使快速更动条目,而不拖垮服务器
这个简短的屏幕截取,显示如何设置 Android 里的 Firefox,让您可以将更改保存到 TiddlyWiki:
<iframe width="560" height="315" src="https://www.youtube.com/embed/iikkv9orGGI" frameborder="0" allowfullscreen></iframe>
在 [[Node.js]] 上运行 TiddlyWiki 带来除了单档版本之外的几个重要的好处:
* 您可以在所有适当地兼容 HTML5 浏览器上编辑您的内容,包括智能手机和平板计算机
* 个别条目保存在不同的文件中,您可以依想要的方式组织
* 构建混合不同的共用和独特的内容组合的多个维基的能力
<<.warning """请注意,Node.js 上的 TiddlyWiki 目前不支持在文件系统运行时,通过文件系统直接修改条目文件。必须重新启动服务器才能使更改生效。与运行中的维基交互的建议方法是通过 HTTP 或 JavaScript API 进行交互。""">>
详细信息请参阅:
<<list-links "[tag[TiddlyWiki on Node.js]]">>
这里有 TiddlyWiki5 的最新版本的详细信息。如何命名版本的详细信息,请参阅 [[TiddlyWiki5 Versioning]]。请注意,发布源文件案的已归档的版本,可从 https://github.com/Jermolene/TiddlyWiki5/releases 取得。
如果您使用 node.js,还可以安装以前的版本:
> npm install -g tiddlywiki@5.1.13
(另请参阅[[试用版|BetaReleases]]和[[开发版|AlphaReleases]]信息)。
<$list filter="[tag[ReleaseNotes]!sort[created]limit[1]]">
<$macrocall $name="tabs" tabsList="[tag[ReleaseNotes]!sort[created]]" default={{!!title}} class="tc-vertical" template="ReleaseTemplate" />
</$list>
一个广泛的教程,适合 TiddlyWiki 入门。建议
{{!!url}}
<<<
This tutorial is aimed at giving you a basic foundation so that you can start using TiddlyWiki right away. Here we take a look at the technology behind Tiddlywiki, how to install it and create your first Tiddler.
<<<
! 简介
在一个 [[TiddlyWiki 文件夹 |TiddlyWikiFolders]] 的子文件夹中的 `tiddlywiki.files`JSON 文件覆写递归扫描条目文件的文件夹的常规。反之, `tiddlywiki.files` 文件指定说明从特定档和文件夹加载条目。
文件的格式为一个具有两个可选属性的对象︰
* ''tiddlers'' - 一个描述外部文件的对象数组,从文件中读取来重写或修改的任何字段的能力
* ''directories'' - 一个描述外部目录的对象数组,确定在这些应被处理的目录内的文件筛选器,以及从文件中读取重写或修改的任何字段的能力
请注意,于 [[5.1.14 版|Release 5.1.14]] 导入此显著增强 `tiddlywiki.files` 的处理。
!! 字段重写
`tiddlywiki.files` 文件的 ''tiddlers'' 和 ''directories'' 两者皆包含以一个 `fields` 对象重写或自定义字段值的能力。
可以将每个字段指定为''字符串''或''数组''值,直接分配给字段或 <<.from-version "5.1.14">> ''对象''描述如何生成字段的值。该对象中包含以下属性︰
* ''source'' -(可选)指定字段的来源值的字符串。如果未指定,则使用现有值
** //filename// 包含该条目的文件的文件名称
** //filename-uri-decoded// 包含该条目的文件的文件名称,套用 [[URI 解码|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent]]
** //basename// 包含该条目的文件的不含扩展名的文件名称
** //basename-uri-decoded// 包含该条目的文件的不含扩展名的文件名称,套用 [[URI 解码|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent]]
** //extname// 包含该条目的文件的扩展名
** //created// 包含该条目的文件的创建日期/时间
** //modified// 包含该条目的文件的修改日期/时间
* ''prefix'' -(可选)前置于字段值的字符串
* ''suffix'' -(可选)追加到字段值的字符串
! 条目段落
`tiddlers` 数组中的文件规范支持以下属性:
* `file`: (必要)包含条目数据的文件的绝对或相对路径(相对路径被解释为相对于 `tiddlywiki.files` 文件的路径)
* `isTiddlerFile`: (可选)若为 `true`,则该文件将被当作[[条目文件|TiddlerFiles]],并将其反串行化以提取条目。否则,该文件的原始内容不做任何解析被分配给 `text` 字段。
* `fields`: (可选)一个包含覆写或自定义条目文件中提供的字段值的对象(见上文)
* `prefix` & `suffix`:(可选)指定字符串的首码和尾码至条目的 `text` 字段
*> 请注意这里提供一个 ''prefix'' 等于设置 ''fields'' 对象的 `text` 字段为 `{"prefix":"<prefixvalue>"}`。
! 目录段落
''directories'' 数组中的目录规范可采取下列形式︰
* 一个''字符串'',指定包含条目文件的目录的绝对或相对路径(相对路径被解译为相对于 `tiddlywiki.files` 文件的路径)。目录是以递归搜索条目文件
* <<.from-version "5.1.14">> 具有以下属性的''对象''︰
** ''path'' -(必要)包含条目文件的目录的绝对或相对路径(相对路径被解译为相对于 `tiddlywiki.files` 文件的路径)。 请注意,目录不是递归地搜索;子目录会被忽略
** ''filesRegExp'' -(可选)一个[[正则表达式 |https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions]],匹配在应被处理目录内的文件的文件名称
** ''isTiddlerFile'' -(必要)若为 `true`,则该文件将被当作[[条目文件|TiddlerFiles]],并将其反串行化以提取条目。否则,该文件的原始内容不做任何解析被分配给 `text` 字段。
** ''isEditableFile'' -(可选)若为 `true`,则对条目的更改将保存回源文件案。只要条目不生成来自 $:/config/FileSystemPath 筛选器的结果,则它将保存回源文件案路径,如果从筛选器返回结果,它将覆盖生成的最终文件路径。 <<.from-version "5.1.23">>
** ''fields'' -(必要)一个对象,包含重写或自定义条目文件中提供的字段的值(见上文)
字段可被重写特定文件由创建具有相同的名称加上尾码 `.meta` 的文件 -- 请参阅 TiddlerFiles。
! 示例
这些示例 `tiddlywiki.files` 必须放在[[维基文件夹|TiddlyWikiFolders]]自己的子目录中。
还有几个 `tiddlywiki.files` 文件的示例在主要的 [[TtiddlyWiki 5 GitHub 保存库|https://github.com/Jermolene/TiddlyWiki5]]。
!! 导入 PDFs 的文件夹
本示例从由相对路径指定的文件夹检索所有档扩展名 `.pdf`。此路径以 "../../../" 开头,表示此配置文件所在的文件夹上三层目录。每一条目用以下字段设置为[[延迟加载|LazyLoading]]︰
* ''title'' - 设为 PDF 档的基于 URI 解码的文件名称。[[URI 解码|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent]]允许字符如 "/" 被 URI 编码为 "%2F" 而包含于标题名称
* ''created'' - 设为 PDF 档的创建日期/时间
* ''modified'' - 设为 PDF 档的修改日期/时间
* ''type'' - 设为 `application/pdf`
* ''tags'' - 设为 `$:/tags/AttachedFile`
* ''text'' - 设为空字符串
* ''_canonical_uri'' - 设为字符串 "pdfs/" 串联文件名称
```
{
"directories": [
{
"path": "../../../input/pdfs",
"filesRegExp": "^.*\\.pdf$",
"isTiddlerFile": false,
"fields": {
"title": {"source": "basename-uri-decoded"},
"created": {"source": "created"},
"modified": {"source": "modified"},
"type": "application/pdf",
"tags": ["$:/tags/AttachedFile"],
"text": "",
"_canonical_uri": {"source": "filename", "prefix": "pdfs/"}
}
}
]
}
```
!! 导入一个文本文件的文件夹
本示例从相对路径指定的文件夹中检索具有 `.txt` 的扩展名的所有文件。此文件夹位于维基的基本文件夹中,当前的设置档位于维基的 "tiddlers/" 文件夹的文件夹中。因此,在这种情况下,路径以 "./../" 遍历两层文件夹,然后向下遍历到 "externalnotes/" 文件夹。每个条目都设置有以下字段:
* ''title'' - 设置为文本档的 URI 解码的基本文件名。[[URI 解码|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent]] 允许 URI 将 "/" 等字符包含在条目名称中,这些字符将其编码为 "%2F"
* ''created'' - 设置为文本档的创建日期/时间
* ''modified'' - 设为文本档的修改日期/时间
* ''type'' - 设置为 `text/plain`
* ''tags'' - 设置为 `[[note]] [[externalnote]] [[.txt]]` (使用数组表示法)
* ''text'' - 未设置,因此文件的内容加载为 <<.field text>> 字段
```
{
"directories": [
{
"path": "../../externalnotes",
"filesRegExp": ".+\\.txt",
"isTiddlerFile": false,
"isEditableFile": true,
"fields": {
"title": {"source": "basename-uri-decoded"},
"created": {"source": "created"},
"modified": {"source": "modified"},
"type": "text/plain",
"tags": ["note", "externalnote", ".txt"]
}
}
]
}
```
这会将 `../../externalnotes/` 目录中的所有文本档,当作单个条目加载维基中。这些可以是各种标记语言的代码段的集合。然后,可以更改每个条目的 `type` 字段,匹配其语言。例如,维基文本的 "text/vnd.tiddlywiki",或 markdown 档的 "text/markdown" 。然后,使用 $:/config/FileSystemPaths 和 $:/config/FileSystemExtentions 条目与以下行,我们可以导致这些条目的任何更改,并将 "*.txt" 文件与附随的 "*.txt.meta" 文件,保存回其开始的目录。然后,当服务器重新启动时,这些 meta 文件将依需要生成,并且将取代从配置 "tiddlywiki.file" 文件(如条目的 `type` 字段)生成的任何字段。
从[[自定义条目文件命名|Customising Tiddler File Naming]]中的示例,我们看到 $:/config/FileSystemPaths 条目中的最终的 `[![tag[externalnote]addprefix[wiki/]]` 筛选器,排除具有 `externalnotes` 标签的所有条目(与早期筛选器不匹配)。这些条目从启动时生成的 $:/config/OriginalTiddlerPaths 中检索其文件路径。
然后,在 $:/config/FileSystemExtensions 条目中的 `[tag[.txt]then[.txt]]` 筛选器,强制将所有这些条目保存回磁盘为 *.txt 和随附的 *.txt.meta 文件(将一般的条目型,重写为文件类型映射)。在这种情况下,允许 ~Tiddlywiki 维基文本的片段或 markdown-text 保存回到 "文本" *.txt 文件
[[TiddlyWikiFolders]] 由在维基的根文件夹内的单一 `tiddlywiki.info` 文件配置。它应该包含一个 JSON 对象,由以下属性构成:
* ''plugins'' - 包括维基中的插件名称的数组
* ''themes'' - 包括维基中的布景主题名称的数组
* ''languages'' - 包括维基中的语言名称的数组
* ''includeWikis'' - 包括维基中的外部维基文件夹的参照的数组
* ''build'' - 具名的构建目标的一个哈希映射,每个目标由一个命令标记数组定义(见 BuildCommand)
* ''config'' - 可选的配置选项的哈希映射(见下文)
!!! ''includeWikis''
''IncludeWikis'' 数组中的项目可以是任一指定维基相对路径的字符串或下列字段对象:
* ''path'' - 维基文件夹的相对路径
* ''read-only'' - 设为 //true// 防止在引入的维基的条目被修改。所做的修改将被写入到 ''default-tiddler-location'' 中指定的目录,如下所述
!!! ''build''
请注意,如果该目标的名称未定义于当前的 `tiddlywiki.info` 文件中,则引入维基的构建目标会被合并。
!!! ''config''
配置选项包括:
* ''default-tiddler-location'' - 用于保存新条目的文件系统配接器(解析相对于维基文件夹)的缺省位置的字符串路径
* ''retain-original-tiddler-path'' - 若为 `true`,则服务器会生成一个条目 [[$:/config/OriginalTiddlerPaths]],其内容为包含在维基内的每个条目的源文件案路径
!!! 示例
例如:
```
{
"plugins": [
"tiddlywiki/tiddlyweb",
"tiddlywiki/filesystem"
],
"includeWikis": [
{"path": "../tw5.com", "read-only": true}
],
"build": {
"index": [
"--rendertiddler","$:/core/save/all","index.html","text/plain"],
"favicon": [
"--savetiddler","$:/favicon.ico","favicon.ico",
"--savetiddler","$:/green_favicon.ico","static/favicon.ico"]
},
"config": {
"retain-original-tiddler-path": true
}
}
```
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ZlwI//twZOyABERjU+5hoAAAAA0gwAAADdzlVfmGgAAAADSDAAAAcHkhRoqZyQSEYtJ29+F+vBQzwYyMHwgpiqRUpfCofaufLUlZLbUFbQABRUwIgqDJCIBcl8kBhhJHKq5He0V5H1TOHsYYQkuVXwcChxT5VJsJfawjIckrQUgSIDoGRSTHWcmsBoGq2MygIlSXXzUowI5mNrsnQj3PYS6autVuV2yQCKAAAb2SwHgkIqbmrSSGsZ0XmqhRysec60BYSjrHfazSXChCGicOAaaDghLhB4wBsHNHBtRomEkxV4MgkkqVnRHPfb///+1MQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjk5LjVVVVVVVf/7UGT7AANkVVNuYaAAAAANIMAAAAegV028kYAAAAA0g4AABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+yBk/AHxVBhTaSEysAAADSAAAAEFxHVN5jxgyAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sQZP6B8Yod0ekhGwIAAA0gAAABBSB3Q6SMTQgAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+yBk8wHxERFRaQEbOAAADSAAAAEFHA87JCUgAAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sQZN2P8AAAf4AAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUQUcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDA==
\define tv-wikilinks() no
! 组建经典版 TiddlyWiki
{{Building TiddlyWikiClassic}}
~TiddlyWiki5 是为未来二十五年重新改写的 TiddlyWiki。它是以 JavaScript 写成的一个完整的交互式维基,可以运行于浏览器或运行于 [[Node.js]] 服务器。
TiddlyWiki5 的每个版本都由符合 [[语义版本 2.0.0|http://semver.org/]] 标准的版号标识。
! TiddlyWiki 核心版本
根据标准:
```
Given a version number MAJOR.MINOR.PATCH, increment the:
MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards-compatible manner, and
PATCH version when you make backwards-compatible bug fixes.
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
```
!! 开发和试用版
而在开发版 TiddlyWiki5 使用预发布标签 "alpha",例如:
```
5.0.1-alpha
```
每一个新的开发或试用版本将冲撞 `PATCH` 版号。这违背了严谨的版本语义,因为 `PATCH` 增量应该保留给兼容的改变。
//注意,之前的 ''5.0.1-alpha'',TiddlyWiki5 使用的版号格式为 ''5.0.0-alpha.19''。这种变化是为了使升级机制从版本信息识别插件的更新。//
!! 预览版
在开发过程中,当一个新的版本正在准备中,预览版的标签设置为 `prerelease`。
! 插件版本
版本号
TiddlyWiki5 使用附加到插件的版本信息来确定升级或导入过程中的其中两个插件何者是最新版。进行这些比较时,该预发布标签被忽略。
"~TiddlyWiki 经典版" 是指完全从头改写的 TiddlyWiki 5.0 之前的版本。TiddlyWiki 经典版则仍被保留于:
https://classic.tiddlywiki.com/
如同传统单档维基,[[TiddlyWiki on Node.js]] 支持保存为个别条目档的文件夹的维基。
! 维基文件夹结构
维基文件夹可以包含以下文件和文件夹:
* ''tiddlywiki.info'' - JSON 文件包含维基的中继数据 -- 详见 [[tiddlywiki.info Files]]
* ''\tiddlers'' - 此文件夹包含组成维基的条目文件的文件夹
* ''\plugins'' - 此文件夹包含维基中的[[插件文件夹|PluginFolders]]
* ''\languages'' - 此文件夹包含维基中的语言插件的[[插件文件夹 |PluginFolders]]
* ''\themes'' - 此文件夹包含维基中的布景主题插件的[[插件文件夹|PluginFolders]]
只有 ''tiddlywiki.info'' 文件是必需的;其余都是可选的。将忽略未列于上面的任何文件和文件夹。
!! 插件处理
要在浏览器中使用,插件只需要包含于维基中。对于在服务器上生成的维基,TiddlyWikiFolders 可以包含一个 [[tiddlywiki.info 文件|tiddlywiki.info Files]],它标识包含在此维基中的插件:
```
{
"plugins": [
"tiddlywiki/slider",
"tiddlytools/chooser"
]
}
```
插件名称是参照 TiddlyWiki5 `plugins` 文件夹中,列出的插件文件夹。也可将插件复制到维基的 `plugins` 子文件夹中,手动包含插件。
!! `tiddlers` 文件夹的处理
在 `tiddlers` 文件夹中的所有[[条目文件|TiddlerFiles]],于启动时读取到维基。[[条目文件|TiddlerFiles]]的子文件夹将被递归扫描。新创建的条目都直接存放在[[条目文件|TiddlerFiles]]下的 `tiddlers` 文件夹,除非[[另行配置|Customising Tiddler File Naming]]。
可提供一个 `tiddlywiki.files` 的 JSON 文件,覆写默认处理文件夹内的 `tiddlers` 子文件夹 -- 请参阅 [[tiddlywiki.files 文件|tiddlywiki.files Files]]。
```
{
"tiddlers": [
{
"file": "d3.min.js",
"fields": {
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/d3/d3.js",
"module-type": "library"
},
"prefix": "var d3;if($tw.browser){\n",
"suffix": "}\nexports.d3 = d3;\n"
},
{
"file": "cloud/d3.layout.cloud.js",
"fields": {
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/d3/d3.layout.cloud.js",
"module-type": "library"
}
},
{
"file": "local/mytiddler.tid",
"isTiddlerFile": true,
"fields": {
"title": "A different title"
}
}
],
"directories": [
"../../mytiddlers/store"
]
}
```
<<.def timeline>> [[宏|Macros]]传回依修改日期时间 (或其他[[日期字段|Date Fields]]) 反向顺序的条目清单,按日期分组。
!! 参数
;limit
: 包含条目的最大数量,缺省为 100。但如果包含一个特定日期的<<.em 任何>>条目,则将包含该日期的<<.em 所有>>其他条目 -- 即使这超出限制
;format
: 一个指定所需[[日期格式|DateFormat]]的字符串,缺省为 `DDth MMM YYYY`
;subfilter
: 可选的额外的[[筛选器 step|Filter Step]],例如 `tag[MyTag]`
;dateField
: 要使用的日期字段名称,缺省为 `modified`
由[[筛选器表达式|Filter Expression]]选择条目,拼接其中 <<.param subfilter>> 和 <<.param limit>> 参数如下:
> `[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]`
<<.macro-examples "timeline">>
<$macrocall $name=".example" n="1" eg="""<<timeline format:"YYYY年0MM月0DD日">>"""/>
<$macrocall $name=".example" n="2" eg="""<<timeline limit:30 subfilter:"tag[Definitions]" format:"YYYY年0MM月0DD日">>"""/>
Timelines 插件用于创建垂直和水平时间轴和串行。
{{!!url}}
事件的内容或描述和数据存放在单个条目中。
Timelines 包含两个时间轴宏和两个串行宏。串行宏依序显示事件内容,但不一定按时间顺序显示。顺序可以通过标签、清单字段或其他方法决定。
Timimi 是一个浏览器附加组件伴随一个本机伺服程,可让您保存和备份您的 HTML tiddlywiki 文件,于''您的硬盘的任何地方''。 安装完成后,您就可以保存 tiddlywiki 文文件,没有任何额外的步骤,如同原来的 Tiddlyfox 附加组件。
{{!!url}}
从版本 2.1 开始,Timimi 支持以下浏览器
* Chrome/Chromium
* Firefox
* Opera
* Microsoft Edge (Chromium)
另据回报,可与基于 chrome 的浏览器紧密集成,例如 Brave 和 Vivaldi。
Timimi also provides users with 4 backup strategies, viz:
4 Timimi 也为用户提供四种备份策略,包括:
* 每第 n 次保存,创建一个备份
* 每第 n 分钟,创建一个备份
* 河内塔的客制化
* 先进先出
Tinka 插件提供了在浏览器中创建和修改插件的能力,而不需要使用 Node.js.
详见 GitHub 存储库 https://github.com/TinkaPlugin/Tinka。
{{!!url}}
<<<
This is a Control Panel extension that aims to simplify the plugin creation and editing process. After installing, you will find a new tab in your control panel that makes creating and modifying plugins a little bit easier.
<<<
提示和技巧,帮助您从 TiddlyWiki 获得最大。
<<.def "名称列表">>是呈现一或多个条目名称的一行文本,每个名称和下一个之间以空格串成。
如果名称<<.em 包含>>空格,需要以双中括号将其括住。
例如:
`GettingStarted [[Discover TiddlyWiki]] Upgrading`
名称列表被用于许多地方,包括固定链接和[[列表字段|ListField]]。
实际上,它们是最简单的一种[[筛选器|Filters]],并且因而为[[选择名称|Title Selection]]的一种表达的方式。
`[title[An Example]]` 可以缩短为 `[[An Example]]`,因为 <<.op title>> 是默认的筛选器操作符。相应地,`[!title[An Example]]` 可以缩短为 `[![An Example]]`.
<<.op title>> 为一[[建构子|Selection Constructors]] (除了格式为 `!title`),但是 <<.olink2 "field:title" field>> 是一个[[修饰子|Selection Constructors]]。
<<.operator-examples "title">>
<<.operator-example 1 "[title[HelloThere]]">>
<<.operator-example 2 "[[HelloThere]]">>
<<.operator-example 3 "HelloThere">>
<<.operator-example 4 "[title[HelloThere]] [title[Filter Operators]]">>
<<.operator-example 5 "[[HelloThere]] [[Filter Operators]]">>
<<.operator-example 6 "HelloThere [[Filter Operators]]">>
<<.operator-example 7 "[tag[Filters]] +[!title[Filter Operators]]">>
<<.operator-example 8 "[tag[Filters]] +[![Filter Operators]]">>
<<.operator-example 9 "[tag[Filters]] -[[Filter Operators]]">>
<<.def "名称选择">>是一个有序的条目名称集合(或类似字符串),没有名称会重复出现。
名称选择于[[筛选器|Filters]]处理是重要的。
是写成[[名称清单|Title List]]的最简单的方法。
<<.from-version "5.1.20">>
另请参阅 [[lowercase Operator]]、[[uppercase Operator]]、[[sentencecase Operator]]。
<<.tip "除了每个单字的第一个字母之外,此运算符不会改变任何东西,所以 `[[aBcD eFgH]]` 会变成 `[[ABcD EFgH]]`。如果你想要 `[[Abcd Efgh]]`,那么请使用像 `[lowercase[]titlecase[]]` 这样的筛选器。">>
<<.operator-examples "titlecase">>
<<.operator-example 1 "[[abc def ghi jkl]titlecase[]]">>
<<.operator-example 2 "[[abc deF gHi jKL]titlecase[]]">>
<<.operator-example 3 "[[abc deF gHi jKL]lowercase[]titlecase[]]">>
<<.operator-example 4 "[tag[HelloThere]titlecase[]]">>
Todolist is a small pure wikitext plugin, contain all tools to work with todo list.
Todolist 是一个小型的纯维基文本插件,包含所有用于处理待办事项清单的工具。
{{!!url}}
借助 Todolist,您可以轻松组织并确定任务和项目的优先级,以便您总能确切地知道下一步要处理的工作。
Todolist 创建客制化用户界面,并允许您添加新项目、设置优先级、完成/撤消项目、归档、删除。使用 Todolist 插件,可以在一个 Tiddlywiki 中,创建多个待办事项清单。
<<.from-version "5.1.23">>
<<.op toggle>> 操作符至少需要一个参数,可以接受其他可选参数。通过第二个可选参数,可以在一对标题之间切换:
```
[toggle[<title1>],[<title2>]]
```
* ''title1'' : 一个要在输入清单中切换的标题。如果已存在,则将其删除。否则,将添加它。
* ''title2'': (可选)。当提供第二个参数时,操作符在输入清单中的两个值之间切换。如果两者都不存在,则第一个参数优先添加到清单中。
具有两个以上的参数, <<.op toggle>> 的行为类似于 [[cycle|cycle Operator]],可用于在值列表中循环。请注意,所有操作数都应该是唯一的。
<$macrocall $name=".tip" _="<<.op cycle>> 操作符将其第一个参数解译为要循环浏览的标题列表,并提供相似的功能,而 <<.op toggle>> 操作符接受无限数量的不同参数。"/>
<<.operator-examples "toggle">>
<<.using-days-of-week>>
<<.operator-example 1 """[list[Days of the Week]] +[toggle[Wednesday]]""">>
切换一个条目中的一个标签:
```
<$action-listops $tiddler="target" $tags="+[toggle[done]]" />
```
切换一个条目中的一个字段值:
```
<$action-listops $tiddler="target" $field="my-field" $subfilter="+[toggle[done]]" />
```
在一对值之间切换:
```
<$action-listops $tiddler="target" $field="my-field" $subfilter="+[toggle[todo],[done]]" />
```
! 简介
TranscludeWidget 动态地自其他条目导入内容
! 属性
|!属性 |!说明 |
|tiddler |欲嵌入的条目名称 (缺省为现行条目) |
|field |现行条目的字段名称 (缺省为 "text"; 优先级高于索引属性) |
|index |[[数据条目|DataTiddlers]]里的索引属性 |
|subtiddler |选择性的子条目名称,当目标条目是一个[[插件|Plugins]] (见下方说明) |
|mode |指定嵌入的内容的解析模式为 "block" or "inline",取代缺省的解析模式 |
若嵌入的目标是尚未定义(亦即佚失条目或佚失字段),则 TranscludeWidget 将所含的内容作为备用。
! 解析模式
TiddlyWiki 解析文本于两种模式:
* ''inline'' 模式识别字符格式,像是重点、炼结
* ''block'' 模式识别所有 ''inline'' 格式,且增加 block 格式像是表格、标题及清单。
通常该模式取决于 transclude 小工具是否以解析为 block 或 inline 模式。可由 `mode` 属性取代之。
例如,条目 "A" 的内容:
```
# Item one
#<$transclude tiddler="B"/>
# Item two
```
条目 "B" 的内容:
```
# Item one - a
# Item one - b
```
显示结果为:
# Item one
# # Item one - a # Item one - b
# Item two
可更正条目 "A" 如下:
```
# Item one"""
<$transclude tiddler="B" mode="block"/>"""
# Item two
```
! 子条目访问
此嵌入小工具允许访问存放于[[插件|Plugins]]中的个别条目。
下列示例将嵌入 [[$:/DefaultTiddlers]] 条目的核心版,即使它已被覆写
<<wikitext-example-without-html '
<$transclude tiddler="$:/core" subtiddler="$:/DefaultTiddlers"/>
'>>
[[嵌入|https://en.wikipedia.org/wiki/Transclusion]]是从另一条目 "B" 引用条目 "A",此 "A" 内容出现于 "B" 的处理过程。
复制并粘贴内容,将在不同的地方创建相同内容的多个副本。使用嵌入,可以是单一副本,并于 "B" 使用特定语法,指示来自条目 "A" 的内容应插入的点。
请注意,若修改了 "A" 的内容,则该修改自动出现于 "B"。借由让写於单一地方的片段,可从很多地方看见,这使得重复的内容易于维护。
嵌入的概念于[[条目的哲学|Philosophy of Tiddlers]]中扮演着重要的角色,因为它是组合内容的小项目的主要方式。
了解更多:
* [[嵌入条目|Transclusion in WikiText]]
* [[嵌入基本用法|Transclusion Basic Usage]]
* [[使用模板嵌入|Transclusion with Templates]]
* [[嵌入与替换|Transclusion and Substitution]]
* [[文本参考|TextReference]]
* [[模板条目|TemplateTiddlers]]
* [[嵌入小工具|TranscludeWidget]]
WikiText 的力量来自于在一个条目里面使用另一个条目内容的能力。这种能力需要几种很容易混淆的不同形式。
嵌入与文本替换的主要区别是:
* 嵌入是动态替换任一属性的值:
** 一个条目字段
** 一个变量
* 文本替换在其使用前进行替换宏定义的文本
! 条目字段嵌入
[[Transclusion in WikiText]]说明了嵌入的基本知识。例如:
```
{{MyTiddler}}
```
如[[内嵌 HTML|HTML in WikiText]] 中所述,您还可以嵌入条目字段值为 HTML 元素和小工具的属性。例如:
```
<$text text={{MyTiddler}}/>
```
如[[筛选器符号概述|Introduction to filter notation]]中所述,您还可以嵌入条目字段值为筛选操作数。例如:
```
{{{ [tag{TiddlerContainingMyTag}] }}}
```
! 变量/宏 嵌入
被以参数或变量替换定义的变量称为 "宏"。变量/宏的值可被嵌入的语法:
```
<<myMacro param:"Value of parameter">>
```
如[[内嵌 HTML|HTML in WikiText]] 中所述,,您还可以嵌入变量为 HTML 元素和小工具的属性的值。例如:
```
<$text text=<<myMacro>>/>
```
如[[筛选器符号概述|Introduction to filter notation]]中所述,您还可以嵌入变量为筛选操作数的值。例如:
```
{{{ [tag<myMacro>] }}}
```
! 文本替换
文本替换发生于宏/变量的值被使用时。此于[[宏|Macros in WikiText]]中说明。
替代和嵌入之间的关键区别是替代发生在 WikiText 解析之前。这意味着您可以使用替换构建 WikiText 结构。嵌入则是独立处理,不能组合连续的文本来定义 WikiText 结构。
! 简单的嵌入
包含来自 [[TiddlerA]] 的一些内容到 [[TiddlerB]],编辑后者包括以下内容:
```
This is the content of TiddlerA: {{TiddlerA}}
```
其结果为 [[TiddlerA]] 的 ''text'' 字段的内容(即主要内容)被显示于 [[TiddlerB]]。
! 用法
``{{TiddlerA}}`` 是 ``{{TiddlerA!!text}}`` 的快捷方式。这是因为嵌入的缺省字段是 ''text'',但可以明确地使用其他[[字段|TiddlerFields]]。例如,您可以显示 TiddlerA 的最近修改日期,使用:
```
TiddlerA was modified on {{TiddlerA!!modified}}
```
通过省略条目名称,嵌入语法也可以被用于显示来自当前条目的字段内容,例如:
```
The current tiddler was modified on {{!!modified}}
```
! 递归错误
请注意,使用 ``{{!!text}}`` 或 ``{{}}`` 导致错误 (//Recursive transclusion error in transclude widget//),因为引入当前条目的内容到其本身是没有意义的。当你遇此错误消息,意味着您直接或间接地引入某些东西到其自身(例如,如果条目 A 嵌入条目 B、条目 B 嵌入条目 C,而条目 C 又嵌入条目 A)。
! 了解更多
在 TiddlyWiki,嵌入不限于包括像上述原始内容。要了解嵌入的更高端用法,请参阅[[使用范本嵌入|Transclusion with Templates]]。
另请参阅:
* [[嵌入|Transclusion]]
* [[使用范本嵌入|Transclusion with Templates]]
* [[嵌入条目|Transclusion in WikiText]]
* [[文本参考|TextReference]]
* [[条目字段|TiddlerFields]]
! 简介
您可以使用[[嵌入|Transclusion]]方式,将一个条目的内容合并显示在另一个条目:
* `{{MyTiddler}}` 嵌入单一个条目
* `{{MyTiddler||TemplateTitle}}` 显示条目且指定 [[范本条目|TemplateTiddlers]]
* `{{||TemplateTitle}}` 显示指定样板条目而不改变[[当前条目|Current Tiddler]]
!! 嵌入文本参考
您还可以使用 TextReference 而不是条目的名称:
* `{{MyTiddler!!field}}` 嵌入一个指定的条目字段
* `{{!!field}}` 嵌入一个现行条目的字段
* `{{MyTiddler##index}}` 嵌入一个指定的[[数据条目|DataTiddlers]]的索引属性
* `{{##index}}` 嵌入一个指定的现行[[数据条目|DataTiddlers]]的索引属性
!! 筛选器嵌入
相同的语法可用于嵌入一组符合指定[[筛选器|Filters]]的条目清单。
```
{{{ [tag[WikiText]] }}}
{{{ [tag[WikiText]] ||TemplateTitle}}}
```
! 生成小工具
该 WikiText 的嵌入语法生成一个 TiddlerWidget 包裹着一个 TiddlerWidget。例如, `{{MyTiddler||MyTemplate!!myField}}` 生成下列成对的小工具:
```
<$tiddler tiddler="MyTiddler">
<$transclude tiddler="MyTemplate" field="myField"/>
</$tiddler>
```
另请参阅:
* [[嵌入基本用法|Transclusion Basic Usage]]
* [[使用范本嵌入|Transclusion with Templates]]
* [[范本条目|TemplateTiddlers]]
* [[嵌入小工具|TranscludeWidget]]
* [[嵌入与替换|Transclusion and Substitution]]
! 机制
<<.def transclusion>> [[变量|Variables]] 由 <<.wlink TranscludeWidget>> 小工具设置为一个标识[[小工具树|Widgets]]中的位置的字符串。
~TiddlyWiki 核心用其侦测递归[[嵌入|Transclusion]],也用于实现 <<.mlink qualify>> 宏。
该字符串具有以下语法:
<$railroad text="""
"{" a "|" b "|" c "|" d "|" e "|" "}"
"""/>
<ol style="list-style-type: lower-alpha;">
<li>[[当前条目|Current Tiddler]]的名称</li>
<li>正被嵌入的条目名称</li>
<li>正被嵌入的字段名称</li>
<li>正被嵌入的属性名称或索引</li>
<li>正被嵌入的插件子条目名称</li>
</ol>
此五个项目,多数经常是空白的。
在侧边栏中,<<.var transclusion >> 的值为:
> `{|$:/core/ui/PageTemplate/sidebar|||}`
当条目 <<.tid HelloThere>> 显示在故事河时,<<.var transclusion>> 被设为:
> `{HelloThere|HelloThere|||}`
<<.variable-examples "transclusion">>
此示例演示如何区分侧边栏和其他环境:
<$macrocall $name=".example" n="1"
eg="""We are
<$list
filter="[<transclusion>prefix[{|$:/core/ui/PageTemplate/sidebar|||}]]"
emptyMessage="in the story river.">
in the sidebar.
</$list>"""/>
在侧边栏中,这会显示 `We are in the sidebar`。
! 简介
在[[嵌入基本用法|Transclusion Basic Usage]]中,我们已经看到了如何引入条目 A 的内容到条目 B。现在假设条目 A 包含:
```
@@background-color:yellow;
Hello, my title is {{!!title}}
@@
```
这使得条目 A 以黄色背景显示其名称(欲了解相关 CSS 样式用法,请参阅[[样式及 CSS 类别|Styles and Classes in WikiText]])。试想一下,你要以同样的方式显示条目 B 的名称,但你不想要复制/粘贴的方式,因为之后你可能希望改变背景颜色,你想保持条目之间的一致性。这看起来像嵌入的典型案例,让我们尝试以一般的方式 ``{{A}}``,于条目 B 嵌入条目 A。您应该在条目 B 看到以下内容:
<<<
@@background-color:yellow;
Hello, my title is A
@@
<<<
此样式一如预期被套用,但是条目名称是错误的:我们要 ``{{!!title}}`` 参照到目标条目 B,而不是来源条目 A。
解决方式为使用 //范本// 。在此例中,来源条目 A 称为[[范本条目|TemplateTiddlers]],且使用标记语法 ``{{||A}}`` 将其//套用//到条目 B。不同的是未明确地参考指定条目的所有的[[文本参考|TextReference]]被套用于[[当前条目|Current Tiddler]],亦即目标条目。现在条目 B 正如预期显示:
<<<
@@background-color:yellow;
Hello, my title is B
@@
<<<
! 用法
经由范本嵌入就像套用遮罩:假设来源条目包含通用的参照(如遮罩中的眼孔),这些将被替换为目标条目内容(像是戴面罩的人的眼睛)。
范本可以套用于任何条目,不一定是当前条目。完整标记语法为 ``{{<目标>||<范本>}}``。缺省的 ``<目标>`` 是[[当前条目|Current Tiddler]] (我们使用于上面的示例中)。
! 示例
!! 一个预先定义好的范本,可漂亮地呈现标签
您可以套用系统范本 ``$:/core/ui/TagTemplate`` 到一个标签,即可看到一个有下拉选菜单的标签丸:
```
{{Transclusion in WikiText||$:/core/ui/TagTemplate}}
```
显示为 {{Transclusion in WikiText||$:/core/ui/TagTemplate}}
另请参阅:
* [[嵌入条目|Transclusion in WikiText]]
* [[嵌入基本用法|Transclusion Basic Usage]]
* [[文本参考|TextReference]]
* [[范本条目|TemplateTiddlers]]
* [[嵌入小工具|TranscludeWidget]]
* [[当前条目|Current Tiddler]]
这是特别版的 TiddlyWiki,它简化了创建和维护翻译:
* https://tiddlywiki.com/editions/translators/ - 翻译 ~TiddlyWiki 的当前版本
* https://tiddlywiki.com/prerelease/editions/translators/ - 翻译 ~TiddlyWiki 的最新的预览版本
请注意无须具备 Node.js 或 GitHub 的知识。
您可以于 Node.js 翻译 ~TiddlyWiki,于命令行中运行 `tiddlywiki editions/translators --listen`,再于浏览器中造访 http://127.0.0.1:8080/。
请参阅 https://tiddlywiki.com/dev 的创建和维护翻译的技术细节。
TiddlyWiki 的翻译机制管理和提供 TiddlyWiki 用户界面翻译的语言插件之间进行切换。开发人员网站 https://tiddlywiki.com/dev/ 解释翻译者如何创建和提交 TiddlyWiki 的翻译。
当前语言插件的名称是从 [[$:/language]] 条目读取。如果所选择的插件改变,则任何显示可翻译文本会自动改变。
翻译插件是成捆的条目,每个条目包含独立的可翻译字符串。各该字符串依据需要被嵌入使用。
可翻译字符串通常位于命名空间中 `$:/language/`,例如:
* [[$:/language/EditTemplate/Shadow/OverriddenWarning]]
* [[$:/language/Docs/ModuleTypes/isfilteroperator]]
* [[$:/language/EditTemplate/Fields/Add/Value/Placeholder]]
Trashbin 插件背后的概念,是有一个简单的机制,将已删除的条目,移到垃圾筒,如果需要的话,并能够在稍后撤销它们。
{{!!url}}
垃圾(在 Microsoft Windows 中,也称为资源回收筒)是用户在 Tiddlywiki 中删除,但尚未永久抹除的条目的临时存储。
通常,垃圾筒呈现为特殊存储,允许用户浏览已删除(已移除)的条目、取消删除那些被错误删除的条目,或永久删除它们(逐一,或通过 "清空垃圾筒" 的功能)。
<<.def tree>> [[宏|Macros]] 呈现基于条目名称中的前缀和分隔符号的可展开的树状视图。
!! 参数
;prefix
: 从其生成树状视图的前缀,默认值为 `$:/`
;separator
: 条目名称的各个部分之间的分隔符号,默认值为 `/`
<<.macro-examples "tree">>
<$macrocall $name=".example" n="1"
eg="""<<tree prefix:"$:/">>"""/>
<$macrocall $name=".example" n="2"
eg="""<<tree prefix:"tree-macro-example-" separator:"-">>"""/>
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
详见 [[tree 宏 (示例)|tree Macro (Examples)]]
<<.from-version "5.1.20">>
<<.from-version "5.1.23">> <<.op trim>> 筛选器允许指定一个要修剪的字符串为参数。
<<.operator-examples "trim">>
<<.operator-example 1 "[[ a b ]trim[]addprefix[-]addsuffix[-]]">>
<<.operator-example 2 "[[ abc ]] [[def ]] [[ ghi]] +[trim[]addprefix[-]addsuffix[-]]">>
<<.operator-example 3 "[[ abc ]] [[def ]] [[ ghi]] +[trim:prefix[]addprefix[-]addsuffix[-]]">>
<<.operator-example 4 "[[ abc ]] [[def ]] [[ ghi]] +[trim:suffix[]addprefix[-]addsuffix[-]]">>
<<.operator-example 5 "abacus baobab +[trim[ab]]">>
<<.operator-example 6 "abacus baobab +[trim:prefix[ab]]">>
<<.operator-example 7 "abacus baobab +[trim:suffix[ab]]">>
一个使用 TiddlyWiki 构建的个人网站。
{{!!url}}
<<<
TriTarget.org is a name I came up with in high school. I was big into computer programming and wanted a company name that was kinda catchy. When I made a few programs in BASIC I would brand them with TriTarget as a way to show off my company (Even though I didn't have one).
<<<
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.operator-examples "trunc">>
<<.operator-example 1 "[[1.6]trunc[]]">>
<<.operator-example 2 "[[-1.6]trunc[]]">>
<<.operator-example 3 "=-1.2 =-2.4 =3.6 =4.8 =5.1 +[trunc[]]">>
<<.this-is-operator-example>>
这里是一些有关 ~TiddlyWiki 技巧与教学的网页。
<div class="tc-link-info">
<$list filter="[tag[Tutorials]!sort[modified]]">
<div class="tc-link-info-item">
! <$link><$view field="title"/></$link>
!!! <a href={{!!url}} target="_blank"><$text text={{!!url}}/></a>
<div class="tc-subtitle">发布于 <$view field="modified" format="relativedate"/></div>
<$transclude/>
</div>
</$list>
</div>
<<.def tv-adjust-heading-level>> [[变量|Variables]]允许对[[标题|Headings in WikiText]]级别进行调整。其被解译为正数或负数 (例如 "2" or "-3") ,加至显示的标题级别。
请注意,如果生成的标题级别小于 1,则会使用级别 1。这意味着,指定较大的负向调整因子,将重置所有标题以显示为级别 1。.同样地,大于 6 的标题级别,将被限制为最大的 HTML 标题级别 6 。
<<.variable-examples "tv-adjust-heading-level">>
\define show-tiddler(title)
!! {{$title$!!caption}}
<$codeblock code={{$title$}}/>
\end
! 条目
<<show-tiddler "Sample Headings 1,2,3">>
<<show-tiddler "Sample Headings 3,4,5">>
<<show-tiddler "Sample Headings 4,5,6">>
! 示例
<$macrocall $name=".example" n="1"
eg="""<$transclude tiddler="Sample Headings 1,2,3" mode="block"/>"""/>
<<.def tv-auto-open-on-import>> [[变量|Variables]]控制 `tm-import-tiddlers` 消息,是否于故事河中显示导入条目 [[$:/Import]] (待处理的导入条目清单)。
缺省开启[[该条目|$:/Import]],但若此变量的值为 <<.value no>> 则不开启。
可于 [[TiddlyWiki 升级导引|http://www.tiddlywiki.com/upgrade.html]]内的升级插件中,找到将此变量设置为 <<.value no>> 的示例。用户可以拖动其维基文件到升级导引,而不会触发正常的导入显示。
<<.def tv-config-toolbar-class>>>> [[变量|Variables]]控制于工具列按钮的 HTML 元素的 [[CSS|Cascading Style Sheets]] `class` 属性值。
可以事先设置嵌入这样的按钮。
在大多数环境中,缺省为 <<.value tc-btn-invisible>>,移除按钮的背景颜色和边框。
<<.variable-examples "tv-config-toolbar-class">>
<style>
.green-background {
background-color: green;
fill: white;
}
</style>
<$macrocall $name=".example" n="1"
eg="""<$set name="tv-config-toolbar-class" value="tc-btn-invisible">
{{$:/core/ui/Buttons/new-tiddler}}
</$set>
"""/>
<$macrocall $name=".example" n="2"
eg="""<$set name="tv-config-toolbar-class" value="green-background">
{{$:/core/ui/Buttons/new-tiddler}}
</$set>
"""/>
该 `green-background` [[CSS|Cascading Style Sheets]] 类别声明于此条目中的样式表。
The <<.def tv-config-toolbar-icons>>>> [[变量|Variables]]控制工具列按钮是否显示图标。
<<.this-is-toolbar-config-variable $:/config/Toolbar/Icons>>
<<.variable-examples "tv-config-toolbar-icons">>
另请参阅 <<.vlink tv-config-toolbar-text>>。
<$macrocall $name=".example" n="1"
eg="""<$set name="tv-config-toolbar-icons" value="no">
<$set name="tv-config-toolbar-text" value="yes">
{{$:/core/ui/Buttons/new-tiddler}}
</$set>
</$set>
"""/>
<$macrocall $name=".example" n="2"
eg="""<$set name="tv-config-toolbar-icons" value="yes">
{{$:/core/ui/Buttons/new-tiddler}}
</$set>
"""/>
The <<.def tv-config-toolbar-text>>>> [[变量|Variables]]控制工具列按钮是否显示文本。
<<.this-is-toolbar-config-variable $:/config/Toolbar/Text>>
<<.variable-examples "tv-config-toolbar-text">>
另请参阅 <<.vlink tv-config-toolbar-icons>>。
<$macrocall $name=".example" n="1"
eg="""<$set name="tv-config-toolbar-text" value="no">
{{$:/core/ui/Buttons/new-tiddler}}
</$set>
"""/>
<$macrocall $name=".example" n="2"
eg="""<$set name="tv-config-toolbar-text" value="yes">
{{$:/core/ui/Buttons/new-tiddler}}
</$set>
"""/>
<<.from-version "5.1.15">> <<.def tv-filter-export-link>> [[变量|Variables]]控制由 <<.wlink LinkWidget>> 小工具生成的 HTML `a` 元素的 `href` 属性值。若定义,则其将优先于 <<.vlink tv-wikilink-template>> 变量。
<<.this-is-static-link-variable>>
该变量被视为一个筛选器,给定目标条目名称为输入。计算该筛选器时,第一个结果用作 `href` 属性。
例如:
```
\define tv-filter-export-link() [encodeuricomponent[]encodeuricomponent[]addsuffix[.html]]
```
另请参阅 <<.vlink tv-get-export-link>> 变量,其主导地位超过此变量。
当其 `source` 属性的值不是一个条目的名称时,[[变量|Variables]]控制由 <<.wlink ImageWidget>> 小工具生成的 HTML `img` 元素的 `src` 属性值。
此变量应为一个[[宏|Macros]],使用以下参数:
;src
: `source` 属性的值 -- 等同指定于<$link to="Images in WikiText">简写语法</$link> `[img[source]]` 的图像名称,
当使用 [[Node.js 配置|TiddlyWiki on Node.js]] 要导出的一个静态版的维基时,以这种方式覆盖图像 URIs 的功能是很有用的。
<<.variable-examples "tv-get-export-image-link">>
此示例读取[[TiddlyWiki 图标|http://www.tiddlywiki.com/favicon.ico]] :
<$importvariables filter="$:/editions/tw5.com/macro-examples/tv-get-export-image-link">
<$codeblock code={{$:/editions/tw5.com/macro-examples/tv-get-export-image-link}}/>
<$macrocall $name=".example" n="1" eg="""[img[favicon.ico]]"""/>
</$importvariables>
<<.def tv-get-export-link>> [[变量|Variables]]控制由 <<.wlink LinkWidget>> 小工具生成的 HTML `a` 元素的 `href` 属性值。
<<.this-is-static-link-variable>>
此变量应为一个[[宏|Macros]],使用以下参数:
;to
: 链接的目标条目的名称,未脱逸编码的
另请参阅 <<.vlink tv-wikilink-template>>。如果该变量与此变量皆存在,则以此变量为主。
<<.def tv-get-export-path>> [[变量|Variables]]指定完整的路径名,用于 [[Node.js|TiddlyWiki on Node.js]] 环境下导出每个条目的 <<.clink rendertiddlers RenderTiddlersCommand>> 命令。
该变量应实现为 <<.js-macro-link "JavaScript 宏">>,使用以下参数:
;title
: 条目名称
若无此宏,则条目被写入于该命令的输出文件夹中,其文件名为 [[%-编码|Percent Encoding]]。
<<.def tv-history-list>> [[变量|Variables]]由 [[NavigatorWidget]] 分配,以包含当前历史列表的条目名称。
比较 <<.vlink tv-story-list>>。
<<.def tv-show-missing-links>> [[变量|Variables]] 定义''佚失的链接'',在变量的''作用范围''内是否呈现为链接。
全域变量在 ~PageTemplate 中设置,且可以在 $:/ControlPanel 的''设置''页签中更改 - 启用链接到佚失条目。
若 <<.def tv-show-missing-links>> 设为 ''no'',佚失的链接呈现为纯文本
若 <<.def tv-show-missing-links>> 设为 ''yes'',佚失的链接呈现为 wiki-links
<<.def tv-story-list>> [[变量|Variables]]由 [[NavigatorWidget]] 分配,以包含当前故事清单的条目名称。
比较 <<.vlink tv-history-list>>。
此 <<.def tv-tiddler-preview>> [[变量|Variables]]标示内容是否呈现于条目预览皮肤。
其值 ''yes'' 为于预览皮肤内,未定义则为别处。
<<.def tv-wikilink-template>> [[变量|Variables]]控制由 <<.wlink LinkWidget>> 小工具生成的 HTML `a` 元素的 `href` 属性值。若定义 <<.vlink tv-filter-export-link>>,则其将优先于 <<.vlink tv-wikilink-template>> 变量。
<<.this-is-static-link-variable>>
该变量被视为[[宏|Macros]],使用以下参数:
;uri_encoded
: 链接的目标条目的名称,但是 [[%-编码|Percent Encoding]]
;uri_doubleencoded
: <<.param uri_encoded>> 参数的值,但再一次 %-编码,即其 `%` 字符进一步转换为 `%25`
> `\define tv-wikilink-template() ../tiddlers/$uri_encoded$.html`
变量的默认值为 `#$uri_encoded$`。
另请参阅 <<.vlink tv-get-export-link>> 变量。如果该变量与此变量皆存在,则以该变量为主。
<<.def tv-wikilink-tooltip>> [[变量|Variables]]指定 <<.wlink LinkWidget>> 工具的 <<.attr tooltip>> 属性的默认值。
通常被定义为[[宏|Macros]],且其值被解析为行内 WikiText。
<<.variable-examples "tv-wikilink-tooltip">>
此示例演示给链接一个来自目标条目的 <<.field caption>> 字段的提示:
<$importvariables filter="$:/editions/tw5.com/macro-examples/tv-wikilink-tooltip">
<$codeblock code={{$:/editions/tw5.com/macro-examples/tv-wikilink-tooltip}}/>
<$macrocall $name=".example" n="1" eg="""此为一个自订提示的链接到 [[backlinks Operator]]。"""/>
</$importvariables>
此为用以比较的[[一个标准链接|HelloThere]]。
<<.def tv-wikilinks>> [[变量|Variables]]控制 <<.wlink LinkWidget>> 小工具的行为。
这个小工具通常会生成到一个条目的链接。但是如果此变量的值为 <<.value no>>,则小工具取消链接而只显示文本,否则显示为链接。
您可以通过将下列行放置在条目的本文的开头,以抑制整个条目中的链接:
> `\define tv-wikilinks() no`
此变量不会影响外部链接,一如那些不涉及 <<.wid link>> 小工具的链接。
<<.variable-examples "tv-wikilinks">>
<$macrocall $name=".example" n="1"
eg="""HelloThere,
[[HelloThere]],
<$link to="HelloThere">is //this// a link?</$link>"""/>
<$macrocall $name=".example" n="2"
eg="""<$set name="tv-wikilinks" value="no">
HelloThere,
[[HelloThere]],
<$link to="HelloThere">is //this// a link?</$link>
</$set>"""/>
TW-Scripts 是 Tiddlywiki 5 最全面的解决方案搜集之一。
{{!!url}}
TW-Scripts 包括:
* 收集在 [[Tiddlywiki Google 论坛|https://groups.google.com/group/TiddlyWiki]] 中的问题的解决方案
* 通过示例学习
* 模板、样式表
* 维基文本、宏和代码段
* 提示和技巧
* 搜索工具
这个实验性插件增加了显示以原来经典版 TiddlyWiki 写的 wikitext 的功能。
请参阅演示于 https://tiddlywiki.com/plugins/tiddlywiki/tw2parser
~TiddlyWiki5 的 Google-Firebase 托管版本。
{{!!url}}
<<<
I've been using ~TiddlyWiki5 with Google Firebase for over a year now. It's stable enough to use on a daily basis. There's a detailed walkthrough of how to create your own instance with lots of screenshots. The entire process takes less than 30 minutes: https://neumark.github.io/tw5-firebase/
Please consider this version a proof of concept rather than a polished product! My focus was on multi-device or small-team collaboration:
* Basic authorization (bags have an access policy determining who can read / write them).
* Multiple wikis can be hosted under a single firebase account.
* It uses Firebase's built-in social auth to log in users.
* Tiddlers are written individually with locking, preventing users overwriting each others' updates.
<<<
TiddlyWiki5 与多用户插件,打包于一个单一运行档。
{{!!url}}
<<<
Tiddlywiki, node js, multiuser plugin - all packaged into a single file so user can just download the file and run it and not have to install anything else. Versions available for windows, osx, and linux.
<<<
来自长期的 TiddlyWiki 贡献者 Mat Goldman 的提示和技巧、沉思和建议的搜集。
{{!!url}}
<<<
This is Mat's, a.k.a <:-) little man-cave in the ~TiddlyVerse.
Most TW development is, understandably, based on the premise that //"Improve code ➔ Better TW"//. ''TWaddle'' is also about developing TW but from the perspective that [[Bigger community ⇄ Better TW]]. Thus, TWaddle looks more to people issues - how to attract them, how to make them stick with TW etc.
I'm not a programmer but I //am// a TW enthusiast so I tiddlefiddle enough to make the occasional discovery of something cool. Given the amount of words I utter, it is also a mere numbers game before I say something that makes sense. TWaddle is intended to capture these eventualities.
<<<
[[社群搜索维基|http://erwanm.github.io/tw-community-search]] 从社群汇总许多公开的维基。它是每天自动更新。在写作的时候,超过 5000 个条目已编入索引,因此可访问最大的已知 TW 内容搜集。
它可以让你搜索预选的维基清单的中一些具体内容。编入索引的内容大多着重于 TW 的使用,因此您通常会使用此搜索系统来找到关于 TiddlyWiki 某一特定方面的信息。比如说你想要了解如何制作一个目录,在[[社群搜索框|http://erwanm.github.io/tw-community-search/#CommunitySearch]]输入 "table of content" (也可于其默认条目[[开始使用|http://erwanm.github.io/tw-community-search/#GettingStarted]]访问之)。搜索结果链接到各个维基,且直接指向包含您的请求的特定条目。
社群搜索维基还可以让您:
* 浏览[[维基清单|http://erwanm.github.io/tw-community-search/#CommunityWikis]]
* 浏览[[作者清单|http://erwanm.github.io/tw-community-search/#CommunityAuthors]]
* 浏览[[插件清单|http://erwanm.github.io/tw-community-search/#CommunityPlugins]]
* 依[[标签|http://erwanm.github.io/tw-community-search/#CommunityTags]]访问内容 (请参阅 [[BookmarkingTags|http://erwanm.github.io/tw-community-search/#BookmarkingTags]])
* 关注来自社群的[[最新消息|http://erwanm.github.io/tw-community-search/#CommunityNews]] (如果您是维基的作者,并可[[发布您自己的消息|http://erwanm.github.io/tw-community-search/#PublishingInCommunityNews]])
{{!!description}}
{{!!url}}
!! 功能
* 自动备份
* 自动保存
* 无需浏览器扩充功能!!
* 可运作于 Linux 与 Windows
* 单个文件可运行,可以移动、拷贝等。
* Wiki 被压缩,占用磁盘上的空间更少 (有时甚至仅占三分之一的空间!)
* 将 //任何// Tiddlywiki5 文件转换为单一可运行的 ''twexe'' 文件,无需特殊的 tidlywiki 插件
* 自动使用控制皮肤中保存页签 (在那里,如果不喜欢默认的,您可以指定一个备份目录)
* 可从运行的 twexe 轻松返回 html wiki 档按 (如果您出于某种原因需要)
* 打开从维琪运行外部可运行文件的可能性 (绘制图表等) - 请继续关注!!
* 支持外部图像 (即使用 _canonical_uri 字段)
此插件添加一个 `<$twitter>` 小工具可以嵌入 twitter.com 的各种实体:
* 个别推文和对话串
* 推一个主题标签/帐户、跟随/按赞一个帐户,或分享一个网址的按钮
* 显示来自用户、标签、清单或集合的推文的动态
您的 TiddlyWiki 的身份验证代理。
{{!!url}}
<<<
One of my favorite aspects of TiddlyWiki has been that it's web-based, making it possible for me to access my wiki from everywhere (especially my phone). That being said, I'm a bit paranoid, so I was left a bit unsatisfied with the tiddlywiki server's HTTP basic auth for protecting my wiki. ~23 commits later, I've created something called twproxy that I'd like to share with you all today, as I'm hoping somebody other than myself will find it useful.
Essentially it is a simple proxy that puts your wiki behind a username, password, and optional 2-factor auth prompt. This gives you added security in addition to the ability to remember your credentials past one browsing session (I was getting sick and tired of typing my username/password in over and over using basic auth).
<<<
! 类型区块
可以用明确的内容类型呈现文本区块,像这样:
```
$$$image/svg+xml
<svg xmlns="http://www.w3.org/2000/svg" width="150" height="100">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="green" />
</svg>
$$$
```
显示结果:
$$$image/svg+xml
<svg xmlns="http://www.w3.org/2000/svg" width="150" height="100">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="green" />
</svg>
$$$
也可将内容类型缩写成扩展名的方式,例如:
```
$$$.svg
<svg xmlns="http://www.w3.org/2000/svg" width="150" height="100">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>
$$$
```
显示结果:
$$$.svg
<svg xmlns="http://www.w3.org/2000/svg" width="150" height="100">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>
$$$
未知类型则以纯文本显示 :
```
$$$text/unknown
Some plain text, which will not be //formatted//.
$$$
```
显示结果:
$$$text/unknown
Some plain text, which will not be //formatted//.
$$$
也可以指定呈现的类型,显示特定的文本呈现方式。例如:
```
$$$text/vnd.tiddlywiki>text/html
This is ''some'' wikitext
$$$
$$$text/vnd.tiddlywiki>text/plain
This is ''some'' wikitext
$$$
```
显示结果:
$$$text/vnd.tiddlywiki>text/html
This is ''some'' wikitext
$$$
$$$text/vnd.tiddlywiki>text/plain
This is ''some'' wikitext
$$$
使用[[文档宏|Documentation Macros]],以保持文本维护在面对更动。
要警惕在句中任意应用原始的粗体或斜体标记。如果有合适的宏,改用之。如果没有合适的宏,写一个或请求写一个。
对于 WikiText 的片段,使用简单的反引号 (<code>`...`</code>),而不是像字段和小工具的名称。这些有他们自己的宏。
为了保持简洁,引号与撇号应该是平直的 `'`,而不是弯曲的 `’`,且省略号应该是三个分开的小点 `...` 而非 `…`。
使用双引号 `"` 为主要的引号。预留 `'` 为少有的嵌套引文案例。
避免使用一个连字号 `-` 作为句中的标点。而是使用双连字号 `--`,~TiddlyWiki 将其呈现为一条两侧为空格的短划线 --。
清单和表格中的项目,如果是完整的句子只应该以句号结尾(在美式英语中的句点),否则,他们应该没有结尾的标点。
专业文档中很少需要使用一个惊叹号。
# 创建当前 TiddlyWiki HTML 文件的备份 ([[只是以防万一|The First Rule of Using TiddlyWiki]])
# 开启[[控制台|$:/ControlPanel]],点击''插件''页签
# 点击您想要删除的插件,如同开启一个独立的条目
# 点击该条目工具栏的 <<.icon $:/core/images/down-arrow>> ''更多''按钮和 <<.icon $:/core/images/delete-button>> ''删除''条目
# 保存您的 TiddlyWiki (<<.icon $:/core/images/save-button>>)
# 如果窗口顶部出现黄色警告条,刷新窗口,使 TiddlyWiki 完成移除该插件 <<.icon $:/core/images/refresh-button>>
#* <<.from-version "5.1.22">> 删除支持动态加载的插件时,不再需要重新加载 TiddlyWiki。相关详细信息,请参阅[[插件机制|PluginMechanism]]
# 该插件应该不再有效或可用
<<.operator-examples "unique">>
从清单中删除重复项,其中使用[[筛选器 run 首码|Filter Expression]] `=`,已防止重复数据的删除:
<<.operator-example 1 """=[[E]] =[[A]] =[[B]] =[[C]] =[[C]] =[[D]] =[[C]] +[unique[]]""">>
{{$:/language/Help/unpackplugin}}
一个条目被认为没有标签,若其:
* 不存在
* 没有 <<.field tags>> 字段
* 有一个空的 <<.field tags>> 字段
<<.operator-examples "untagged">>
<<.operator-example 1 "[untagged[]]">>
<<.operator-example 2 "[all[shadows]untagged[]]">>
<<.operator-example 3 "[list[HelloThere]!untagged[]]">>
<<.from-version "5.1.20">> 相关概述,请参阅[[数学运算符|Mathematics Operators]]。
<<.tip "这是[[trunc | trunc Operator]]的反向运算:trunc 运算符趋向零舍入,但 untrunc 则远离零舍入。">>
<<.operator-examples "untrunc">>
<<.operator-example 1 "[[1.6]untrunc[]]">>
<<.operator-example 2 "[[-1.6]untrunc[]]">>
<<.operator-example 3 "=-1.2 =-2.4 =3.6 =4.8 =5.1 +[untrunc[]]">>
<<.def unusedtitle>> [[宏|Macros]] 返回一个未使用的名称。您可以选择提供一个基础名称来生成新名称。
它使用与创建新条目按钮相同的方法,将一个数字附加到基础名称的末尾。
!! 参数
;baseName
:指定所需的基础名称的字符串,默认为 `新条目`。<br>默认的设置可在[[控制台|$:/ControlPanel]]'': 信息 : 基本 - 选项卡''中调整。
; separator
: <<.from-version "5.1.24">> 一个''可选的''字符串,指定 baseName 与唯一编号之间的分隔符号。例如:`separator:"-"`。默认为空格:`" "`。如果您需要一个空的分隔符号,请使用''模板''!
; template
: <<.from-version "5.1.24">> 一个''可选的''模板字符串,可用于使您具有最大的灵活性。如果使用模板字符串,总会有计数器。
!! 模板字符串
; `$basename$`
: 此变量将被 ''baseName'' 参数替换
; `$separator$`
: 此变量将被 ''separator'' 参数替换
;`$count$`
: 此变量将自动创建,并且是从 0 开始的计数器
;`$count:4$`
: 此变量将自动创建,并从 0000 开始
: `:4` 表示数字的位数
!! 示例
<<.macro-examples "unusedtitle">>
<<list-links "[prefix[unusedtitle Macro (E]!sort[]]">>
\define testCreate()
<$action-createtiddler $basetitle=<<unusedtitle template:"$count:2$-新条目">>/>
\end
\define testCreate1()
<$action-createtiddler $basetitle=<<unusedtitle baseName:"新条目" separator:"-" template:"$count:2$$separator$$basename$">>/>
\end
\define testNew()
<$action-sendmessage $message="tm-new-tiddler" title=<<unusedtitle baseName:"新条目" template:"$count:2$-$basename$">> />
\end
```
<<unusedtitle template:"$count:2$-新条目">>
```
<$button actions=<<testCreate>> >
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/>
创建条目
</$button>
```
<<unusedtitle baseName:"新条目" template:"$count:2$-$basename$">>
```
<$button actions=<<testNew>>>
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/>
添加条目
</$button>
```
<<unusedtitle baseName:"新条目" separator:"-" template:"$count:2$$separator$$basename$">>
```
<$button actions=<<testCreate1>>>
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/>
创建条目
</$button>
---
<details>
<summary>显示代码</summary>
<pre><code><$view><pre><code>
</details>
<$macrocall $name=".example" n="1" eg="""<<unusedtitle>>"""/>
''以下示例最好在草稿模式下,如果有一个打开的条目,或者有一个名为 "新条目" 的条目''。如此,您可以看到自动编号。
<$macrocall $name=".example" n="2" eg="""<<unusedtitle separator:"-">>"""/>
<$macrocall $name=".example" n="3" eg="""<<unusedtitle baseName:"anotherBase">>"""/>
<$macrocall $name=".example" n="4" eg="""<<unusedtitle baseName:"About" separator:"-">>"""/>
<$macrocall $name=".example" n="5" eg="""<<unusedtitle template:"$count:2$-test">>"""/>
---
可以找到运作的按钮于:[[vunusedtitle 宏 (示例 1)|unusedtitle Macro (Examples 1)]]。您必须检查代码去查看,发生了什么。
# 开启 upgrade.html
# 引入一个 `$:/UpgradeLibrary` 数据条目,此升级库包含所有插件的最新兼容版本
# 拖进旧的维基文件
# 将条目放入数据条目 `$:/Import`,类型为"等待导入"
# 开始处理导入的每一条目
## 每个''升级器''模块有机会检查传入的条目
## 升级模块可以为每一个条目触发动作:
##* 显示警示消息
##* 不导入
##* 从升级库替换为另一条目
##* 停用不兼容的插件
# 通过新的查看样板段,显示新创建的等待导入条目
## 显示有效负载条目为名称的清单和复选框、并用下拉清单显示条目的全部详情
## 也许我们为显示小工具后面的数据条目,还抑制了惯用的 JSON 显示
# 用户可以调整选择复选框
# 按一下''升级'',从''等待导入''解包选定的条目
# 等待导入条目和从后续保存操作中排除的升级库条目
有错误修正和改进的 TiddlyWiki 定期发布版本。它是一个好主意,以保持最新的通过定期升级到最新版本。
! 简介
这里描述的是升级标准版 TiddlyWiki 文件的流程。升级 [[TiddlyWiki on Node.js]] 有[[不同的处理流程|Upgrading TiddlyWiki on Node.js]]。
<<<
在升级时,请记住[[使用 TiddlyWiki 的第一条准则|The First Rule of Using TiddlyWiki]]:
//您有责任照看好自己的数据;小心备份,尤其是在升级 ~TiddlyWiki 核心时//
<<<
! 在线升级
此处理流程可运作于大多数桌面浏览器。请注意您的任何个人数据都不会离开您的浏览器。
# 在文件系统中找到您的 TiddlyWiki 文件 (亦即使用 Windows 的文件总管、Mac OS X 的 Finder、您在 Linux 上的文件管理程序)
# 于浏览器中开启网址 https://tiddlywiki.com/upgrade.html
# 将您的旧 TiddlyWiki HTML 文件拖放至该浏览器窗口
#* 若该文件已加密,将提示您输入密码
# 审视将升级的条目列表
# 点击 ''Upgrade''
# 保存升级后的新版本 (<<.icon $:/core/images/save-button>>)
这将下载名为 ''upgrade.html'' 的文件到您的计算机,此文件是您的旧档升级。您需要开启下载 ''upgrade.html'' 于该处的文件夹,重命名 ''upgrade.html'' 为你要升级的旧档的文件名,并移动新档替换旧档。
! 脱机升级
您也可下载 https://tiddlywiki.com/upgrade.html 于本机,运行相同的拖放过程来升级您的文件。
! 升级的问题
!! Firefox 的安全限制
当使用 Firefox 试图运行在线升级程序时,将出现下面的错误:
<<<
Error while saving:
Error:NS_ERROR_DOM_BAD_URI: Access to restricted URI denied
<<<
此为升级操作违反 Firefox 的安全限制:
在这问题被解决之前,我们建议使用脱机升级进程,或使用 Google 浏览器进行升级:
# 使用 Google 浏览器开启 https://tiddlywiki.com/upgrade.html,然后拖拉您要升级的 TiddlyWiki html 文件到升级程序窗口中,如前文''在在线升级''中所述
# 在您保存已升级的文件之后,应该能够在 Firefox 中开启它,且能再[[使用 TiddlyFox 保存|Saving with TiddlyFox]]
!! 不兼容的自定义项
套用自定义条目于先前的版本,有可能造成升级到最新版本的时候发生问题。有两个技巧,你可以用来帮助追踪问题:
* 请尝试重复升级有选择性地未选中任何可能套用到 TiddlyWiki 的客制条目
* 使用[[安全模式|SafeMode]]禁用所有客制的默认条目
你可以看到哪些默认条目已被覆写于[[高级搜索|$:/AdvancedSearch]]的筛选器页签中。从下拉清单中选择"被覆盖默认条目"。
如果您已经以一般方式安装 [[TiddlyWiki on Node.js]] ,当新版本发布时您可以使用此命令更新:
```
npm update -g tiddlywiki
```
于 Mac 或 Linux 您可能需要加上 ''sudo'' 像这样:
```
sudo npm update -g tiddlywiki
```
<<.from-version "5.1.20">>
另请参阅 [[lowercase 运算符|lowercase Operator]]和 [[sentencecase 运算符|sentencecase Operator]]。
<<.operator-examples "uppercase">>
<<.operator-example 1 "[[Abc]uppercase[]]">>
<<.operator-example 2 "[tag[HelloThere]uppercase[]]">>
<<.dlink-ex "URI" "http://en.wikipedia.org/wiki/Uniform_resource_identifier">> (也经常被称为 <<.def URL>>) 是一个用来指定某个资源的字符串,例如网页位置。
缺省情况下,当运行 [[TiddlyWiki 于 Node.js|TiddlyWiki on Node.js]],服务器以协定、主机和端口的 URI 形式显露维基 - 例如,`http://127.0.0.1:8080/`。
有两个步骤运行维基在自订路径,类似 `http://127.0.0.1:8080/path/to/my/wiki/`:
# 配置服务器,通过传递 `/path/to/my/wiki` 为 ServerCommand 的 ''pathprefix'' 参数
# 配置用户端,通过创建包含 `$protocol$//$host$/path/to/my/wiki/` 的名为 `$:/config/tiddlyweb/host` 的条目
随着 ES2015 (也称为 ES6) 的到来和 [[Babel.js|http://babeljs.io/]] 插件的可用性,在编写 TiddlyWiki 插件时,开发人员可以利用 ES2015 了解 TiddlyWiki 的模块沙箱与 Babel 是如何将其编译输出为模块系统之间的细微差别,就像 ~CommonJS/AMD。
请理解[[插件机制|PluginMechanism]]是如何工作的,因为这是所有关于使用 Babel 编写的插件,编译将包含于最终输出的 TiddlyWiki (例如 [[ TiddlyWiki 于 Node.js|TiddlyWiki on Node.js]])。
!! 安装和配置 Babel
您可用 ''npm'' 安装 Babel
```
$ npm install --global babel-cli babel-presets-es2015
```
如果将您仍在开发中的插件列入到 npm 注册表 (或为方便) ,可避免全域安装,并将其保存到本地的 `package.json` 文件
```
$ npm install --save-dev babel-cli babel-presets-es2015
```
在您的插件项目中,编辑 `.babelrc` 文件,并输入以下内容:
```json
{
"presets": [
"es2015"
]
}
```
<<.tip "像是带有 `package.json` 的 ''npm'' 模块,通过 `npm run build` 完整编译输出,会更容易管理插件。详细信息请参阅 [[npm-scripts 文档|https://docs.npmjs.com/misc/scripts]]。">>
!! 编译输出
选择一个文件夹来存放 ES2015 JavaScript 和输出用于 TiddlyWiki 的 JavaScript 文件夹。在这个例子中,将分别使用 `src` 和 `lib`。当 Babel 已安装且正常工作,您可以编译 `src` 文件夹中的所有 JavaScript 到 `lib` 文件夹,通过运行以下命令:
```
$ babel src -d lib
```
<<.warning "Babel //不会//复制非 JavaScript 的文件。它是由开发人员,包括所有支持的文件本身。Babel 只是从 `src` 文件夹转换 ~JavaScript 文件 (扩展名为 `.js`) 到 `lib` 文件夹。">>
!! 导入和导出
在编写 pre-ES2015 插件,`require` 模块通过 TiddlyWiki,像这样:
```javascript
var Widget = require('$:/core/modules/widgets/widget.js').widget;
```
但是在 ES2015 以下会看起来像:
```javascript
import { widget as Widget } from '$:/core/modules/widgets/widget.js';
```
为方便起见,当 Babel 编译这,本质上是将输出与最先的 pre-ES2016 代码相同的 Javascript 代码。
此外,在 ES2016 您需要一开始即声明 `import`,且不能动态使用 `require`。这意味着在 `if` 区块或函数中,不能有 `import` 语句。如果需要该功能,那么您必须直接使用 `require()` 指令。但是如果这样做,可能会错失一个让您的代码更简洁的机会。
导出也是一样。您可以使用 `export` 关键字,而非指定一个 `exports` 变量的属性:
```javascript
export { MyWidget as mywidget };
```
<<.tip "导出非识别码的名称是不合法的 JavaScript,即使它可以使用非识别码 (字符串) 作为属性键值。这意味着,如果您想要一个小工具有一个破折号,那么您得使用 `exports['my-widget'] = MyWidget;` 语法。">>
理解在 ES2016 ''default'' 导出不支持 TiddlyWiki 是很重要的。这主要是因为核心代码预计要附加到 `exports` 变量的特定属性。Bable 的 `exports` 转换与此运作良好,//除了// ''default'' 导出。
!! 类别
在一个小工具的示例中,ES2016 与类别继承运作良好。对比典型小工具定义,看起来像这样:
```javascript
function MyWidget() {
Widget.call(this);
}
MyWidget.prototype = new Widget();
MyWidget.prototype.render = function(parent, nextSibling) {…};
// And so on…
```
使用类别,此式可以收紧为:
```javascript
class MyWidget extends Widget {
render(parent, nextSibling) {…}
// And so on…
}
```
使用类别//可//消除多数的 `Widget.execute()` 毫不相干地使用 <<.def "getter">>。相较于典型的大量指定到 `this`,这是更具可读性。其给予在属性中增加允许计算的好处,通常会混淆 `execute()` 方法。例如,开发复合属性如下:
```javascript
class NameWidget extends Widget {
get title() { return this.getAttribute('title'); }
get firstName() { return this.getAttribute('first'); }
get lastName() { return this.getAttribute('last'); }
get fullName() { return `${this.title}. ${this.firstName} ${this.lastName}`; }
}
```
!!! 非类别模块
对于非类别模块,您可以使用 `export` 关键字。这是一个简单的[[启动模块|ModuleType]]:
```javascript
export function startup() {
// Do stuff here
}
```
或是一个[[宏|https://tiddlywiki.com/dev/#JavaScript%20Macros]]案例:
```javascript
export const name = 'my-macro';
export const params = {};
export function run() {…}
```
!! 填充代码
ES2015 带有 JavaScript 核心对象一部分的某些功能,这些不支持所有的浏览器。在[[大多数浏览器|BrowserCompatibility]]中使用这些功能,您将需要 <<.def "填充代码">>。Babel 提供填充代码包,可以供您引入。如何做到这一点,请参阅 [[添加 Babel 填充代码到 TiddlyWiki|Adding Babel Polyfill to TiddlyWiki]]。
!! 示例
以下是一个显示/更新时间的 ES2015 插件/小工具示例:
```javascript
/*\
title: $:/plugins/sukima/clock-widget.js
type: application/javascript
module-type: widget
A updating time stamp
\*/
import { widget as Widget } from '$:/core/modules/widgets/widget.js';
class ClockWidget extends Widget {
constructor(parseTreeNode, options) {
super(parseTreeNode, options);
this.logger = new $tw.utils.Logger('clock-widget');
}
render(parent, nextSibling) {
if (!$tw.browser) { return; }
this.logger.log('Rendering clock DOM nodes');
this.computeAttributes()
this.parentDomNode = parent;
this.domNode = $tw.utils.domMaker('div', {
document: this.document,
class: 'tc-clock-widget'
});
parent.insertBefore(this.domNode, nextSibling);
this.tick();
}
tick() {
this.logger.log('Tick!');
if (!document.contains(this.domNode)) {
// Apparently the widget was removed from the DOM. Do some clean up.
return this.stop();
}
this.start();
this.domNode.innerHTML = this.dateString;
}
start() {
if (!this.clockTicker) {
this.logger.log('Starting clock');
this.clockTicker = setInterval(this.tick.bind(this), 1000);
}
}
stop() {
this.logger.log('Stopping clock');
clearInterval(this.clockTicker);
this.clockTicker = null;
}
get dateString() {
const format = 'DDth MMM YYYY at hh12:0mm:0ss am';
return $tw.utils.formatDateString(new Date(), format);
}
}
export { ClockWidget as clock };
```
<<.tip "起始不带任何缩进的条目注解会使 Babel 的输出增加额外的空格。虽然不会影响 TiddlyWiki,当读取输出时,它可混淆条目信息呈现在屏幕右侧。">>
! 剪切文本
从[[编辑器工具栏|Editor toolbar]]中,您可以将所选文本导出到新的条目,并在其位置插入[[链接|Linking in WikiText]]、[[嵌入|Transclusion]]或[[宏|Macros]]。点击''剪切''图标 (<<.icon $:/core/images/excise>>),输入新条目的名称,并选择剪切方法。
!! 如何剪切文本
# 标示相关的文本
# 点击''剪切''图标 (<<.icon $:/core/images/excise>>)
# 输入一个新的条目名称。
# 选择是否以新条目的标签设为当前条目的名称''*''。
# 选择替换方法,[[链接|Linking in WikiText]]、[[嵌入|Transclusion]] 或 [[宏|Macros]]。
# 点击 ''{{$:/language/Buttons/Excise/Caption/Excise}}'' 按钮
默认情况下,TiddlyWiki 的网页服务器,通过不安全的 HTTP 协定,提供服务资源。如果只在私有的受信任的网络中使用,则风险极小,但在许多情况下,最好使用安全的 HTTPS 连接。
HTTPS 要求服务器通过 "凭证" 文件和 "密钥" 文件进行配置,并由 [[tls-cert|WebServer Parameter: tls-cert]] 和 [[tls-key|WebServer Parameter: tls-key]] 参数配置
凭证可以从凭证授权单位 (如 https://letsencrypt.org/) 获得,也可以创建自我签章凭证进行内部测试。
可使用受欢迎的 [[openssl|https://www.openssl.org/]] 程序,创建所需的凭证文件:
```
openssl req -newkey rsa:2048 -new -nodes -keyout mywikifolder/key.pem -out mywikifolder/csr.pem
openssl x509 -req -days 365 -in mywikifolder/csr.pem -signkey mywikifolder/key.pem -out mywikifolder/server.crt
tiddlywiki mywikifolder --listen username=joe password=bloggs tls-key=key.pem tls-cert=server.crt
```
您可以使用内部的超链接(条目之间的链接,通常显示为蓝色文本)导览于您的条目之间。点击链接到任何条目将带你到该条目,如果条目被关闭时,它会被打开。有关 ~TiddlyWiki 美妙的事情是,它尽可能适当链接条目。链接无处不在!以下是你可以在 ~TiddlyWiki 中找到链接到条目的关键地方:
* 您可以在任何条目的本文 ''创建一个链接'' 到条目,无论其存在与否。请参阅 [[Linking in WikiText]] 看到许多简单的方法,创建条目之间的链接。
* 每个条目的''标签丸'' (例如此条目名称下方的 <<tag "Working with TiddlyWiki">> 标签) 包含一个链接至此标签条目,以及有此标签的所有条目清单,这可让您跳到任何这些条目。
* 每个条目的''[[信息面板|InfoPanel]]''让您可以访问包含附加的相关条目清单的四个页签:
** ''反向链接''页签 - 列出包含反向链接回当前条目的所有条目。
** ''子条目''页签 - 列出用当前条目名称为标签的所有条目。
** ''列表''页签 - 列出包含于当前条目的 `list` 字段里的所有条目或潜在条目。更多关于 `list` 字段的信息,请参阅 [[ListField]]。
** ''被列于''页签 - 列出包含当前的条目在其 `list` 字段中的所有条目。
* ''侧边栏页签''包含许多指向条目链接的清单:
** ''打开'' - 列出所有当前打开的条目。
** ''最近'' - 从最近修改的条目开始,列出 100 个最近修改的条目。
** ''更多'' - 内含八个附加的条目清单:
*** ''全部'' - 列出依字母排序的所有条目,。
*** ''标签'' - 列出所有标签。您可以点击任意标签,以访问带有该标签的条目清单。
*** ''佚失'' - 列出在条目本文中找到的所有条目超链接,而目前不存在的所有条目。这有助于寻找一些你期望创建的点,但尚未创建的条目。
*** ''草稿'' - 列出所有仍处于编辑模式的未完成条目。草稿条目被 ~TiddlyWiki 认为是单独的条目,直到它关闭为止。所以如果您编辑名称为 "Australia" 的条目,将出现 'Australia' 和 'Draft of "Australia"' 两个条目。当您保存或取消您的更改而关闭该草稿时,它会将这些更改套用于 'Australia' 条目。所以处理草稿页签是一种找到您的任何未完成草稿的方式。
*** ''孤立'' - 列出不直接从其他条目炼接的所有条目。这有助于编辑您的文件 - 为您显示需要更仔细地与其他条目集成的条目。
*** ''类型'' - 列出特定的内容类型的条目链接,例如:图像。
*** ''系统'' - 列出所有系统条目。
*** ''默认'' - 列出所有影子条目。
* ''搜索结果'' - 是符合您输入到搜索匡的文本的条目清单。
* 最后,你可以用各种方法创建您自定义的条目清单:
** 您可以嵌入一个[[筛选器|Filters]] (请参阅 [[Transclusion in WikiText]])。例如,添加 `{{{ [tag[mountain]] }}}` 到一个条目,将插入一个具有标签 "mountain" 的条目清单。
** 您可以创建一个 ListWidget。这比嵌入[[筛选器|Filters]]更复杂,但允许您更加灵活地设计和显示清单,如您期望其出现的一样。
! 插入片段
您可以从工具栏中使用图章插入预配置的文本片段,点击''图章'' (<<.icon $:/core/images/stamp>>) 然后选择一个文本片段。
! 创建一个片段
# 点击''图章''图标 (<<.icon $:/core/images/stamp>>)
# 通过"//添加您自己的//"菜单项目,创建一个文本片段条目
# 为此条目键入一些文本片段,并添加一个其在菜单中显示的标题
# 点击 <<.icon $:/core/images/done-button>> 按钮
<$macrocall $name=".tip" _="""''提示:'' 您也可以使用侧边栏中的''添加条目'' <<.icon $:/core/images/new-button>> 按钮,创建一个片段条目,并设其标签为 ''~$:/tags/TextEditor/Snippet''""" />
!!<<.from-version "5.1.20">> 为选择添加首码和/或尾码
# 点击''图章''图标 (<<.icon $:/core/images/stamp>>)
# 通过"//添加您自己的//"菜单项目,创建一个文本片段条目
# 添加一个其在菜单中显示的标题
# 添加一个名称相同的条目,但添加尾码 `/prefix`
# 在其文本字段中插入首码
# 添加一个名称相同的条目,但添加尾码 `/suffix`
# 在其文本字段中插入尾码
# 点击 <<.icon $:/core/images/done-button>> 按钮
\define tv-config-toolbar-text() yes
\define openCpTheme()
<$action-setfield $tiddler="$:/state/tab-1749438307" $value="$:/core/ui/ControlPanel/Appearance"/>
<$action-setfield $tiddler="$:/state/tab--1963855381" $value="$:/core/ui/ControlPanel/Theme"/>
<$action-navigate $to="$:/ControlPanel"/>
\end
! 布景主题和配色盘
改变 TiddlyWiki 外观的第一步是使用一个可用的布景主题:
* 可用主题之一:<span class="tc-btn-standard"> {{$:/core/ui/Buttons/theme}} </span>
* 修改配色盘:<span class="tc-btn-standard"> {{$:/core/ui/Buttons/palette}} </span>
* 实验的使用 <$button actions=<<openCpTheme>> ><<.icon $:/core/images/options-button>>控制台</$button>
! 使用样式表
除了控制台之外,还可以借由设条目标签为 `$:/tags/Stylesheet` 自定义样式表。试着创建一个自定义样式表,以及下面的内容,将页面背景颜色改为红色:
```
body.tc-body {
background: red;
}
```
然后,您可以使用自己的[[维基文本中的样式和类|Styles and Classes in WikiText]].
!! 其他资源
* [[Cascading Style Sheets (CSS) at mozilla|https://developer.mozilla.org/en-US/docs/Web/CSS]]
* [[Cascading Style Sheets (CSS) at w3scools|http://www.w3schools.com/css]]
! 覆盖布景主题设置
自定义样式表独立于主题样式表被套用。因此,自定义样式表中的 css 规则,通常需要比您想要覆盖的布景主题更具体。例如,`html body.tc-body` 比 `body.tc-body` 更具体。
<<.tip "''您应该总是始于最不具体的值!''<br><br>">>
! 样式表类型
通常,样式表最好使用 `text/css` 类型。这将它们视为纯样式表,并确保 ~TiddlyWiki 不会对他们套用任何维基解析。
如果您希望在样式表中使用宏和嵌入,应改用默认的 ~WikiText 类型 `text/vnd.tiddlywiki`。这将允许运行完整的 ~WikiText 解析。以下是一个示例:
```
\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline
body.tc-body pre {
<<box-shadow "inset 0 1px 0 #fff">>
}
```
在条目最上方的 `\rules` 编译指示将限制 ~WikiText 只允许宏和嵌入。这样可以避免误触发非必要的 ~WikiText 解析。
样式条目被处理,使其先被 wikified 然后输出的文本部分被提取以套用为 CSS,因而忽略你会在你的样式表使用的任何 HTML 标记。例如,由 RevealWidget 生成的 HTML 元素将不会影响输出。如在下面的例子中,可以在 `<pre>` 标记中包裹 CSS 规则来显示其为一个代码区块,而不会影响处理,包括处理内含的宏。
```
\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html
body.tc-body pre {
<<box-shadow "inset 0 1px 0 #fff">>
}
```
!! 样式表宏
几个全域可用的宏,有助于构建的样式表。请参阅 [[$:/core/macros/CSS]] 这些宏的定义。
* `<<colour name>>` 与 `<<color name>>` 从当前的[[调色板|ColourPalettes]]中取得已命名的颜色
* `<<box-shadow shadow>>` 指定一个 box-shadow
* `<<filter filter>>` 指定一个 CSS 筛选
* `<<transition transition>>` 指定一个 CSS 转场特效
* `<<transform-origin origin>>` 指定 CSS 变换的起始
* `<<background-linear-gradient gradient>>` 指定一个线性渐层
* `<<datauri title>>` 使用 CSS `url()` 操作符取得条目的 base64 内容
设置 [[root-tiddler|WebServer Parameter: root-tiddler]] 参数为 `$:/core/save/all-external-js`,切换到一个特殊的模板,外化 TiddlyWiki 的内核 ~JavaScript 成一个单独的文件。例如:
```
tiddlywiki editions/tw5.com-server/ --listen host=0.0.0.0 "root-tiddler=$:/core/save/all-external-js"
```
为了确保 "保存变更" 按钮保存完整的单一文件维基,还需要将条目 $:/config/SaveWikiButton/Template 设置为包含 `$:/core/save/all-external-js`。
提供 `server-external-js` 版本,包含使用外部 ~JavaScript 模板所需的所有配置。
!! 缘由
单一文件配置中的 TiddlyWiki,通常将所有内容打包到一个文件中:您的数据,以及包含 TiddlyWiki 本身的 JavaScript、CSS 和 HTML。缺少依赖性通常非常方便:这意味着 TiddlyWiki 的各个部分不可能分离,并且大幅改善了它在未来仍可运作的可能性。
然而,这种安排存在一些低效率,因为每次保存维基的内容时,都会重复加载和保存内核代码。当运昨于主从式配置时,这种低效率部分得到改善,因为一旦浏览器加载了维基,同步过程仅仅向服务器来回传输个别条目。
运昨于主从式配置时,剩余的低效率是初始加载的单页面维基,将包含 TiddlyWiki 的整个内核代码的副本,使得浏览器无法对其进行缓存。
维基文件夹的子文件夹里的任何文件,都将通过路由 `\files\<uri-encoded-filename>` 提供。例如:http://127.0.0.1:8080/files/Motovun%20Jack.jpg
这对于发布不想并入主维基的大型档 (PDFs、视频、大图像等) 非常有用。
静态档可以直接被引用:
* `[ext[./files/a-big-document.pdf]]` - 创建一个 PDF 链接
* `[img[./files/a-big-image.png]]` - 嵌入一个图像
或者,''_canonical_uri'' 字段可用于将档引用为[[外部条目|ExternalImages]]。
TiddlyWiki 实验性地使用简化的页面配置,为单一条目提供个别页面的唯读查看,并实现条目之间的链接,但没有其他交互式功能。与完整的 TiddlyWiki 用户接口相比,它是非常羽量级的,即使在非常慢的连接上也可以使用。
除了在路径 `/` 提供完整的交互维基 ( 例如 http://127.0.0.1:8080/ ),TiddlyWiki 为每个条目提供服务于路径 `/<url-encoded-tiddler-title>`。例如:
* http://127.0.0.1:8080/HelloThere
* http://127.0.0.1:8080/Philosophy%20of%20Tiddlers
普通的非系统条目是通过特殊查看模板呈现的,而系统条目是通过一个返回呈现输出的原始文本的模板呈现的。通过这种方式,最终用户可以浏览普通的条目,而系统条目可以包含在原始形式中,如同 JS、HTML 或 CSS 模板。另外,相应地指定 <<.field _render_type>> 和 <<.field _render_template>> 字段,可以在每个条目的基础上覆盖这些默认值。
该模板由以下参数控制:
* [[system-tiddler-render-type|WebServer Parameter: system-tiddler-render-type]]
* [[system-tiddler-template|WebServer Parameter: system-tiddler-render-template]]
* [[tiddler-render-type|WebServer Parameter: tiddler-render-type]]
* [[tiddler-template|WebServer Parameter: tiddler-render-template]]
TiddlyWiki5 包含一组 [[Commands]],用于在命令行上运行一套广泛的基于 TiddlyWikiFolders,TiddlerFiles 和 TiddlyWikiFiles 的操作。
例如,下面的命令是从 TiddlyWiki HTML 文件加载条目,然后保存其中之一于静态 HTML:
```
tiddlywiki --verbose --load mywiki.html --rendertiddler ReadMe ./readme.html
```
自命令行运行 `tiddlywiki` 启动 TiddlyWiki 核心,加载的核心插件,并创建了一个空的 wiki。然后,它依序处理从左至右的命令行参数。参数以空格分隔。
<<.from-version "5.1.20">> 首先,可以有零个或多个插件引用,前缀为 `+` 表示插件名称,或 `++` 表示插件文件夹的路径。除了 [[TiddlyWiki 文件夹|TiddlyWikiFolders]]中指定的插件外,还会加载这些插件。
下一个参数是要加载的可选路径 [[TiddlyWikiFolder|TiddlyWikiFolders]]。如果不存在,则使用目前的目录。
这些命令与其个别参数如下,每个命由前缀 `--` 分辨之。
```
tiddlywiki [+<pluginname>] [<wikipath>] [--<command> [<arg>[,<arg>]]]
```
例如:
```
tiddlywiki --version
tiddlywiki +plugins/tiddlywiki/filesystem +plugins/tiddlywiki/tiddlyweb mywiki --listen
tiddlywiki ++./mygreatplugin mywiki --listen
```
<<.from-version "5.1.18">> 诸如支持大量参数的 ListenCommand 之类的命令,可以使用[[命名命令参数|NamedCommandParameters]],使事情变得不那么笨拙。例如:
```
tiddlywiki wikipath --listen username=jeremy port=8090
```
有关可用命令的完整列表,请参阅 [[Commands]]。
TiddlyWiki5 允许您使用 SVG 以两种方式显示矢量图形:
* 类型为 `image/svg+xml` 的条目被解译为 SVG 图像,并显示和嵌入为自足的 `<img>` 元素以 data URI 形式嵌入在 `src` 属性的 SVG。
** 关于 SVG 图像的例子请查看 [[Motovun Jack.svg]] 和 [[Tiddler Fishes.svg]]
* WikiText 也可以直接包含内嵌 SVG 元素。请参阅下面的一个例子。
! 嵌入 SVG 条目
您可以使用一般的嵌入语法嵌入 SVG 图像条目:
```
{{Motovun Jack.jpg}}
```
您也可以使用 [[Typed Blocks in WikiText]] 嵌入一个内嵌 SVG 条目。
`<img>` 元素中所呈现的图像的影响为,它是沙盒;它不能从父文档中使用 CSS 样式,例如。图像也不可以使用 WikiText 的功能,例如嵌入。
! 嵌入 SVG 元素
使用 SVG 的另一种方法是直接嵌入 `<svg>` 元素。例如:
<svg width="150" height="100">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>
请注意,内嵌 SVG 元素不需要 `<?xml version="1.0"?>` 指令。
! 包含 HTML 或 wikitext 内容于 SVG 图像
您可以使用 `<text>` 元素包含简单的文本串于 SVG 图像:
<svg width="100px" height="30px" viewBox="0 0 1000 300"><text x="250" y="150" font-family="Verdana" font-size="55">Hello, out there</text><rect x="1" y="1" width="998" height="298" fill="none" stroke-width="2" /></svg>
HTML 或 WikiText 内容可以包括使用 `<foreignObject>` 元素于内嵌 SVG 图像中。例如:
<svg width="260px" height="260px"><circle cx="150" cy="150" r="100" fill="blue" stoke="red"/><foreignObject x="70" y="110" width="150" height="180"><body>Here is some text that requires a word wrap, and includes a [[link to a tiddler|HelloThere]].</body></foreignObject></svg>
! 嵌入 SVG 元素
当嵌入 SVG 元素时,你也可以使用 WikiText 的功能,例如嵌入。举例来说,这里是一个 SVG 圆,其半径值设置于条目 [[$:/SVGExampleRadius]]:
<svg width="150" height="150"><circle cx="75" cy="75" r={{$:/SVGExampleRadius}} stroke="black" stroke-width="2" fill="green"/></svg>
您可以在这里编辑半径的值:<$edit-text tiddler="$:/SVGExampleRadius" tag="input"/>
! 使用 SVG 制作弯曲的文本
{{Making curved text with SVG}}
The utility plugin objective is to provide set of tools for developers and authors.
实用程序插件的目标是为开发人员和作者提供一组工具。
{{!!url}}
这些工具包括简单的嵌入、显示条目的原始内容、作者工具、维基文本宏、视图模式下的显示字段等。
<<.def 变量>>是一个可以通过在[[小工具树|Widgets]]的某一分支内的名称访问的文本片段。该片段被称为变量的<<.def 值>>。
一个新的变量系使用 <<.wlink SetWidget>> 小工具定义,且可用于该小工具的任何下层,包括嵌入的内容。<<.wid set>> 小工具可以重复使用现有的名称,从而于小工具下层的工作阶段,将一个不同的片段绑定到该名称。
对于每个依串行出的名称,<<.Wlink ListWidget >> 小工具还设置一个特定的变量 (缺省为 <<.var currentTiddler>>)。
如何使用变量的概述,请参阅 [[WikiText 里的变量|Variables in WikiText]]。
虽说是<<.word 变量>>,但每个片段是字符串常数。明显的变异性确实是于小工具树不同部分的多个变量具有相同名称的结果。
[[宏|Macros]] 是变量的一种特殊形式,其值可以包含参数填入时使用的宏的预留位置。
这些片段自己本身<<.em 不>>解析为 WikiText。但是,变量的引用将会嵌入片段的上下文,该处的 ~WikiText 解析<<.em 可能>>会发生。在片段中,检测到的唯一标记是宏参数嵌入的 `$name$` 和变量嵌入的 `$(name)$` 。
<<.mlink dumpvariables>> 宏列出位于小工具树中该位置的所有变量 (含宏) 。
~TiddlyWiki 核心已内置[[一些变量|Core Variables]]。
请参阅[[介绍变量的概念|Variables]]。
使用不带任何参数的[[宏调用语法|Macro Calls in WikiText]],嵌入变量的值。您还可以使用一个 <<.wlink MacroCallWidget >> 小工具。
为了将替换该名称的变量值,[[宏|Macros]]片段可以包含 `$(name)$` 作为[[预留位置|Macro Definitions in WikiText]]。
变量的值可以用作[[筛选器参数|Filter Parameter]]、或[[小工具属性|Widgets in WikiText]],后者支持宏参数。
!! 示例:定义一个变量
<$macrocall $name=".example" n="1"
eg="""<$set name=animal value=zebra>
<<animal>>
</$set>"""/>
!! 示例:定义一个宏
以下 `\define` 编译指示定义一个 <<.var tags-of-current-tiddler>> [[宏|Macros in WikiText]]。该宏传回条目的 <<.field tags>> 字段的值,并可以从同一条目的其他地方访问 (或任何[[导入|ImportVariablesWidget]]它的条目)。
<$importvariables filter="$:/editions/tw5.com/macro-examples/tags-of-current-tiddler">
<$codeblock code={{$:/editions/tw5.com/macro-examples/tags-of-current-tiddler}}/>
<$macrocall $name=".example" n="2" eg="""The tags are: <<tags-of-current-tiddler>>"""/>
</$importvariables>
!! 示例: 使用一个变量作为筛选器参数
此示例使用 <<.olink backlinks>> [[运算符|Filter Operators]] 列出链接到此条目的所有条目。
<$macrocall $name=".example" n="3" eg="""<<list-links filter:"[<currentTiddler>backlinks[]]">>"""/>
<<.from-version "5.1.20">> `variables` 运算符的主要目的是实现 [[dumpvariables 宏|dumpvariables Macro]]:
<$codeblock code={{$:/core/macros/dumpvariables}}/>
<<.operator-examples "variables">>
<<.operator-example 1 "[variables[]prefix[colour]]" "返回名称以 ''colour'' 开头的任何变量的名称">>
<<.from-version "5.1.24">> 相关概述,请参阅[[数学操作符|Mathematics Operators]]。
<<.tip """ `variance` 操作符将输入视为完整的母体,而不是样本""">>
<<.operator-examples "variance">>
<<.operator-example 1 "1 3 4 5 +[variance[]]">>
请注意,如果没有输入,则操作符返回 `NaN`
<<.operator-example 2 "[title[NotATiddler]is[tiddler]get[price]] +[variance[]]">>
! 简介
`<$vars>` 小工具允许在一个操作中设置多个变量。在某些情况下,其可比更灵活的 SetWidget 使用更简单的代码。
! 内容与属性
`<$vars>` 小工具的内容为指定给该变量值的范围。
|!属性 |!说明 |
|//{属性名称的首码为非 $ 者}// |每个属性名称指定一个变量的名称。属性值则指定给变量 |
! 示例
考虑您需要设置多个变量的情况。
使用 `<$vars>` 小工具,这种情况可能会以下列方式处理:
```
\define helloworld() Hello world!
<$vars greeting="Hi" me={{!!title}} sentence=<<helloworld>>>
<<greeting>>! I am <<me>> and I say: <<sentence>>
</$vars>
```
反之,以下为使用 `<$set>` 小工具的相同示例:
```
<$set name="greeting" value="Hi" >
<$set name="me" value={{!!title}} >
<$set name="sentence" value=<<helloworld>> >
<<greeting>>! I am <<me>> and I say: <<sentence>>
</$set>
</$set>
</$set>
```
! 备注
应注意此小工具与 `<$set>` 小工具的不同之处:
* 不能指定 fallback(也被称为 "emptyValue")
* 筛选器不能用于生成条件变量的指定
* 变量名称必须是字符串
{{$:/language/Help/verbose}}
<<.def version>> [[宏|Macros]]传回当前的 TiddlyWiki 版本号码。
!! 参数
(无)
<<.macro-examples "version">>
<$macrocall $name=".example" n="1" eg="""版本: <<version>>"""/>
{{$:/language/Help/version}}
下列 TiddlyWiki 影片可供选看。
<<list-links "[tag[Videos]]">>
目的是策划一系列的影片,引导人们操作使用 TiddlyWiki。欢迎[[贡献|Contributing]]。
! 简介
此 `<$view>` 小工具以指定格式显示条目字段的内容。
! 内容与属性
若字段或属性是丢失或为空,则显示 `<$view>` 小工具的内容。
|!属性 |!说明 |
|tiddler |条目名称 (默认为[[当前条目|Current Tiddler]]) |
|field |查看的字段名称 (默认为 "text") |
|index |查看的索引名称 |
|format |显示字段的格式 (见下列说明) |
|template |当 `format` 属性设置为 ''date'' 时,使用的可选模板字符串 |
|subtiddler |当目标条目是[[插件|Plugins]]时,可选的 SubTiddler 名称(见下文) |
|mode |<<.from-version "5.1.15">> 用于 wikified 格式的可选的嵌入解析模式。可能是 "inline" 或 "block" (默认值) |
!! 格式
下列格式可用于 `format` 属性:
|!格式 |!说明 |
|''text'' |纯文本(默认) |
|''htmlencoded'' |该字段显示为 HTML 编码 |
|''htmltextencoded'' |<<.from-version "5.1.24">> 该字段显示为 HTML 编码,只有双引号 (") 没有编码。这创建了更紧凑的 html 编码,适用于 html 文本内容,但//不//适用于属性。 |
|''urlencoded'' |该字段显示为 URL 编码 |
|''doubleurlencoded'' |该字段显示为双重 URL 编码 |
|''htmlwikified'' |该字段依据 mode 属性解译,并返回 HTML 为纯文本 (即 HTML 元素将显示为纯文本)|
|''plainwikified'' |该字段依据 mode 属性解译,并返回 HTML 的文本内容为纯文本(即 HTML 元素将被删除) |
|''htmlencodedplainwikified'' |该字段依据 mode 属性解译,并返回 HTML 的文本内容为 HTML 编码的纯文本(即 HTML 元素将被删除) |
|''date'' |该字段解译为 UTC 日期,且以 `template` 属性中指定的日期格式显示 |
|''relativedate'' |该字段解译为 UTC 日期,且显示为与目前时间的相对间隔时间 |
|''stripcomments'' |该字段解译为 JavaScript 原代码,且除去所有以 `\\#` 起始的注解行 |
|''jsencoded'' |该字段显示为 JavaScript 的编码字符串 |
!! 维基文本格式
要将字段内容显示为常规的[[维基文本|WikiText]],例如具有工作链接,请改为使用[[TranscludeWidget]]。
! 附属条目访问
查看小工具可访问[[插件|Plugins]]里的个别条目。
下列示例将查看条目 [[$:/DefaultTiddlers]] 的内核版本,即使它已被重写:
<<wikitext-example-without-html '
<$view tiddler="$:/core" subtiddler="$:/DefaultTiddlers"/>
'>>
一个基于 [[Vis.js|http://visjs.org]] 的交互式时间表可视化插件。可以在这里找到一个演示:{{!!url}}。
<<<
vis.js Timeline is a TiddlyWiki plugin that allows you to link your wiki-topics (tiddlers) in order to create clickable timelines. This project is a direct continuation of [[emkay's plugin|https://github.com/emkayonline/tw5visjs]].
<<<
大多数浏览器提供包含 JavaScript 主控台的 "网页开发者工具"。在 Chrome 和 Firefox 中,可以通过 "工具" 功能表,或按 <kbd>Ctrl + Shift + J</kbd>(于 Mac 则按 <kbd>Cmd + Shift + J</kbd> 打开) 。
当[[运行于 Node.js|TiddlyWiki on Node.js]],TiddlyWiki 包括一个简单的 HTTP/HTTPS 网页服务器,允许您在同一台计算机,或网络上运行的任何浏览器中,使用它。
<<.tip """网页服务器包含一个非常简单的机制,允许多个用户,使用不同的凭证登录。该实现设计为简单易用,通常不会被认为足够健壮,无法在开放的互联网上使用。其旨在供受信任网络上的个人或小团体使用。建议公开显露在互联网上公开显露之前,使用外部代理。""">>
! 如何工作
网页服务器侦听来自网络的请求,并依次运行以下操作:
* [[身份验证|WebServer Authentication]] 是识别当前用户的处理。TiddlyWiki支持三种类型的身份验证:[[匿名|WebServer Anonymous Access]]、[[基本|WebServer Basic Authentication]]与[[功能变量|WebServer Header Authentication]]
* [[授权|WebServer Authorization]]是确定特定用户可以访问哪些资源的处理。TiddlyWiki 实现了一个简单的方案,即读写访问维基可以独立控制。
* 路由是将请求分派给 [[API 处理|WebServer API]]的过程,并返回所需数据的处理。
! 用法
!! 匿名访问
网页服务器以 ListenCommand (取代较旧的 ServerCommand) 启动。所有的[[命名命令参数|NamedCommandParameters]]都是可选的,所以最简单的形式是:
```
tiddlywiki mywikifolder --listen
```
访问 http://127.0.0.1:8080/ 访问维基。访问是匿名的,所以任何人都可以阅读或写入维基。
这通常仅适用于本地计算机上的用户。有关如何将实例开启到本地网络的信息,请参阅网页服务器的 [[host|WebServer Parameter: host]] 参数。
!! 经过身份验证的访问
增加 [[username|WebServer Parameter: username]] 和 [[password|WebServer Parameter: password]] 参数对读取和写入都强制运行基本验证:
```
tiddlywiki mywikifolder --listen username=test password=tset
```
访问维基将提示输入用户和密码,如果它们与提供的凭证不匹配,则拒绝访问。
!! 匿名读取、经过身份验证的写入
本示例增加[[授权|WebServer Authorization]]参数 [[readers|WebServer Parameter: readers]] 和 [[writers|WebServer Parameter: writers]] 授予匿名用户的读取权限,但要求身份验证为 "joe" 以获得写入权限。
> 请注意,匿名用户可以通过访问路由 `/login-basic` (例如 http://127.0.0.1:8080/login-basic) ,来触发用户名/密码提示。
```
tiddlywiki mywikifolder --listen "readers=(anon)" writers=joe username=joe password=bloggs
```
请注意,包含特殊字符的参数,前后必须有双引号。
! 参数
可用的可选参数的完整列表是:
<<list-links filter:"[tag[WebServer Parameters]]">>
! 指南
有关集成的[[网页服务器|WebServer]]用法的更多信息:
<<list-links filter:"[tag[WebServer Guides]]">>
只有在 [[readers|WebServer Parameter: readers]] (用于读取) 中存在特殊的 ''(anon)'' 权杖时,才允许匿名访问。和可选的 [[writers|WebServer Parameter: writers]] (用于编写) 授权参数。
TiddlyWiki [[网页服务器|WebServer]] API 支持以下路由:
<<list-links "[tag[WebServer API]sort[]]">>
删除一个条目
```
DELETE /bags/default/tiddlers/{title}
```
参数:
* ''title'' - 要删除的条目名称的 URI 编码
Headers:
* ''x-requested-with'' - 为了让请求成功,必须设置为 `TiddlyWiki`,除非[[网页服务器参数:csrf-disable|WebServer Parameter: csrf-disable]] 设置为 `yes`
回应:
* 204 No Content
强制服务器要求基本验证的登录、然后重定向到根目录
```
GET /login-basic
```
从浏览器请求基本身份验证,若成功则重定向到根目录。
参数:
* 无
回应:
* 302 Found
*> `Location: /`
* 401 Unauthorized
*> `WWW-Authenticate: Basic realm="Please provide your username and password to login to <servername>"`
获取所有原始非系统条目的数组,不包括 ''text'' 字段。
```
GET /recipes/default/tiddlers.json
```
参数:
* ''filter'' - 筛选器标识要返回的条目(可选的,默认为 "[all[tiddlers]!is[system]sort[title]]")
* ''exclude'' - 从返回的条目中,以逗号分隔的排除字段清单(可选的,默认值为 "text")
为了避免默认配置中出现格式错误的筛选器所致的阻断服务攻击,唯一接受的筛选器是默认筛选器 "[all[tiddlers]!is[system]sort[title]]";尝试使用任何其他筛选器将导致 HTTP 403 错误。
要激活特定筛选器,请创建名为 "$:/config/Server/ExternalFilters/" 结合筛选器内文的条目,并将文本字段设为 "yes"。例如,TiddlyWeb 插件包括以下影子条目,用于激活所需的筛选器:
```
title: $:/config/Server/ExternalFilters/[all[tiddlers]] -[[$:/isEncrypted]] -[prefix[$:/temp/]] -[prefix[$:/status/]]
text: yes
```
It is also possible to configure the server to accept any filter by creating a tiddler titled $:/config/Server/AllowAllExternalFilters with the text "yes". This should not be done for public facing servers.
回应:
* 200 OK
*> `Content-Type: application/json`
*> Body: [[TiddlyWeb JSON 条目格式|TiddlyWeb JSON tiddler format]]的非系统条目数组
* 403 Forbidden
从条目 $:/favicon.ico 取得维基的图标
```
GET /favicon.ico
```
参数:
* 无
回应:
* 200 OK
*> `Content-Type: image/x-icon`
*> Body: 来自条目 $:/favicon.ico 的图像数据
获取静态文件的内容。详见[[使用集成的静态文件服务器|Using the integrated static file server]]
```
GET /files/<pathname>
```
参数:
* ''pathname'' - 文件的 URI 编码路径
回应:
* 200 OK
*> `Content-Type: <content-type>` (取决于文件的扩展名)
*> Body: 从档中截取到的数据
* 403 Forbidden
* 404 Not Found
取得指定条目的呈现。详见[[使用唯读单条目查看|Using the read-only single tiddler view]]。
```
GET /{title}
```
参数:
* ''title'' - 要呈现的条目名称的 URI 编码
回应:
* 200 OK
*> `Content-Type: <content-type>`
*> Body: 条目呈现
* 404 Not Found
获取服务器状态信息
```
GET /status
```
参数:
* 无
回应:
* 200 OK
*> `Content-Type: application/json`
*> 正文: 见下文
返回的 JSON 数据报括以下属性:
* ''username'' - 当前通过身份验证的用户名。若未定义,则返回 [[WebServer Parameter: anon-username]]
* ''anonymous'' - 若当前用户是匿名的,则为 true
* ''read_only'' - 正文应该为 [[TiddlyWeb JSON 条目格式|TiddlyWeb JSON tiddler format]]。当前用户对服务器的访问权限被限制为唯读,则为 true
* ''space'' - 始终包含对象 `{recipe: "default"}`
* ''tiddlywiki_version'' - 当前的 TiddlyWiki 版本
例如:
```
{
"username": "",
"anonymous": true,
"read_only": false,
"space": {
"recipe": "default"
},
"tiddlywiki_version": "5.1.18"
}
```
取得一个条目的原始字段
```
GET /recipes/default/tiddlers/{title}
```
参数:
* ''title'' - 要截取的条目名称的 URI 编码
回应:
* 200 OK
*> `Content-Type: application/json`
*> Body: [[TiddlyWeb JSON 条目格式|TiddlyWeb JSON tiddler format]]的条目。
* 404 Not Found
取得主维基
```
GET /
```
维基是由在 [[root-tiddler|WebServer Parameter: root-tiddler]] 参数中识别的条目组成, 以 [[root-render-type|WebServer Parameter: root-render-type]] 参数中的渲染类型呈现。然后从 [[root-serve-type|WebServer Parameter: root-serve-type]] 参数,提供内容类型服务。
参数:
* 无
回应:
* 200 OK
*> `Content-Type: text/html`
*> Body: 从档中截取到的数据
保存一个条目的原始字段
```
PUT /recipes/default/tiddlers/{title}
```
正文应为 [[TiddlyWeb JSON 条目格式|TiddlyWeb JSON tiddler format]]。
参数:
* ''title'' - 要保存的条目名称的 URI 编码
Headers:
* ''x-requested-with'' - 为了让请求成功,必须设置为 `TiddlyWiki`,除非[[网页服务器参数:csrf-disable|WebServer Parameter: csrf-disable]] 设置为 `yes`
回应:
* 204 No Content
*> `Content-Type: text/plain`
*> `Etag: "default/<title>/<changecount>:"`
''身份验证''是识别当前用户的过程。TiddlyWiki 支持三种类型的身份验证:
* [[匿名访问|WebServer Anonymous Access]],允许任何用户,在不需要身份验证的情况下,访问资源。可选地,还可以指定用户名来署名编辑
* [[基本认证|WebServer Basic Authentication]],要求用户输入用户名和密码组合,TiddlyWiki 对凭证的内部数据库进行验证。
* [[功能变量认证|WebServer Header Authentication]],要求外部代理将当前用户的用户名,放在请求的受信任功能变量中。经常被用作 "单一登录" 功能的基础。
''授权''是特定用户可以访问哪些资源的判定处理。它发生在[[认证|WebServer Authentication]]已确定用户的身份。TiddlyWiki 的网页服务器实现了一个简单的授权方案,允许独立控制谁对维基的读写访问权。
网页服务器参数 [[readers|WebServer Parameter: readers]] 和 [[writers|WebServer Parameter: writers]],每个都包含一个逗号分隔的//主体 的清单// (即用户名或某些特殊权杖),其应分别具有读或写的访问权限。
可用的特殊权杖有:
* ''(anon)'' - 标示所有匿名用户
* ''(authenticated)'' - 标示所有经过身份验证的用户
!! 唯读模式
当现行用户无权写入当前维基时,将使用唯读模式。
与添加或编辑内容有关的用户接口功能,在唯读模式下将被禁用:
* ''复制''、''删除''、''添加子条目'' 和 ''添加子日志'' 条目工具栏按钮
* ''导入''、''条目管理''、''添加条目'' ''添加图像'' 和 ''添加日志'' 页面控制按钮
当使用唯读模式时,条目 $:/status/IsReadOnly 设置为 `yes`。
!! 示例
这些示例使用[[凭证|WebServer Parameter: credentials]]参数,用于指定包含用户名和密码的文件位置。
在第一个示例中,允许用户 "joe" 和 "mary" 进行读取,并仅限 "mary" 具写入权限:
```
tiddlywiki mywikifolder --listen credentials=myusers.csv readers=joe,mary writers=mary
```
在下列示例中,对所有经过身份验证的用户,授予读取权限,但只有 "mary" 被授予写入权限:
```
tiddlywiki mywikifolder --listen credentials=myusers.csv "readers=(authenticated)" writers=mary
```
[[基本认证|https://en.wikipedia.org/wiki/Basic_access_authentication]]是一个标准[[机制|WebServer Authentication]],用于指示浏览器提示用户输入凭证。因其通过网络传递未加密的密码,建议与 HTTPS 一起使用。
如果通过[[用户|WebServer Parameter: username]]/[[密码|WebServer Parameter: password]]或[[凭证|WebServer Parameter: credentials]]参数指定凭证,则启动基本验证。
如果将[[网页服务器授权|WebServer Authorization]],配置为允许匿名和身份验证过的用户访问,则默认情况下,用户将不会被提示输入凭证,并且将被授予匿名访问权限。强制提示密码的访问路由 `/login-basic` (例如,http://127.0.0.1:8080/login-basic)。
关于集成的[[网页服务器|WebServer]]使用的进一步信息:
<<list-links filter:"[tag[WebServer Guides]]">>
功能参数身份验证是一种网页集成技术,使外部实体可以安全地,将经过身份验证的用户的详细信息,传递给应用程序。通常用于企业环境中的 "单一登录"。
若配置[[authenticated-user-header|WebServer Parameter: authenticated-user-header]],则启用功能参数身份验证
[[网页服务器配置参数|WebServer Parameters]] ''anon-username'',提供一个可选的用户名,用于签名来自匿名用户的编辑。
若无此参数,则匿名用户将获得一个空的用户名。
[[网页服务器配置参数|WebServer Parameters]] ''authenticated-user-header'',启用[[功能变量身份验证|WebServer Header Authentication]],通过指定 HTTP 功能变量,用于将用户名传递给 TiddlyWiki。
[[网页服务器配置参数|WebServer Parameters]] ''credentials'',包含 [[CSV 文件|https://en.wikipedia.org/wiki/Comma-separated_values]]的路径名,包含用户/密码组合的清单。使用该 ''credentials'' 参数启用[[网页服务器基本验证|WebServer Basic Authentication]]。
CSV 文件必须包含标题列和标记为 ''username'' 和 ''password'' 的字段。例如:
```
username,password
jane,do3
andy,sm1th
roger,m00re
```
注意事项:
* 可选的[[用户|WebServer Parameter: username]]/[[密码|WebServer Parameter: password]]参数可用于提供另一组凭证
* 路径名称是相对于维基文件夹
* 密码不能包含逗号字符 `,`
* 标题列必须存在
[[网页服务器配置参数|WebServer Parameters]] ''csrf-disable'',导致常见的[[跨网站请求伪造|https://en.wikipedia.org/wiki/Cross-site_request_forgery]]检查被禁用。这在异常或实验性的配置中可能是必要的。
将 ''csrf-disable'' 设置为 `yes` 会禁用 CSRF 检查;`no`(或任何其他值)则启用之。
当前唯一实现的检查,是使用名为 `x-requested-with` 的[[自定义功能变量|https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Protecting_REST_Services:_Use_of_Custom_Request_Headers]],必须包含字符串 `TiddlyWiki`,以便写入请求成功。
[[网页服务器配置参数|WebServer Parameters]] ''debug-level'',决定打印到主控台的调试信息的级别:
* ''full'' - 最大日志记录
* ''none'' - 无日志记录
[[网页服务器配置参数|WebServer Parameters]] ''host'',是服务器侦听的 IP 地址。最常见的设置有:
* ''127.0.0.1'' (默认) - 只侦听来自同一台计算机上的浏览器的连接
* ''0.0.0.0'' - 侦听所有网络接口上的连接,因此从可到达的网络上的任何浏览器侦听
* ''n.n.n.n'' - 侦听具有指定 IP 地址的网络接口上的连接
''请注意:''不宜在公共环境 (如咖啡店、图书馆、机场) 中使用 ''0.0.0.0'' 或 ''n.n.n.n'' ,因为这将使您的系统暴露于可能的入侵。
[[网页服务器配置参数|WebServer Parameters]] ''password'',与其伴随的 [[username|WebServer Parameter: username]] 一起使用,作为设置[[网页服务器基本验证|WebServer Basic Authentication]]的用户凭证的快捷方式。
[[网页服务器配置参数|WebServer Parameters]] ''path-prefix'',可用于为服务的所有路径,设置可选首码。
本示例使服务器从 http://127.0.0.1/MyApp,而不是默认的 http://127.0.0.1/ 提供服务。
```
tiddlywiki mywikifolder --listen "path-prefix=/MyApp"
```
请注意:
* 需要进一步的步骤,将用户端组件配置为使用首码。请参阅[[于主从式版本使用自定义路径首码|Using a custom path prefix with the client-server edition]]。
* 如果不需要路径首码,则 `path-prefix` 参数应省略或设置为空字符串,而不是预期为 `\`。
[[网页服务器配置参数|WebServer Parameters]] ''port'',指定服务器将在其上侦听连接的 TCP 端口。默认值为 "8080"。
''port'' 参数接受两种类型的值:
* 数值被解释为一个十进位端口
** 特殊值 0(零)使操作系统分配可用端口
* 非数字值被解释为一个环境变量,并从其中读取端口
本示例将服务器配置为侦听端口 8090:
```
tiddlywiki mywikifolder --listen port=8090
```
本示例将服务器配置为侦听环境变量 `THE_PORT` 中指定的端口:
```
tiddlywiki mywikifolder --listen port=THE_PORT
```
[[网页服务器配置参数|WebServer Parameters]] ''readers'',用于指定具有对维基的读取权限的安全主体。详细信息,请参阅[[网页服务器授权|WebServer Authorization]]。
[[网页服务器配置参数|WebServer Parameters]] ''root-render-type'',决定[[根维基条目|WebServer Parameter: root-tiddler]]的呈现方式:
* `text/plain` (默认) -- 呈现输出的纯文本内容 (即 HTML 元素被忽略)
* `text/html` -- 呈现输出的完整 HTML 内容 (即 包括 HTML 元素)
[[网页服务器配置参数|WebServer Parameters]] ''root-serve-type'',决定其呈现根维基的条目的内容类型。默认值为 `text/html`。
[[网页服务器配置参数|WebServer Parameters]] ''root-tiddler'',决定呈现为根维基的条目名称。默认值为 `$:/core/save/all`。
[[网页服务器设置参数|WebServer Parameters]] ''sse-enabled'' 激活[[服务器发送事件|https://en.wikipedia.org/wiki/Server-sent_events]],允许几乎即时地将更改传播到所有浏览器窗口或分页。
将 ''sse-enabled'' 设置为 `yes` 激活服务器发送的事件; `no` 或任何其他值将禁用它们。
[[网页服务器配置参数|WebServer Parameters]] ''system-tiddler-render-template'',用于[[唯读单一条目视图|Using the read-only single tiddler view]],指定提供系统条目的模板 。默认值为 `$:/core/templates/wikified-tiddler`,其呈现条目原始文本,没有任何特殊的查看模板。
<$macrocall $name=".tip" _="可以由指定一个条目的 <<.field _render_template>> 字段,覆盖此设置。" />
[[网页服务器配置参数|WebServer Parameters]] ''system-tiddler-render-type'',用于[[唯读单一条目视图|Using the read-only single tiddler view]],指定提供系统条目的呈现类型 。默认值为 `text/plain`,使返回呈现系统条目的原始文本。或者,`text/html` 可用于返回使呈现系统条目的完整 HTML。
<$macrocall $name=".tip" _="可以由指定一个条目的 <<.field _render_type>> 字段,覆盖此设置。" />
[[网页服务器配置参数|WebServer Parameters]] ''tiddler-render-template'',用于[[唯读单一条目视图|Using the read-only single tiddler view]],指定提供普通的非系统条目的模板 。默认值为 `$:/core/templates/server/static.tiddler.html`,其使用简单的侧边栏,呈现条目于轻量级页面中。
<$macrocall $name=".tip" _="可以由指定一个条目的 <<.field _render_template>> 字段,覆盖此设置。" />
[[网页服务器配置参数|WebServer Parameters]] ''tiddler-render-type'',用于[[唯读单一条目视图|Using the read-only single tiddler view]],指定提供普通的非系统条目的呈现类型 。默认值为 `text/html`,使返回渲染输出的完整 HTML。或者,`text/plain` 可用于返回呈现条目的原始文本。
<$macrocall $name=".tip" _="可以由指定一个条目的 <<.field _render_type>> 字段,覆盖此设置。" />
可选的[[网页服务器配置参数|WebServer Parameters]] ''tls-cert'',包含在 HTTPS 下运行网页服务器时,所需的凭证文件的路径名称。该路径名相对于维基文件夹。
详细信息,请参阅[[使用 HTTPS|Using HTTPS]]。
可选的[[网页服务器配置参数|WebServer Parameters]] ''tls-key'' 包含在 HTTPS 下运行网页服务器时,所需的密钥文件的路径名称。该路径名相对于维基文件夹。
详细信息,请参阅[[使用 HTTPS|Using HTTPS]]。
[[网页服务器配置参数|WebServer Parameters]] ''username'',连同其伴随的 [[password|WebServer Parameter: password]]:
* 启用[[基本验证|WebServer Basic Authentication]],并将指定的用户/密码组合,用[[凭证|WebServer Parameter: credentials]]参数,添加至指定的任何凭证中。
* 如果未指定 [[readers|WebServer Parameter: readers]] 和 [[writers|WebServer Parameter: writers]] ,则指定的用户,用作授权参数的默认值。
!! 示例
服务匿名用户,将用户设为 "joe":
```
tiddlywik mywikifolder --listen anon-username=joe
```
使用 "secret" 密码,限制用户 "joe" 的访问:
```
tiddlywik mywikifolder --listen username=joe password=secret
```
[[网页服务器配置参数|WebServer Parameters]] ''writers'',用于指定具有对维基的写入访问权限的安全主体。详细信息,请参阅 [[网页服务器授权|WebServer Authorization]]。
集成的[[网页服务器|WebServer]]支持下列配置参数:
<<list-links filter:"[tag[WebServer Parameters]]">>
<<.this-is-operator-example>>
<a class="tc-float-right tc-bordered-image" href="https://classic.tiddlywiki.com/" target="_blank" rel="noopener noreferrer">[img width="200" [TiddlyWiki Classic.png]]</a>
原始的 TiddlyWiki [[经典|TiddlyWikiClassic]]版仍然可用:
https://classic.tiddlywiki.com/。
请注意,TiddlyWiki 的[[当前版本|TiddlyWiki5]] 并不完全回朔兼容 TiddlyWikiClassic。内容可以导入,但将需要揉合来适应新的 WikiText 格式。开发中的 ''tw2parser'' 插件将允许忠实显示 TiddlyWikiClassic 创建的大部分内容:
https://tiddlywiki.com/plugins/tiddlywiki/tw2parser/
一个跨平台服务器应用程序,可以将条目保存到本地数据库
{{!!url}}
<<<
a minimal self-hosted app, written in Go, that can serve as a backend for a personal TiddlyWiki.
<<<
此 `tm-add-field` 消息由 FieldManglerWidget 处理。若该字段不存在,则添加一个空白值的字段。
|!属性 |!说明 |
|param |添加的字段名称 |
此添加字段的消息通常与 ButtonWidget 并用生成,且由 FieldManglerWidget 处理。
此 `tm-add-tag` 消息由 FieldManglerWidget 处理,添加指定的标签。
|!属性 |!说明 |
|param |添加的标签名称 |
此添加标签的消息通常与 ButtonWidget 并用生成,且由 FieldManglerWidget 处理。
必要时,此维基消息会促使当前的保存模块运行背景保存。
每当对保存库进行了更改时,应生成此自动保存维基消息。例如,导览小工具生成自动保存保存维基消息作为其处理 [[WidgetMessage: tm-save-tiddler]]、[[WidgetMessage: tm-delete-tiddler]] 和 [[WidgetMessage: tm-perform-import]] 的一部分。
此自动保存维基消息由 TiddlyWiki 核心[[同步机制|SyncMechanism]]调用当前的[[保存模块|SaverModules]]来处理。并非所有的 SaverModules 都会处理自动保存。
该 `tm-browser-refresh` 消息重新初始化所有插件条目。此消息不需要任何 `event` 对象属性。
刷新消息通常与 ButtonWidget 并用生成,且由核心处理。
此 `tm-cancel-tiddler` 消息放弃在草稿条目的更改。此消息需要 `event` 对象的以下属性:
|!属性 |!说明 |
|param |将被自编辑模式取消的条目名称 |
|tiddlerTitle |若未指定 ''param''(由 ButtonWidget 自动设置),则使用回传的条目名称 |
此取消条目消息通常与 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
此 `tm-clear-password` 消息从密码保存库清除当前的密码,以及清除 [[$:/isEncrypted]] 条目。详细信息,请参阅 EncryptionMechanism。
此消息通常与 ButtonWidget 并用生成,且由核心本身处理。
此 `tm-close-all-tiddlers` 消息将清空开启中条目列表。
此关闭所有条目消息通常与 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
此 `tm-close-other-tiddlers` 消息从开启中条目列表移除指定条目以外的其他条目。此消息需要 `event` 对象的以下属性:
|!属性 |!说明 |
|param |不会被关闭的条目名称 |
|tiddlerTitle |若未指定 ''param''(由 ButtonWidget 自动设置),则使用回传的条目名称 |
此关闭其他条目消息通常与 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
此 `tm-close-tiddler` 消息将从开启中条目列表移除指定的条目。此消息需要 `event` 对象的以下属性:
|!属性 |!说明 |
|param |将被关闭的条目名称 |
|tiddlerTitle |若未指定 ''param''(由 ButtonWidget 自动设置),则使用回传的条目名称 |
此关闭条目消息通常与 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
此 "复制到剪贴板" 消息尝试将指定的文本复制到剪贴板。如果成功,将显示条目 [[$:/language/Notifications/CopiedToClipboard/Succeeded]] 为通知。如果浏览器不允许操作,则会显示条目 [[$:/language/Notifications/CopiedToClipboard/Failed]] 。
它需要 `event` 对象上的下列属性:
|!属性 |!说明 |
|param |要复制到剪贴板的文本 |
此消息通常是用 ButtonWidget 产生,由 TiddlyWiki 核心处理。
! 范例
此示例将目前时间复制到剪贴板:
<$macrocall $name='wikitext-example-without-html'
src='<$button message="tm-copy-to-clipboard" param=<<now>>>
将日期复制到剪贴板
</$button>'/>
此 `tm-delete-tiddler` 消息删除指定的条目并将其自当前开启中的条目列表移除。若该条目是一个草稿条目,也将一并删除指定于 `draft.of` 字段的条目。此删除条目消息需要 `event` 对象的以下属性:
|!属性 |!说明 |
|param |将被删除的条目名称 |
|tiddlerTitle |若未指定 ''param''(由 ButtonWidget 自动设置),则使用回传的条目名称 |
此删除条目消息通常与 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
下载文件消息导致当前的保存模块,提示用户下载解析指定范本条目的结果为文件。它需要 `event` 对象的以下属性:
|!属性 |!说明 |
|param |要下载的范本条目名称 |
|paramObject |要下载的可选的变量值的 hashmap |
下载文件消息通常与 ButtonWidget 并用生成。
此下载文件消息由 TiddlyWiki 核心 SyncMechanism 调用当前的 [[SaverModule|SaverModules]] 来处理。
\define resizeDescription()
<div>
调整图像的大小为指定的宽度和高度,参数包括:
|!属性 |!说明 |
|width |指定图像大小调整的宽度 |
|height |指定图像大小调整的高度 |
</div>
\end
\define clearDescription()
<div>
清除图像的内容且使用纯色填满。参数包括:
|!属性 |!说明 |
|colour |填满图像的颜色,缺省为 <<.value "White">> |
<<.tip "''colour'' 可以为任何正常的 CSS 颜色值,包括的十六进位的形式或 RGB 格式。">>
</div>
\end
一个 `tm-edit-bitmap-operation` 调用一个__围绕__位图编辑器上的一个可用的操作。因此该消息须于编辑器中分派,以便它可以捕捉到它。`event` 对象的下列属性是必要的︰
|!属性 |!说明 |
|param |将被运行的操作名称,见''下方''可用的操作列表 |
|paramObject|将被运行的操作顶端所需的额外参数的 Hashmap |
`tm-edit-bitmap-operation` 消息通常由 ButtonWidget 或 ActionWidget 生成,且由围绕的位图编辑器处理。
!! 位图操作
此刻我们已实作以下位图操作︰
|!属性 |!说明 |
|<<.def "resize">>|<<resizeDescription>> |
|<<.def "clear">>|<<clearDescription>> |
!! 示例
一个例子可见于 [[$:/core/ui/EditorToolbar/size-dropdown]]:
```
<$button>
<$action-sendmessage
$message="tm-edit-bitmap-operation"
$param="resize"
width={{$config-title$/new-width}}
height={{$config-title$/new-height}}
/>
...
Resize
</$button>
```
\define exciseDescription()
<div>
剪切当前选定的文本于一个新条目,且替换为一个链接、宏或嵌入新条目。参数包括︰
|!属性 |!说明 |
|title |所选的内容被剪切至的新条目名称 |
|type |要插入的替换类型︰可以是一个 <<.value "transclude">>、<<.value "link">> 或 <<.value "macro">> |
|macro |当 //type=<<.value "macro">>//,指定被插入的宏名称。新条目名称被提供为该宏的第一个参数。默认为 ''translink'' 宏|
|tagnew |若此值为 ''<<.value "yes">>'',则以当前编辑的条目名称为新条目的标签 |
</div>
\end
\define undoDescription()
<div>
还原编辑器中的上次操作。没有任何额外的参数。
<<.tip "这直接使用在设计模式中由文档提供的的底层的 `execCommand` 浏览器方法。">>
</div>
\end
\define redoDescription()
<div>
重作编辑器中还原的上次操作。没有任何额外的参数。
<<.tip "这直接使用在设计模式中由文档提供的的底层的 `execCommand` 浏览器方法。">>
</div>
\end
\define replaceAllDescription()
<div>
以提供的文本替换编辑器的''所有''内容。
|!属性 |!说明 |
|text |要插入的文本 |
</div>
\end
\define replaceSelectionDescription()
<div>
以提供的文本替换当前所选内容。
|!属性 |!说明 |
|text |要插入的文本 |
</div>
\end
\define prefixLinesDescription()
<div>
以提供的字符插入首码于当前选定的列。如果选定的列已由提供的首码前缀,则反之将首码删除。
|!属性 |!说明 |
|character |首码字符|
|count |组成首码的字符数|
''示例'' 设置 //character="<<.value "!">>"// 和 //count="<<.value "3">>"// 将插入首码 "<<.value "!!!" >>",当被解析为 WikiText 时,将解析为副标题。
</div>
\end
\define wrapLinesDescription()
<div>
以提供的 <<.param "prefix">> 和 <<.param "suffix">> 围绕选定的//列//。
|!属性 |!说明 |
|prefix |选定列的前置字符串|
|suffix |选定列之后插入的尾码|
</div>
\end
\define wrapSelectionDescription()
<div>
以提供的 <<.param "prefix">> 和 <<.param "suffix">> 围绕当前//选定内容//。
|!属性 |!说明 |
|prefix |选定内容的前置字符串 |
|suffix |选定内容之后插入的尾码 |
</div>
\end
\define saveSelectionDescription()
<div>
将当前//选定//的文本保存到所提供的 <<.param "tiddler">> 和 <<.param "field">>。
|!属性 |!说明 |
|tiddler |该选定内容将被保存的条目名称 |
|field |字段名称 (默认为 "text") |
</div>
\end
\define makeLinkDescription()
<div>
建指向 <<.param "text">> 中的指定条目的一个维基文本链接。如果有选择,则用作链接的文本。
|!属性 |!说明 |
|text |将创建链接的条目名称 |
</div>
\end
\define insertTextDescription()
<div>
在位置插入 <<.param "text">> 中指定的文本。如果有选择,则会更换。
|!属性 |!说明 |
|text |要插入的文本 |
</div>
\end
一个 `tm-edit-text-operation` 调用一个__围绕__文本编辑器上的一个可用的操作。因此该消息须于编辑器中分派,以便可以捕捉到它。`event` 对象的下列属性是必要的︰
|!属性 |!说明 |
|param |将被运行的操作名称,见''下方''可用的操作列表 |
|paramObject|将被运行的操作顶端所需的额外参数的 Hashmap |
`tm-edit-text-operation` 消息通常由 ButtonWidget 或 ActionWidget 生成,且由围绕的文本编辑器处理。
!! 文本操作
此刻我们已实作以下文本操作︰
|!属性 |!说明 |
|<<.def "excise">>|<<exciseDescription>> |
|<<.def "undo">>|<<undoDescription>> |
|<<.def "redo">>|<<redoDescription>> |
|<<.def "replace-all">>|<<replaceAllDescription>> |
|<<.def "replace-selection">>|<<replaceSelectionDescription>> |
|<<.def "prefix-lines">>|<<prefixLinesDescription>> |
|<<.def "wrap-lines">>|<<wrapLinesDescription>> |
|<<.def "wrap-selection">>|<<wrapSelectionDescription>> |
|<<.def "save-selection">>|<<saveSelectionDescription>> |
|<<.def "make-link">>|<<makeLinkDescription>> |
|<<.def "insert-text">>|<<insertTextDescription>>|
!! 示例
一个例子可见于 [[$:/core/ui/EditorToolbar/bold]]:
```
<$action-sendmessage
$message="tm-edit-text-operation"
$param="wrap-selection"
prefix="''"
suffix="''"
/>
```
此 `tm-edit-tiddler` 消息于当前开启中的列表,以一个其自身的草稿版本取代该指定条目。此消息需要 `event` 对象的以下属性:
|!属性 |!说明 |
|param |将切换至编辑模式的条目名称 |
|tiddlerTitle |若未指定 ''param''(由 ButtonWidget 自动设置),则使用回传的条目名称 |
此编辑条目消息通常与 ButtonWidget 或 ActionSendMessageWidget 并用生成,且由 NavigatorWidget 处理。
<<.from-version "5.1.20">>
`tm-focus-selector` 小工具消息将焦点设置为由 `param` 参数中标识 DOM 元素的选择器。
|!属性 |!说明 |
|param |标识要聚焦 DOM 元素的选择器 |
|paramObject |要传递至 [[focus()|https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus]] 方法的可选附加参数的 hashmap |
<<.tip """使用 preventScroll="true" 防止浏览器卷动到焦点元素""">>
`tm-fold-all-tiddlers` 消息收合所有打开中的条目。
在内部,它将与故事河中的条目相对应的所有状态条目的内容设为 "<<.value "hide">>"。状态条目名称是由条目名称加上前缀来形成的,该前缀默认为 `$:/state/folded/`。
|!属性 |!说明 |
|foldedStatePrefix |为收合状态存放在其中的状态条目首码。默认为 `$:/state/folded` |
此 `tm-fold-all-tiddlers` 消息通常与 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
`tm-fold-other-tiddlers` 消息收合所有打开中的条目,除了参数 `param` 指定的条目。它是通过根据收合状态,将状态条目的内容设置为 "<<.value "show">>" 或 "<<.value "hide">>"。
|!属性 |!说明 |
|param|所指条目应被该收合动作忽略。 |
|foldedStatePrefix |为收合状态存放在其中的状态条目首码。 |
<<.tip "内核使用一个 `$:/state/folded/` 的 ''foldStatePrefix'' 存放默认的条目打开查看的收合状态。">>
<<.warning "该状态条目名称由 ''foldStatePrefix + ~TiddlerTitle'' 组成。若未设置 ''foldStatePrefix'',则其将覆盖条目本身的内容,从而导致数据丢失。">>
此 `tm-fold-other-tiddlers` 消息通常与 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
`tm-fold-tiddler` 消息切换状态条目的值。它是通过根据收合状态,将状态条目的内容设置为 "<<.value "show">>" 或 "<<.value "hide">>"。
|!属性 |!说明 |
|param|忽略... 必须使用收合状态 |
|foldedState |为收合状态存放所在的状态条目。 |
<<.tip "内核使用一个 `$:/state/folded/` 的 ''foldState'' 首码 + ''条目名称'' 存放默认故事视图的收合状态。">>
此 `tm-fold-tiddler` 消息通常与 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
内核 $:/core/ui/ViewTemplate 定义一个全域变量 `folded-state`,用于每个条目。它被创建像这样:
```
\define folded-state()
$:/state/folded/$(currentTiddler)$
\end
```
若浏览器支持,则全屏幕消息用于进入、退出或切换浏览器的 "全屏幕" 模式。其使用以下属性于 `event` 对象上:
|!属性 |!说明 |
|param |`enter` 进入全屏幕模式,`exit` 退出全屏幕模式,否则切换全屏幕状态 |
全屏幕消息系由 TiddlyWiki 核心处理。
<$macrocall $name='wikitext-example-without-html'
src='<$button message="tm-full-screen">
切换全屏幕
</$button>
<$button message="tm-full-screen" param="enter">
进入全屏幕
</$button>
<$button message="tm-full-screen" param="exit">
退出全屏幕
</$button>'/>
此 `tm-home` 消息关闭所有以开启的条目,也自浏览器网址列移除所有[[引用链接|PermaLinks]]。此消息不需要任何 `event` 对象属性。
回首页消息通常与 ButtonWidget 并用生成,且由核心处理。
此 `tm-import-tiddlers` 消息插入一条目列表至待处理的导入条目 [[$:/Import]]。它也套用任何作用中的''升级程序''模块至伴随它的每个条目 (详细信息请参阅 UpgradeMechanism).
|!属性 |!说明 |
|param |被导入的 JSON 文本格式的条目数组 |
|autoOpenOnImport |<<.from-version "5.1.23">> 可选值 "no" 或 "yes" 可以覆写 tv-auto-open-on-import |
|importTitle|<<.from-version "5.1.23">> 用于导入过程,可选的条目名称,而不是 ~$:/Import |
此导入消息通常与 DropzoneWidget 或 BrowseWidget 并用生成,且由 NavigatorWidget 处理。
! 配置变量
* <<.vlink tv-auto-open-on-import>>
`tm-load-plugin-from-library` 消息从指定的插件程序库中加载指定条目或插件。
|!属性 |!说明 |
|title |要加载到当前维基的条目名称或插件 |
|url |要加载条目或插件的指定插件程序库的 URL。 |
!! 示例
下列代码片段将从官方的插件程序库安装 CodeMirror 插件︰
```
<$button>
<$action-sendmessage $message="tm-load-plugin-from-library" title="$:/plugins/tiddlywiki/codemirror" url="https://tiddlywiki.com/library/v5.1.11/index.html"/>
安装 CodeMirror
</$button>
```
<<.tip "通常一个插件程序库须先(初始化)加载后才能使用。如果由 ''url'' 指定的插件程序库尚未初始化,它将被加载并初始化。">>
此 `tm-load-plugin-from-library` 消息通常由 ButtonWidget 生成,且由核心本身处理。
`tm-load-plugin-library` 消息加载指定的插件程序库,并导入包含插件的相关信息于临时条目。
|!属性 |!说明 |
|url |要加载的插件程序库的 网址。 |
|infoTitlePrefix|创建中的临时条目的首码,该条目包含插件程序库提供的插件相关信息。默认为 <<.value "$:/temp/RemoteAssetInfo/">> |
!! 示例
下列代码片段将加载官方的插件程序库︰
```
<$button>
<$action-sendmessage $message="tm-load-plugin-library" infoTitlePrefix="$:/temp/RemoteAssetInfo/" url="https://tiddlywiki.com/library/v5.1.11/index.html"/>
加载官方的插件程序库
</$button>
```
此 `tm-load-plugin-library` 消息通常由 ButtonWidget 生成,且由核心本身处理。
登录消息提示用户输入用户名和密码,并且尝试登录到当前服务端主机。条目 [[$:/status/IsLoggedIn]] 的值为 "yes" 或 "no" 反映当前登录状态,且 [[$:/status/UserName]] 反映当前的用户名。
登录消息是由 TiddlyWiki 内核 SyncMechanism 调用当前的 [[SyncAdaptorModule|SyncAdaptorModules]] 来处理。(通常是 ''tiddlywiki/tiddlywebadaptor'' 插件)。
<<.from-version "5.1.23">> 登录消息可以选择接受称为 ''username'' 和 ''password'' 的参数,这些参数会立即尝试使用指定的认证登录,而不显示提示。
注销消息试图注销用户于当前服务器端主机。条目 [[$:/status/IsLoggedIn]] 的值为 "yes" 或 "no" 反映当前登录状态,且 [[$:/status/UserName]] 反映当前的用户名。
注销消息是由 TiddlyWiki 核心 SyncMechanism 调用当前的 [[SyncAdaptorModule|SyncAdaptorModules]] 来处理。(通常是 ''tiddlywiki/tiddlywebadaptor'' 插件)。
|!属性 |!说明 |
|param |欲显示的条目名称 |
|paramObject |提供给 modal 的变量 Hashmap,包含传递给发送消息的小工具的所有其他参数。 |
|rootwindow |<<.from-version 5.1.18>> ''yes'' 或 ''true'' 将始终在 wiki-root-window 中显示一个模态 |
<<.vlink currentTiddler>> 变量设为 modal 条目的名称,但可于 <<.param paramObject>> 指定一个不同的值取代之。
此 modal 消息通常与 ButtonWidget 并用生成,且由 TiddlyWiki 内核处理。
[[条目中的字段|Modals]]在 modal 中显示可用于自定义其外观。
! 示例
下列为显示 modal 和传递参数给它的一个示例:
(请注意,传至 `action-sendmessage` ,除 `$param` 和 `$message` 以外,如何可作为 modal 中的变量。
<$macrocall $name='wikitext-example-without-html'
src='姓名: <$edit-text tiddler="$:/temp/yourName" tag="input" default="您的姓名"/>
留言:
<$edit-text tiddler="$:/temp/yourMessage" default="您的留言"/>
<$button>
<$action-sendmessage $message="tm-modal" $param="SampleModal" yourName={{$:/temp/yourName}} yourMessage={{$:/temp/yourMessage}}/>
送出
</$button>'/>
<<.tip """<$macrocall $name=".from-version" version="5.1.18"/> 如果从''新窗口''内触发,则上述示例将显示在该窗口中。<$macrocall $name=".attr" _="rootwindow"/> 属性可以设置为 ''yes'' 或 ''true'' 以继承此行为,并在 ''root'' 窗口中显示模态""">>
<<.tip """<$macrocall $name=".from-version" version="5.1.23"/> modal 中的条目链接将在与发送 `tm-modal` 消息的小工具相同的故事中打开。您可以通过在发送 `tm-modal` 消息时,为变量 `tv-story-list` 和 `tv-history-list` 指定值来覆盖此设置。
""">>
此 `tm-navigate` 消息将指定条目插入开启中的列表,且置于曾开启列表的顶端。若该条目尚未显示于开启中的列表,则它将出现于紧跟着指定于 `event.navigateFromTitle` 的条目之后。
此消息需要 `event` 对象的以下属性:
|!属性 |!说明 |
|navigateTo |将被导览的条目名称 |
|navigateFromTitle |从此条目名称开始导览 |
|navigateFromClientRect |在用户端页面座标启动导览元素的边框 |
|navigateSuppressNavigation |''true'' 使该添加的条目于开启中的列表, 而非曾开启列表。这将禁止与导航到条目的关联卷动显示 |
此导览消息通常与 LinkWidget、ActionNavigateWidget 或 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
此 `tm-new-tiddler` 消息新建一个草稿条目并加至当前的开启中列表。此消息需要 `event` 对象的以下属性:
|!属性 |!说明 |
|param |可选的新条目的样板条目名称 |
|paramObject |可选的附加条目字段的 hashmap |
|navigateFromTitle |从此条目名称导览至该新条目 |
选择草稿条目的名称系根据下列规则:
* 若使用 hashmap 并且指定名称字段,则使用该名称
* 若使用样板条目,则使用其名称并附加数字尾码使其变为唯一
* 否则,生成基于默认新条目名称带数字尾码,使它为唯一的新名称
此添加条目的消息通常与 ButtonWidget 或 ActionSendMessageWidget 并用生成,且由 NavigatorWidget 处理。
! 示例
若要生成一个创建条目标签为 "task" 的按钮,创建一条目名为 "TaskTemplate" 并设其标签 "task",然后生成像这样的按钮:
```
<$button message="tm-new-tiddler" param="TaskTemplate">New Task</$button>
```
若要以给定属性创建一个新条目,而不是从一个范本︰
```
<$button>
<$action-sendmessage $message="tm-new-tiddler" title="This is newly created tiddler" tags="OneTag [[Another Tag]]" text=<<now "Today is DDth, MMM YYYY">>/>
New Tiddler
</$button>
```
通知消息简单地在页面右上角显示一指定的条目作为警示。它需要 `event` 对象的以下属性:
|!属性 |!说明 |
|param |欲显示的条目名称 |
|paramObject |提供给通知的变量的哈希映射 |
此通知消息由 TiddlyWiki 核心处理。
<<.from-version "5.1.14">>
`tm-open-external-window` 消息打开一个外部链接,例如:"https://tiddlywiki.com",于一个新//浏览器//窗口。若未指定参数,则打开说明条目。以 <<.param "paramObject">> 传递任何额外的参数,将供作新窗口的变量。
|!属性 |!说明 |
|param |将打开于新的浏览器窗口的条目网址,若为空值,默认为 [[TiddlyWiki 说明|https://tiddlywiki.com/#WidgetMessage%3A%20tm-open-external-window]] |
|paramObject |可选:提供到窗口的变量的 Hashmap。见下文|
''parmObject''
|!属性 |!说明 |!重要 |
|windowName|如果提供了参数,则可用其在同一窗口中打开打开不同的链接,例如: `_tiddlywiki`。默认为空,因此每个链接都会打开一个新窗口。 |这种行为受到浏览器中的用户设置与浏览器默认行为的影响! |
|windowFeatures|此参数需要作为单个字符串提供。例如: `"height=400, width=600"`。有关可能参数的详细说明,请参阅:[[Mozilla Help|https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features]] ||
`tm-open-external-window` 消息通常由 ButtonWidget 或 ActionSendMessageWidget 生成,且由内核本身处理。
''示例''
<$macrocall $name='wikitext-example-without-html'
src='<$button>
<$action-sendmessage $message="tm-open-external-window" $param="https://tiddlywiki.com" windowName="_tiddlywiki" windowFeatures="height=500, width=900"/>
Open ~TiddlyWiki - Action
</$button>
<$button>
<$action-sendmessage $message="tm-open-external-window" $param="https://developer.mozilla.org/en-US/docs/Web/API/Window/open" windowName="_tiddlywiki" windowFeatures="height=400, width=600"/>
Open Mozilla Help - Action
</$button>
<$button message="tm-open-external-window" param="https://tiddlywiki.com" >
Open ~TiddlyWiki - Button
</$button>'/>
`tm-open-window` 消息开启一个条目于一个新//浏览器//窗口。若未指定参数,开启当前条目于一个新窗口。同 `tm-modal`,通过 <<.param "paramObject">> 传递任何额外的参数,作为新窗口的变量。
|!属性 |!说明 |
|param |将开启于新的浏览器窗口的条目名称,默认为 <<.var "currentTiddler">> |
|template |将被呈现的该条目中的模板 |
|windowTitle |开启的窗口的标题字符串 |
|width |新的浏览器窗口的宽度 |
|height |新的浏览器窗口的高度 |
|print |设为 "yes" 触发开启浏览器打印对话框 |
|paramObject |将提供到窗口的变量的 Hashmap |
此 `tm-open-window` 消息通常由 ButtonWidget 或 ActionWidget 生成,且由核心本身处理。
运行导入消息从一个指定的插件复制条目到主保存区。核心如何使用它的概述,请参阅 UpgradeMechanism。
|!属性 |!说明 |
|param |待处理的导入条目名称,缺省为 $:/Import |
选择哪些条目将被导入,字段名称使用 `selection-` 加上条目名称的格式。其值为 ''unchecked'' 将使该条目略过导入。
此运行导入消息与 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
此 `tm-permalink` 消息更改浏览器网址列为一指定的条目的 [[引用链接|PermaLinks]],缺省为当前条目。
此引用链接消息支持 `event` 对象的以下属性:
|!属性 |!说明 |
|param |引用链接的条目名称 |
|tiddlerTitle |当前条目 (若 `param` 未指定条目名称,此为其默认值) |
此引用链接消息通常与 ButtonWidget 并用生成,且由 story 机制处理。
此 `tm-permaview` 消息更改浏览器网址列为所有已开启条目的 [[固定链接|PermaViews]],与正被导览的条目,缺省为当前条目。
此固定链接消息支持 `event` 对象的以下属性:
|!属性 |!说明 |
|param |于固定链接中被导览条目名称 |
|tiddlerTitle |当前条目 (若 `param` 未指定条目名称,此为其默认值) |
此固定链接消息通常与 ButtonWidget 并用生成,且由 story 机制处理。
<<.from-version "5.1.14">> `tm-print` 消息致使浏览器显示当前页面的打印对话框。它不需要 `event` 对象上的任何属性。
`tm-print` 消息通常为 ButtonWidget 生成,且由核心处理。
此 `tm-remove-field` 消息由 FieldManglerWidget 处理,移除指定的字段。
|!属性 |!说明 |
|param |要移除的字段名称 |
此移除字段的消息通常与 ButtonWidget 并用生成,且由 FieldManglerWidget 处理。
此 `tm-remove-tag` 消息由 FieldManglerWidget 处理,移除指定的标签。
|!属性 |!说明 |
|param |要移除的标签名称 |
此移除标签的消息通常与 ButtonWidget 并用生成,且由 FieldManglerWidget 处理。
`tm-rename-tiddler` 消息通过删除条目,并重新创建新名称来重命名。重命名条目消息需要 `event` 对象上的以下属性:
|!属性 |!说明 |
|from |目前的条目名称 |
|to |新的条目名称 |
此重命名条目的消息通常与 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
此 `tm-save-tiddler` 消息被套用至草稿条目。它将草稿保存于标识为 `draft.of` 的条目,然后删除草稿。此保存条目消息需要 `event` 对象的以下属性:
|!属性 |!说明 |
|param |切换出编辑模式的条目名称 |
|tiddlerTitle |若不指定 ''param'' (由 ButtonWidget 自动设置),则使用回传的条目名称 |
此保存条目消息通常与 ButtonWidget 并用生成,且由 NavigatorWidget 处理。
保存维基消息使当前的保存模块运行完整的保存操作,保存操作可能涉及用户交互。它需要以下 `event` 对象的属性:
|!属性 |!说明 |
|param |用于呈现的范本条目名称 (缺省为 `$:/core/save/all`) |
|paramObject |用于呈现的可选的变量值的 hashmap |
此保存维基消息通常由 ButtonWidget 生成。
此保存维基消息由 TiddlyWiki 核心 SyncMechanism 调用当前的 [[SaverModule|SaverModules]] 来处理。
`tm-scroll` 消息使周围的可滚动容器滚动指定的 DOM 节点于可视范围。`tm-scroll` 在内核本身各个地方处理,但也可以由 [[ScrollableWidget]] 处理。
|!属性 |!说明 |
|target |应滚动到的可滚动容器的目标 DOM 节点。(请注意,只能通过 JavaScript 代码设置此参数) |
|selector |<<.from-version "5.1.23">> 可选字符串 [[CSS 选择器|https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors]]作为标识目标 DOM 节点的替代方法。 |
服务器刷新消息尝试同步当前服务端主机的最新更动。
服务器刷新消息是由 TiddlyWiki 核心 SyncMechanism 调用当前的 [[SyncAdaptorModule|SyncAdaptorModules]] 来处理。(通常是 ''tiddlywiki/tiddlywebadaptor'' 插件)。
此 `tm-set-password` 消息提示用户输入新的密码并将它保存在密码保存库,取代既有的密码。也设置 [[$:/isEncrypted]] 条目。详见 EncryptionMechanism。
此消息通常与 ButtonWidget 并用生成,且由核心处理。
`tm-unfold-all-tiddlers` 消息展开所有打开中的条目。为此,将其所有状态条目的内容设置为: "<<.value "show">>"
|!属性 |!说明 |
|foldedStatePrefix |收合状态存放所在的状态条目的首码。 |
<<.tip "内核使用一个 `$:/state/folded/` 的 foldStatePrefix 存放默认的条目打开查看的收合状态。">>
<<.warning "该状态条目名称由 ''foldStatePrefix + ~TiddlerTitle'' 组成。若未设置 ''foldStatePrefix'',则其将覆盖条目本身的内容,从而导致数据丢失。">>
`tm-unfold-all-tiddlers` 消息通常由 ButtonWidget 或 ActionWidget 生成,且由围绕的 NavigatorWidget 处理。
`tm-unload-plugin-library` 消息卸载指定的插件程序库,并删除相关的临时条目。
|!属性 |!说明 |
|url |要卸载的插件程序库的网址 |
卸载插件程序库删除以下条目:
* 名称为 `$:/temp/ServerConnection/` + `<url>` 的条目
* 首码为 `$:/temp/RemoteAssetInfo/` + `<url>` + `/` 的所有条目
`tm-unload-plugin-library` 消息通常由 ButtonWidget 生成,且由核心本身处理。
~TiddlyWiki 的显示是由一些底层的<<.def 小工具>>驱动。这些小工具都组织成树状结构:每个小工具有一个父层工具,以及零或更多的子层小工具。
~TiddlyWiki 经由解析条目的 WikiText 生成此 <<.def 小工具树>>。每个 WikiText 语法的组件,甚至包括普通文本的简单案例,生成对应的小工具。小工具树是后续化为实际显示的中间表示。
小工具是类似于 HTML 文档中的元素。事实上,WikiText 中的 HTML 标记生成专用的 <<.def 元素小工具>>。
每个小工具的类别贡献一个特定功能,例如 <<.wlink2 显示图像 ImageWidget>> 的功能、或是 <<.wlink2 一个按钮 ButtonWidget>>、<<.wlink2 调用一个宏 MacroCallWidget>>、<<.wlink2 从别处嵌入片段 TranscludeWidget>>,或 [[标示一段文本作为标题|HTML in WikiText]]。
这些更专业化的小工具使用通用的[[小工具语法|Widgets in WikiText]] 作为他们唯一可能的 WikiText 表示。
核心内置以下几类小工具:
<<list-links "[tag[Widgets]]">>
! 小工具
小工具提供 WikiText 更丰富的功能。它们与 [[HTML 元素|HTML in WikiText]] 使用相同的标记方式,但是标记的名称前包含一个 `$` 符号,例如:
```
<$button message="tc-close-tiddler">Close Me!</$button>
```
需注意的是小工具继承 [[HTML in WikiText]] 的所有功能:
* 小工具的属性可被指定为:
** 不带引号的字符串 (不可含有空白字符)
** 单、双引号引述的字符串
** 连续三个双引号引述的字符串
** 调用宏 (例如: `attr=<<myMacro>>`)
** 嵌入条目、字段 (例如: `attr={{MyTiddler!!field}}`)
* 小工具的内文将在 ''inline'' 模式下进行解析,除非开始标记之前是两个换行符号 ( ''inline'' 模式意味着 ''block'' 模式的格式不会被识别,例如表格、列表和标题)。
详见 [[HTML in WikiText]]。
可用的小工具:
<<list-links "[tag[Widgets]]">>
"维基化" 是一个通用术语,是将含有维基文本的条目,转换为浏览器所需的 HTML DOM 呈现的动态过程,和如果标的条目改变则更新呈现。
它由几个不同的步骤组成:
* [[解析机制|ParsingMechanism]]:读取条目本文并扫描维基文本构造,显示最终的结构的树状表示形式。这是一个昂贵的过程,因此将缓存分析树,并且仅在更改了相应的条目时,才需要更新
* [[小工具机制|WidgetMechanism]]:始于一个指定的根条目,为塑造一个渲染树的每个分析树节点,递归地实例化一个小工具。小工具也可以选择创建 DOM 节点。
* [[刷新机制|RefreshMechanism]]:有选择地、高效地更新渲染树,处理对条目存放区的更改
此机制用于在浏览器中构建 TiddlyWiki 的主交互页面。启动时,解析条目 $:/core/ui/PageTemplate 并呈现给 DOM,递归地拉入其他条目,以构建整个用户界面。任何用户交互 -- 跟随一个链接、点击一个按钮、或在文本方块中输入 -- 都会在条目存放区中触发更改,然后自动通过小工具树传播。 例如,如果用户按一下链接导航到新的条目,则运行以下步骤:
# 按一下该链接将触发 LinkWidget 的操作,默认情况下,该操作是将目标条目,加到条目 $:/StoryList 的清单字段
# 对条目存放区的修改,将异步触发刷新周期。即使连续修改了多个条目,异步触发可确保刷新周期仅运行一次
# 刷新周期递归访问渲染树的每个节点,使其有机会根据对条目存放区的累积更改,来更新自己。在这种情况下,主故事河的 ListWidget 注意到需要向河流中添加单个条目,并呈现新显示的条目,而不会打扰其他条目
整个维基化过程的性能是至关重要的。如果刷新周期时间超过 400 毫秒左右,则用户会发现他们的动作和效果之间的延迟。参阅[[性能|Performance]]对于如何优化性能的一些讨论。
渲染过程也积极地重复用于 TiddlyWiki 的其他部分,无论是在浏览器和服务器上:
* 生成 TiddlyWiki 的独立 HTML 表示形式
* 创建条目的静态 HTML 呈现
* 动态呈现 CSS 样式表条目
! 简介
此 `<$wikify>` 小工具解析和呈现文本的字符串,并将结果赋予指定的[[变量|Variables]]。变量的新值是可用于 `<$wikify>` 小工具中的内容。
! 内容与属性
此 `<$wikify>` 小工具的内容 是分配给该变量的值的范围。
|!属性 |!说明 |
|name |要分配的变量名称 |
|text |要解析和呈现的文本 |
|formattedtext |传回呈现输出的简单文本格式的纯文本 (即忽略 HTML 标记) |
|type |文本的内容类型(默认值为 `text/vnd.tiddlywiki`) |
|mode |解析模式 ︰`block`(默认值)或 `inline` |
|output |关键字,指示所需的输出类型,缺省为 `text`(见下文) |
可用的输出类型包括︰
|!关键字 |!说明 |
|text |传回呈现的输出的纯文本 (即忽略 HTML 标记)|
|html |传回输出的呈现的 HTML |
|parsetree |传回解析树的格式化 JSON 表示形式 |
|widgettree |传回小工具树的格式化 JSON 表示形式 |
~WikiText 是一个可输入广泛的文本格式、超文本和交互功能的简洁表达方式。它让您专注在写作上,没有复杂的用户接口干扰。它被设计为让 [[MarkDown|http://daringfireball.net/projects/markdown/]] 的用户觉得亲切,但更着重于链接和交互功能。
也可以使用 [[编辑器工具栏|Editor toolbar]] 将 WikiText 插入到 <<.field text>> 字段。
WikiText 介绍,请参阅 [[TiddlyWiki 的格式化文本|Formatting text in TiddlyWiki]]。
<ul><$list filter="[tag[WikiText]sort[title]]">
<li style="list-style-type: decimal;"><$link to={{!!title}}><<toc-caption>></$link></li>
</$list></ul>
在 Windows 下即可借由重命名 HTML 文件的扩展名为 `*.hta`,将其转换成一个真正的本机应用程序的 TiddlyWiki。然后,''fsosaver'' 模块可以使用 ~ActiveX ~FileSystemObject 保存变更。
请注意,这种方法的一个缺点是 TiddlyWiki 文件以 UTF-16 格式保存,使其文件大小为通常 UTF-8 编码的两倍大。无论如何,以另一种保存方法打开并保存,将文件重新编码为 UTF-8。
更多详细信息,请参阅维琪百科:https://en.wikipedia.org/wiki/HTML_Application
! 简介
如果您想[[贡献|Contributing]] TiddlyWiki 的开发,而非[[已常用方式安装 TiddlyWiki|Installing TiddlyWiki on Node.js]],你可以直接使用 GitHub 的保存库。
Mario Pietsch 创建一个[[介绍短片|Working with the TiddlyWiki5 repository video]].
! 设置
如果您计划使用 TiddlyWiki5 原始代码,请运行以下步骤:
# 自 https://github.com/Jermolene/TiddlyWiki5,复刻 (fork) TiddlyWiki5 GitHub 原代码保存库
# 自您的复刻版复制 (clone) 一份本机复本
# 开启一个命令行终端,更改当前的工作目录到保存库的根目录
# 输入 `npm link` (Windows) 或 `sudo npm link` (Mac/Linux) 告诉 [[npm]] 使用此份保存库当作全域安装的
这样你可以透过 [[npm]] 使用 TiddlyWiki5,如同它以一般方式被安装 `npm install -g tiddlywiki`。
也请参阅 [[Scripts for TiddlyWiki on Node.js]].
Mario Pietsch 创建一个[[使用于 GitHub 上的 TiddlyWiki5原代码保存库|Working with the TiddlyWiki5 repository]]的简短教学影片。
<iframe width="560" height="315" src="https://www.youtube.com/embed/6ElUruH92tc" frameborder="0" allowfullscreen></iframe>
TiddlyWiki 的 ''XLSX 工具''应用版包含一些工具,可与 Microsoft Excel 和 Google 试算表等应用程序生成的 `.XLSX` 试算表一起工作。它可以在浏览器或 Node.js 中使用。
https://tiddlywiki.com/prerelease/editions/xlsx-utils/